我一直在绞尽脑汁地计算一个校验和,用二进制命令与Unitronics的plc通信。它们提供了源代码,但它是在纯Windows的C实现中实现的,除了基本语法之外,这对我几乎没有什么帮助。在
预期结果
下面是字节索引、消息描述和所做的示例。在# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 24 25 26 27 28 29 | 30 31 32
# sx--------------- id FE 01 00 00 00 cn 00 specific--------- lengt CHKSM | numbr ot FF addr- | CHKSM ex
# 2F 5F 4F 50 4C 43 00 FE 01 00 00 00 4D 00 00 00 00 00 01 00 06 00 F1 FC | 01 00 01 FF 01 00 | FE FE 5C
该规范要求计算22字节消息头的累计值,并分别计算6+字节的详细信息,得到和模65536的值,然后返回该值的2的补码。在
尝试1
我的理解是Python中的TyDE(~)运算符是直接从C/C++派生的。写了一天创建消息的Python之后,我想到了这个(精简版):
^{pr2}$
消息:2F5F4F504C4300FE010000004D000000000001000600600L010001FF010001005C
我看到了一个L,这和昨天的结果不同,昨天的结果不太接近。如果您想要基于消息其余部分的快速公式结果:Checksum(Header)应返回F1FC,Checksum(Details)应返回FEFE。在
它返回的值与规范的示例相差甚远。我相信这个问题