【发布时间】:2017-03-15 21:08:18
【问题描述】:
我正在尝试与规范中定义的串行端口进行通信。
ser = serial.Serial("/dev/ttyUSB0", baudrate="115200")
frame = bytearray([
0x00, 0x00, #frame control (2 bytes)
0x00, 0x00, #machine id (2 bytes)
0x07, # number of bytes in data field
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, #data field itself
0x00, 0x0A #checksum
])
ser.write(frame)
ser.close()
代码执行没有错误,我在单独的脚本/进程中监视相同的端口。设备应该在接收到一个成功的帧时返回一个帧。
在这个例子中,我手动计算了校验和,定义为:
双字节校验和,MSB 在前,在从 FSN.msb...DATA[dsize] 重新排列的整个帧上计算。校验和通过简单的 16 位无符号字节加法计算得到
所以在这种情况下,除了校验和之外,将帧中的所有内容相加将等于 10,如在不添加它的情况下执行 sum(frame) 所示。加上它,总和是 20。
另一端的设备可能有故障,所以这是一个很难工作的环境,但如果到目前为止有人能审查我的方法会很好吗?
生成校验和真的那么简单,还是需要其他东西?
【问题讨论】:
-
问题到底是什么?校验和的作用是合理保证真实数据没有被篡改。因此,所有字节的简单相加就可以起到这个作用,即使它不可靠。通常校验和是有效载荷的哈希值,可能更可靠但更多需要更多计算。
标签: python binary serial-port hex checksum