我试图了解旧机器(PLC)如何在其数据交换中生成校验字节,但我不知道是什么以及如何完成或使用什么样的算法。
我有一个关于机器的非常稀疏的文档,我已经尝试了一些算法,如普通 crc、ccitt crc、xmodem crc 类型......并且没有人给出正确的结果。
消息是这样形成的:M*NNNNNNwwSSdd
在哪里:
M* - 固定
NNNNNN - N 是一个数字或一个空格
ww - w 也是数字或空格
SS - S 是字符或空格
dd - da 数字或空格
一些示例生成以下字节检查(其中 de byte '×' 实际上是空格 char ' ',我使用此 char 只是为了更容易识别空格数):
A:
- M*614976××××12 -> 一个
- M*615138×××××× -> 一个
乙:
- M*615028××××12 -> b
- M*615108×××××× -> b
C:
- M*614933×××××× -> c
- M*614956××××12 -> c
d:
- M*614934×××××× -> d
- 米*614951××××12 -> d
e:
- M*614942×××××× -> e
- M*615079×××××× -> e
F:
- M*614719××××12 -> f
- M*614936×××××× -> f
G:
- 米*614718××××12->克
- m*614937×××××× -> g
H:
- M*614727×××××× -> h
- 米*614980××××12 -> 小时
一世:
- 米*614734××××12 -> 我
- m*614939×××××× -> i
- M*××××××××××××× -> i
z:
- M*××××××××SC12 -> z
Ĵ:
- M*×××××××××××12 -> j
是:
- M*××××××××SC×× -> y
还有更多的组合,但这些就足够了。
另一个特殊性是检查字节结果仅存在于定义的范围内 - 从 char 0x60 到 0x7F 并且不再存在(当前的解决方案正在工作,因为我在这个范围内循环,直到机器给我一个 ok)
所以我的问题是,你知道这个校验字节是怎么计算的吗?你能指点我一些更简单的算法来计算PLC机器中数据的完整性吗,结果字节检查只有一个字符一定更简单。
谢谢