我正在尝试了解旧机器(PLC)如何在其数据交换中生成校验字节,但我无法确定是做什么以及如何做或使用何种算法。
我有关于机器的非常稀疏的文档,我已经尝试了一些算法,如普通的crc,ccitt crc,xmodem crc类型......并且没有人给出正确的结果。
消息形成如下: M * NNNNNNwwSSdd
其中:
M * - 已修复
NNNNNN - N是数字或空格
ww - w也是数字或空格
SS - S是字符或空格
dd - d数字或空格
一些示例生成以下字节检查(其中de byte'×'实际上是空格char'',我只使用此char来更容易识别空格数):
一个:
B:
C:
d
E:
F:
G:
H:
I:
Z:
Y:
Y:
还有更多的组合,但这些组合就足够了。
另一个特殊之处是检查字节结果仅存在于定义的范围内 - 从字符0x60到0x7F而不再存在(当前解决方案正在工作,因为我在此范围内循环,直到机器给我一个确定)
所以我的问题是,你知道如何计算这个校验字节吗?你能指出一些更简单的算法来计算PLC机器中数据的完整性吗,结果字节检查只有一个字符必须更简单。
由于
答案 0 :(得分:1)
在我看来,如果我把消息中的所有字符拼凑在一起,将它们视为ascii并用空格替换你的奇数准x,然后在0xe中xor,我得到校验和中的字符。至少我建议你构造一个表格,显示消息中所有字符的xor,以及校验和字符,写成十六进制。考虑到www.bttautomatyka.com.pl/pdf/HA466357.pdf中描述的块检查,这样的事情是合理的。
(我实际上已经编写了一个mod-2方程求解器,当它弹出时,它会寻找一个5位CRC!)