COM 端口通信中的 CRC 缺失字节
Missing byte in CRC in COM port communication
我正在通过 COM 端口与分配器通信。
发送DLE-STX-DATA-DLE-ETX-CRC
。如果 2 字节 CRC 不同,我用 NAK
响应,否则用 ACK
响应。到目前为止,一切都很好。但是,如果缺少 2 字节 CRC 中的字节怎么办。那我该怎么办?它也包含两个字节。
例如,预期的 CRC 是 0x11 0x31
,但它 returned 0x31 0x10
(其中 0x10 已经是 DLE-STX-DATA-DLE-ETX-CRC
的一部分,它试图 return,即使没有我发送 NAK
!)。
如何处理 CRC 本身丢失的字节?
如何恢复?
预期行为:
- 设备:
DLE-STX-DATA-DLE-ETX-CRC1-CRC2
- CRC 不匹配
- 我:
NAK
- 设备:
DLE-STX-DATA-DLE-ETX-CRC1-CRC2
实际行为:
- 设备:
DLE-STX-DATA-DLE-ETX-(missing byte)-CRC2-DLE
- CRC 不匹配
- 我:
NAK
- 设备:
STX-DATA-DLE-ETX-CRC1-CRC2
原来这是无解的。即使是官方的 Fujitsu 实用程序也无法处理这种情况。即使进行了处理,COM 端口也变得不可用,并且需要重新启动计算机。您只能从这个错误中优雅地失败。
我正在通过 COM 端口与分配器通信。
发送DLE-STX-DATA-DLE-ETX-CRC
。如果 2 字节 CRC 不同,我用 NAK
响应,否则用 ACK
响应。到目前为止,一切都很好。但是,如果缺少 2 字节 CRC 中的字节怎么办。那我该怎么办?它也包含两个字节。
例如,预期的 CRC 是 0x11 0x31
,但它 returned 0x31 0x10
(其中 0x10 已经是 DLE-STX-DATA-DLE-ETX-CRC
的一部分,它试图 return,即使没有我发送 NAK
!)。
如何处理 CRC 本身丢失的字节?
如何恢复?
预期行为:
- 设备:
DLE-STX-DATA-DLE-ETX-CRC1-CRC2
- CRC 不匹配
- 我:
NAK
- 设备:
DLE-STX-DATA-DLE-ETX-CRC1-CRC2
实际行为:
- 设备:
DLE-STX-DATA-DLE-ETX-(missing byte)-CRC2-DLE
- CRC 不匹配
- 我:
NAK
- 设备:
STX-DATA-DLE-ETX-CRC1-CRC2
原来这是无解的。即使是官方的 Fujitsu 实用程序也无法处理这种情况。即使进行了处理,COM 端口也变得不可用,并且需要重新启动计算机。您只能从这个错误中优雅地失败。