エコパワメータ

Modbus(RTU)のCRC-16の計算で使用するデータは8ビット単位か16ビット単位か?

Modbus(RTU)のCRC-16の計算で使用するデータは8ビット単位か16ビット単位か?

番1に対してデータ項目0036Hからデータを読取る場合を例に考えると

送信メッセージは、スレーブアドレス01Hに続いて機能コード03H データ項目0036H データ数0001Hと続きます。

 

CRC-16の計算は、

① CRC-16 のデータ(X とする)を初期化(FFFFH)します。

② 一つ目のデータとX の排他的論理和(XOR)を取り、X に代入します。

③ X を右に1 ビットシフトし、X に代入します。

④ シフト結果でキャリーが出れば、③の結果X と固定値(A001H)でXOR を取り、X に代入します。キャリーが出なければ⑤へ進みます。

⑤ 8 回シフトするまで、③と④を繰り返します。

⑥ 次のデータとX のXOR を取り、X に代入します。

⑦ ③~⑤を繰り返します。

⑧ 最後のデータまで③~⑤を繰り返します。

⑨ X をCRC-16 として、メッセージに下位上位の順にデータの後にセットします。
(KW1M-Hユーザーズマニュアルより)


このときのデータとは、送信メッセージ先頭から8ビット毎に切り取ったものになります。

今回の例ですとまず01H、次に03H、00H、36H、00H、01Hをデータとして上記①~⑨を計算します。