0

古いマシン (PLC) がデータ交換でチェック バイトを生成する方法を理解しようとしていますが、何がどのように行われるのか、またはどのようなアルゴリズムが使用されているのかわかりません。

私はマシンに関する非常にまばらなドキュメントを持っています.私はすでに通常のcrc、ccitt crc、xmodem crcタイプなどのいくつかのアルゴリズムを試しています...そして誰も正しい結果を与えられていません.

メッセージは次のように形成されます: M*NNNNNNwwSSdd

どこ:

M* - 固定

NNNNNN - N は数字またはスペースです

ww - w も数字またはスペース

SS - S は文字またはスペース

dd - da 番号またはスペース

一部の例では、次のバイト チェックが生成されます (ここで、バイト '×' は実際にはスペース文字 ' ' です。この文字は、スペースの数を簡単に識別できるようにするためだけに使用します)。

あ:

  • M*614976××××12 -> a
  • M*615138×××××× -> a

b:

  • M*615028××××12 -> b
  • M*615108×××××× -> b

c:

  • M*614933×××××× -> c
  • M*614956××××12 -> c

日:

  • M*614934×××××× -> d
  • M*614951××××12 -> d

e:

  • M*614942×××××× -> e
  • M*615079×××××× -> e

f:

  • M*614719××××12 -> f
  • M*614936×××××× -> f

g:

  • M*614718××××12 -> g
  • M*614937×××××× -> g

時間:

  • M*614727×××××× -> h
  • M*614980××××12 -> h

私:

  • M*614734××××12 -> 私
  • M*614939×××××× -> 私
  • M*×××××××××××× -> i

z:

  • M*××××××××SC12 -> z

じ:

  • M*××××××××××12 -> j

y:

  • M*××××××××SC×× -> y

組み合わせは他にもありますが、これで十分です。

もう 1 つの特殊性は、チェック バイトの結果が定義された範囲 (char 0x60 から 0x7F まで) にのみ存在することです (マシンが OK を返すまでこの範囲でループするため、現在のソリューションは機能しています)。

私の質問は、このチェックバイトがどのように計算されるか知っていますか? PLC マシンでデータの整合性を計算するためのより単純なアルゴリズムを教えてください。結果のバイト チェックが 1 文字だけであることは、より単純である必要があります。

ありがとう

4

1 に答える 1

1

メッセージ内のすべての文字を xor して、それらを ascii として扱い、奇​​数の準 x をスペースに置き換えてから、0xe で xor すると、チェックサムに文字が含まれるように思えます。少なくとも、メッセージ内のすべての文字の xor とチェックサム文字を 16 進数で表した表を作成することをお勧めします。www.bttautomatyka.com.pl/pdf/HA466357.pdf で説明されているブロック チェックを考慮すると、このようなことは非常にもっともらしいことです。

(私は実際に mod-2 方程式ソルバーを作成しており、5 ビットの CRC を探していたところ、これが表示されました!)

于 2011-11-10T21:27:04.060 に答える