我已经进行了相当多的搜索和阅读,但还没有找到一个确切的明确答案。我正在制作 python 应用程序,它将通过串行端口与另一个通信。我一直在使用 PySerial 来实现这一点。我要发送的数据包类型是状态信息和数据读数。我建议将我的数据包形成如下:
[ Start Byte ][ Length ][ Message ][ End Byte ][ Checksum ]
虽然我认为我不需要结束字节,因为那里有一个长度。我对么?
我正在考虑为状态信息塑造数据包的“消息”部分,如下所示:
[ MsgTypeID ][ PacketID ][ Status Bits ][ Timestamp ]
这里的消息ID只是为了区分这是一个状态包而不是数据包。状态信息本身由 16 位组成,代表发送应用程序中多个子系统的状态。对于其中一些子系统,单个位将提供足够的信息(“0”表示子系统关闭/低/假,“1”表示打开/高/真)。其他将需要 2 或 3 位(表示状态等)。对系统进行原型设计,我一直在简单地构建一个字符串,将这些位连接起来形成类似的东西'1001110101101100'
并将其发送到串行端口,校验和是状态位的模 256。
我对 Python 和串行通信很陌生,但我知道这可能是对带宽的浪费。我知道 PySerial 必须发送字符串,但将每个位表示为“0”或“1”,就像这样对每个位使用完整的字符串表示。我想知道发送这些位以减少带宽的最佳方法是什么?
例如,我是否会采用每 8 位,将它们转换为十六进制并发送连接的十六进制字节,如下所示:
'10011101' + '01101100'
表示为
'\x9d' + '\x6c'
还是我应该将它们作为 ASCII 发送?我还看到提到 Struct 模块。我应该走那条路吗?
我想知道的另一件事是如何表示消息的时间戳部分。
任何帮助,您可以给我的建议将不胜感激。
非常感谢 :)