CRC 自動付加(オートフィル)
CRC とは
CRC(巡回冗長検査:Cyclic Redundancy Check)は、デジタルデータの誤り検出に用いられる技術です。チェックサムの一種であり、ファイルやデータセットの内容に基づいて固定長の値を生成します。
利用面から見ると、CRC は生のコンピュータデータへの偶発的な変更を検出するためのハッシュ関数であり、デジタル通信ネットワークやハードディスクなどのストレージ機器で広く利用されています。
この技術は 1961 年に W. Wesley Peterson によって考案され、その後 CCITT(Comité Consultatif International Telegraphique et Telephonique)によって発展しました。CRC はハードウェア実装が比較的容易で、数学的な解析もしやすい方式です。
一般的な伝送エラーの検出に広く使われている優れた手法のひとつです。
CRC は 2 進数の除算に基づいており、「多項式コードチェックサム」とも呼ばれます。
データ通信における CRC の重要性
受信側は、チェックビットとデータが一致しているかどうかを確認することで、伝送中にエラーが発生したかどうかをある程度の確率で判断できます。
エラーが検出された場合、受信側は送信元に「否定応答(NAK)」を送り、メッセージの再送信を要求します。
SerialTool の CRC 自動付加・自動補完
シリアルポート経由で手動コマンドを送信する場合、正しい通信を行うために CRC を付加する必要があることがよくあります。CRC が正しくないと、受信側はフレームを受け付けない可能性があります。
すべてのパケットについて CRC を手計算し、正確にコピー&ペーストするのは非常に手間がかかり、ミスの原因にもなります。
SerialTool は、送信時に幅広い種類の CRC から選択して自動計算できます。
CRC オプションを有効にすると、選択された CRC バイトが送信パケットの末尾に自動的に追加されます。
SerialTool のバイト順反転
システムによっては、エンディアンの仕様に合わせるために CRC バイトの順序を反転させる必要があります。
SerialTool では、受信側の仕様に応じて CRC バイトを逆順で送信することも可能です。
SerialTool の Modbus CRC 自動付加
Modbus は、産業用通信プロトコルで一般的に使用される CRC 方式のひとつです。
Modbus はマスタ・スレーブ方式のリクエスト/レスポンスプロトコルです。マスタが常に要求を発行し、それに対してスレーブが応答するというペアで通信が行われます。通常、マスタは HMI や SCADA システムであり、スレーブはセンサーや PLC、PAC などです。要求と応答の内容、およびそれらが運ばれるネットワーク層は、Modbus プロトコルの各レイヤによって定義されています。
SerialTool は Modbus を含む多くの CRC 計算方式をサポートしています。
送受信の例:
SEND REQUEST: Modbus ASCII 3A 30 32 30 31 30 30 32 30 30 30 30 43 44 31 0D 0A + CRC
READ RESPONSE: Modbus ASCII 3A 30 32 30 31 30 32 38 30 30 32 37 39 0D 0A + CRC
Modbus の送信と受信の例。
SerialTool が対応する CRC タイプ
CRC-8
- CRC 8
- CRC 8 EBU
- CRC 8 HDLC
- CRC 8 MAXIM
- CRC 8 WCDMA
- CRC 8 LTE
- CRC 16 ARC
- CRC 16 BUYPASS
- CRC 16 CCITTFALSE
- CRC 16 MCRF4XX
- CRC 16 CDMA2000
- CRC 16 CMS
- CRC 16 DECTR
- CRC 16 DECTX
- CRC 16 DNP
- CRC 16 GENIBUS
- CRC 16 KERMIT
- CRC 16 MAXIM
- CRC 16 MODBUS
- CRC 16 T10DIF
- CRC 16 USB
- CRC 16 X25
- CRC 16 XMODEM
- CRC 24
- CRC 24 FLEXRAYA
- CRC 24 FLEXRAYB
- CRC 24 LTEA
- CRC 24 LTEB
- CRC 24 NRC
- CRC 32
- CRC 32 BZIP2
- CRC 32 C
- CRC 32 MPEG2
- CRC 32 POSIX
- CRC 32 Q