【问题标题】:How to do a protocol for SerialPort with error check?如何通过错误检查为 SerialPort 做一个协议?
【发布时间】:2015-11-11 13:17:49
【问题描述】:

我有一个设备,它会向我发送类似 [CommandID][Data][Data][CRC] 的消息。如果 CRC 不相等,我将跳过此命令,因为我知道命令长度。但是如果传输中丢失任何字节我该怎么办?

【问题讨论】:

  • 你不想折腾整个消息。请参阅已接受的固定长度消息的答案:stackoverflow.com/questions/16177947/… 对于可变长度消息,可能需要寻找一个开始或同步字节。
  • 该协议不足以保护您免受丢​​失字节的影响。它至少需要一个唯一的起始字节,以便您可以重新同步。还有一个 ACK​​/NAK 风格的握手,这样你就可以告诉发送器重新发送消息。您必须为 ErrorReceived 事件实现一个处理程序,并在收到 SerialError.Overrun 或 RXOver 时结束它。

标签: c# serial-port


【解决方案1】:

您的 CRC 检查将失败。你必须再次查询。我更喜欢在失败前查询 3-5 次。硬件不稳定和非常好的通道/设备可能会失败。

【讨论】:

  • 设备不根据 PC 的请求向我发送命令。它通过外部中断向我发送命令
  • 没什么不同。你收获字节,当它完成传输时 - 计算 CRC。如果您有错误 - 丢弃它并等待下一个。
猜你喜欢
  • 1970-01-01
  • 2013-01-14
  • 2013-08-10
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
相关资源
最近更新 更多