[英]Creating a Serial Port in code in VB.net
我試圖只使用代碼在VB.net中創建一個串口。 因為我正在創建一個類庫,所以我無法使用內置組件。 我試過實例化一個新的SeialPort()對象,但這似乎還不夠。 我確信有一些簡單的我想念,任何幫助將不勝感激! 謝謝!
PS我應該補充一點,我此時遇到的問題是獲取處理datareceived事件的代碼。 除此之外它可能正在起作用,但由於這個問題我無法分辨。
如果要使用事件,請確保使用'withevents'聲明serialPort對象。 下面的示例將允許您連接到串行端口,並將使用接收的字符串引發事件。
Imports System.Threading
Imports System.IO
Imports System.Text
Imports System.IO.Ports
Public Class clsBarcodeScanner
Public Event ScanDataRecieved(ByVal data As String)
WithEvents comPort As SerialPort
Public Sub Connect()
Try
comPort = My.Computer.Ports.OpenSerialPort("COM5", 9600)
Catch
End Try
End Sub
Public Sub Disconnect()
If comPort IsNot Nothing AndAlso comPort.IsOpen Then
comPort.Close()
End If
End Sub
Private Sub comPort_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles comPort.DataReceived
Dim str As String = ""
If e.EventType = SerialData.Chars Then
Do
Dim bytecount As Integer = comPort.BytesToRead
If bytecount = 0 Then
Exit Do
End If
Dim byteBuffer(bytecount) As Byte
comPort.Read(byteBuffer, 0, bytecount)
str = str & System.Text.Encoding.ASCII.GetString(byteBuffer, 0, 1)
Loop
End If
RaiseEvent ScanDataRecieved(str)
End Sub
End Class
我發現這篇文章非常好。
我寫的代碼是:
port = new System.IO.Ports.SerialPort(name, 4800, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
port.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
void port_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
buffer = port.ReadLine();
// process line
}
對不起,這是C#,但......
我遇到的唯一問題是如果端口在打開時被丟棄,應用程序似乎在退出時失敗。
謝謝大家的幫助,尤其是關於使用WithEvents關鍵字實例化類的答案。
我發現了一篇非常好的文章,解釋了如何為串口創建一個管理器類。 它還討論了將二進制數據和十六進制數據發送到串行端口。 這非常有幫助。
我在過去的項目中使用過SerialPort .Net類,我工作得很好。 你真的不需要別的。 檢查控制面板中的硬件設置,確保使用相同的參數實例化類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.