65.9K
CodeProject 正在变化。 阅读更多。
Home

异步串口通信

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.20/5 (16投票s)

2008年2月23日

CPOL

2分钟阅读

viewsIcon

69888

downloadIcon

30

如何异步通信到串口。

引言

我一直在寻找一种与我的自定义设备通信的方法,该设备具有用于通信的端口。我正在寻找一种异步方法,因为串行端口可以随时从设备接收数据。

背景

代码背后的想法是,每当串行端口接收到任何数据时,端口类将触发一个事件,即 DataReceived。此事件有助于检测随时接收到的任何数据到串行端口,并且非常有用。为了使其更有帮助,我创建了一个简单的类,可以轻松快速地创建与串行端口的连接。以下是类图,可以帮助您理解它。

AsyncSerilPort

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 

关注点

当您与连接的设备进行更多操作时,可能会产生兴趣。它确实可以帮助您了解通信的工作原理。我发现它很有用,希望对您也有用。这将真正帮助您启动串行端口通信。

请随时向我发送有关代码的任何反馈。

© . All rights reserved.