我正在尝试仅使用代码在 VB.net 中创建一个串行端口。因为我正在创建一个类库,所以我不能使用内置组件。我已经尝试实例化一个新的 SeialPort() 对象,但这似乎还不够。我确信我缺少一些简单的东西,任何帮助将不胜感激!谢谢!
PS 我应该补充一点,我此时遇到的问题是获取代码来处理 datareceived 事件。除此之外,它可能正在工作,但由于这个问题我无法判断。
我正在尝试仅使用代码在 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 类,并且工作正常。你真的不需要其他任何东西。检查控制面板中的硬件设置,并确保使用相同的参数实例化类。