0

我正在通过串行与 PLC 交谈,他们的规范没有描述从十六进制响应中获取值的任何公式。我正在编写一个 Python 脚本来处理响应。

我相信最终结果是一个有符号整数,在 C++ 中是“短”,并且规范在 SEND 消息中提到了 LSB/MSB,但我不确定这是否适用于响应。

以下是我正在使用的一些价值观:

18 FD = -744
20 FF = -224
07 00 = 7    (parsed OK)
0A 00 = 10   (parsed OK)
64 00 = 100  (parsed OK)
36 01 = 310  (parsed OK)
B0 04 = 1200 (parsed OK)
A4 06 = 1700 (parsed OK)

目前我的计算正确解析为FF 00,但不知道正确的公式意味着 255 以上的值仍然是个谜。

编辑:写完问题后,它变得很明显。十六进制字节需要反转。现在负值是未知的。

如果需要,可以在此处找到规范。

4

1 回答 1

2

负数似乎是使用二进制补码编码的。粗略地说,如果设置了数字的最高有效位,则必须减去 2^16 才能获得“真实”值。

于 2013-04-11T00:16:31.587 回答