串行端口编程 - 识别接收数据的结束

时间:2013-04-05 12:34:18

标签: visual-c++ serial-port

我正在使用VC ++编写一个串口应用程序,我可以在交换机设备上打开一个端口,发送一些命令并显示它们的输出。我正在运行一个线程,它始终读取开放端口以输出给定命令。我的主线程等待读取完成,但问题是如何识别命令输出结束,我应该发出主线程信号。

1 个答案:

答案 0 :(得分:2)

几乎所有串行端口通信都需要协议。接收器发现已完全接收响应的某种方式。一个非常简单的方法是使用一个永远不会出现在其余数据中的唯一字节或字符。换行是标准的,例如由任何调制解调器使用。

当您需要传输任意二进制数据时,需要更加精细。一个常见的解决方案是首先发送响应的长度。然后,接收器可以对接收到的字节进行倒计时,以确定它何时完成。这通常需要用特定的起始字节值进行修饰,以便接收器有一些机会与发送器重新同步。并且通常包括校验和或CRC,以便接收器可以检测传输错误。进一步的修饰是通过来自接收器的ACK / NAK响应使错误可恢复。然后,您将在重新发明TCP方面做得很好。 RFC-916中的RATP协议就是一个很好的例子,虽然被广泛忽视。