0

我试图了解旧机器(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机器中数据的完整性吗,结果字节检查只有一个字符一定更简单。

谢谢

4

1 回答 1

1

在我看来,如果我将消息中的所有字符异或在一起,将它们视为 ascii 并用空格替换你的奇数 quasi-x,然后在 0xe 中异或,我会得到校验和中的字符。至少我建议你构建一个表格,显示消息中所有字符的异或,以及校验和字符,写成十六进制。考虑到 www.bttautomatyka.com.pl/pdf/HA466357.pdf 中描述的块检查,这样的事情是相当合理的

(我实际上已经编写了一个 mod-2 方程求解器,并且正要寻找一个 5 位 CRC,这时它突然出现了!)

于 2011-11-10T21:27:04.060 回答