异步串口通信






2.20/5 (16投票s)
如何异步通信到串口。
引言
我一直在寻找一种与我的自定义设备通信的方法,该设备具有用于通信的端口。我正在寻找一种异步方法,因为串行端口可以随时从设备接收数据。
背景
代码背后的想法是,每当串行端口接收到任何数据时,端口类将触发一个事件,即 DataReceived
。此事件有助于检测随时接收到的任何数据到串行端口,并且非常有用。为了使其更有帮助,我创建了一个简单的类,可以轻松快速地创建与串行端口的连接。以下是类图,可以帮助您理解它。

Using the Code
类的名称是 ASYNCSERIALPORT
。在任何窗体或其他类上创建类的实例。在创建实例时,您可以传递连接所需的参数。这些参数是可选的。唯一必需的参数是端口名称。
''Creating the Instance of the Class
Dim NewAsyncSerialPort As New AsyncSerialPort("COM1")
或者
''Creating the Instance of the Class
Dim NewAsyncSerialPort As New AsyncSerialPort("COM1", 9600, _
IO.Ports.Parity.None, 8, IO.Ports.StopBits.One)
其他参数是 BaudRate
(波特率)、Parity
(校验位)、DataBits
(数据位)和 Stopbits
(停止位)。
向串行端口发送数据
要发送数据,您需要调用 sub
来执行此操作。让我们看一下 sub
''Private Sub for sending Data. You may change to Public if needed.
Private Sub SendByte(ByVal byts() As Byte)
If Port.IsOpen = False Then
Port.Open()
End If
Port.Write(byts, 0, byts.Length)
End Sub
您需要传递一个 byte
数组、一个 char
数组或一个 string
来发送数据。
从串行端口接收数据
要从串行端口接收数据,我们将使用 IO.Ports.SerialPort
的事件。因此,使用事件声明端口
Private WithEvents Port As IO.Ports.SerialPort
现在,我们将创建一个 sub
,它将在接收到数据时处理该事件
Private Sub ReceivedBytes(ByVal sender As Object, _
ByVal e As IO.Ports.SerialDataReceivedEventArgs) Handles Port.DataReceived
BufferSize = Port.BytesToRead
TotalByteLastRec = TotalByteLastRec + BufferSize
If BufferSize > 0 Then
Port.Read(InBuffer, LastOffset, BufferSize)
'' Some useful code to process the data
LastOffset = BufferSize
End If
LastOffset = 0
BufferSize = 0
Port.DiscardInBuffer()
End Sub
此 sub
将在端口接收到任何数据时处理该事件。
类中的一些属性
Public ReadOnly Property CurrentBufferSize() As Integer
Get
Return BufferSize
End Get
End Property
Public ReadOnly Property TotalBytesReceived() As Integer
Get
Return TotalByteLastRec
End Get
End Property
Public ReadOnly Property BaudRate() As Integer
Get
Return BaudRates
End Get
End Property
Public ReadOnly Property DataBits() As Integer
Get
Return DataBit
End Get
End Property
Public ReadOnly Property StopBits() As IO.Ports.StopBits
Get
Return StopBit
End Get
End Property
Public ReadOnly Property ParityBits() As IO.Ports.Parity
Get
Return ParityBit
End Get
End Property
关注点
当您与连接的设备进行更多操作时,可能会产生兴趣。它确实可以帮助您了解通信的工作原理。我发现它很有用,希望对您也有用。这将真正帮助您启动串行端口通信。
请随时向我发送有关代码的任何反馈。