vb.net中串口数据的损坏

时间:2014-11-14 07:12:14

标签: .net vb.net serial-port loopback

我在vb.net中创建了一个应用程序,它通过串口连续发送和接收数据。我形成一个框架,其中包含一些自定义参数,例如帧编号,帧长度,实际字符串。它们由特殊字符分隔,如'@','#','$'等。 例如@#3 $ 21%Hello.There !!&安培;

我必须在两个连续帧之间的最小1 ms间隙进行测试。 我面临的问题是,当我在循环测试中收到数据时,通常会丢失一些字符。它被视为一个损坏的帧,但我无法理解为什么它发生在Windows上的循环返回测试中。这个框架看起来像@#3 $ 21Hello。!!& 。 接收功能就是这样。

Private Sub DataReceivedHandler(sender As Object, e As IO.Ports.SerialDataReceivedEventArgs) Handles RXCOMPort.DataReceived

        If e.EventType = SerialData.Chars Then
            If checkFlag = False Then
                '---receive data 
                str &= RXCOMPort.ReadExisting()
                checkFlag = True ' for the thread of processing received data
            End If
        End If
End Sub

稍后将会有一些基于微控制器的硬件,它将从UART接收数据并将数据发送到UART。

1 个答案:

答案 0 :(得分:0)

 If checkFlag = False Then
            '---receive data 
            str &= RXCOMPort.ReadExisting()
            checkFlag = True ' for the thread of processing received data
        End If

如果在您的其他处理函数中设置checkFlag之前执行了Handler会发生什么?

例如,第一个处理程序回调收集 @#3 $ 21%Hello。

然后你去处理。如果在处理功能完成第一批数据之前执行处理程序会发生什么?是否会删除新的串口数据?

通常,您希望将接收的数据放入循环缓冲区。在接收处理程序中执行此操作,仅执行此操作。

在另一个函数或线程中,对循环缓冲区起作用。这样,处理程序的工作就是只将数据放入循环缓冲区,并且不会丢弃数据。