Modbusプロトコルパーサー
Modbus RTU/ASCII/TCP通信の解析、変換、デバッグ
データを入力してください
Modbusプロトコルリファレンス
Modbusは1979年にModicon社が開発した、産業分野で最も広く使用されている通信プロトコルです。シリアル回線(RTU)またはイーサネット(TCP/IP)を介した電子機器間の通信を可能にします。このツールは、専用のハードウェアやソフトウェアなしでModbus通信のデバッグと分析を支援します。
Modbus RTUフレーム構造
Modbus RTU(リモートターミナルユニット)は、RS-232やRS-485などのシリアル接続を介してバイナリ形式でデータを送信します。各フレームにはスレーブアドレス、ファンクションコード、データ、およびエラー検出用の16ビットCRCチェックサムが含まれます。コンパクトなバイナリ形式により、帯域幅が制限された環境でも効率的です。
1 byte
1 byte
N bytes
2 bytes
Modbus RTU Frame Structure
Modbus TCPフレーム構造
Modbus TCPは、RTUフレームをTCP/IPパケット内にカプセル化し、7バイトのMBAP(Modbusアプリケーションプロトコル)ヘッダーを使用します。このヘッダーには、要求応答のマッチング用トランザクションID、プロトコル識別子(Modbusでは常に0)、メッセージ長、ユニットIDが含まれます。TCP通信はデフォルトでポート502を使用します。
2 bytes
2 bytes
2 bytes
1 byte
1 byte
N bytes
Modbus TCP Frame Structure (MBAP Header + PDU)
一般的なファンクションコード
ファンクションコードはModbus要求の操作タイプを定義します。読取操作(01-04)はコイル状態やレジスタ値を取得し、書込操作(05、06、0F、10)はデバイスデータを変更します。各ファンクションコードには特定のデータ形式要件があります。
| コード | 機能 | タイプ |
|---|---|---|
| 0x01 | コイル読み取り | 読み取り |
| 0x02 | 離散入力読み取り | 読み取り |
| 0x03 | 保持レジスタ読み取り | 読み取り |
| 0x04 | 入力レジスタ読み取り | 読み取り |
| 0x05 | シングルコイル書き込み | 書き込み |
| 0x06 | シングルレジスタ書き込み | 書き込み |
| 0x0F | マルチコイル書き込み | 書き込み |
| 0x10 | マルチレジスタ書き込み | 書き込み |
Modbusのバイトオーダー
PLCメーカーによって32ビットおよび64ビット値のバイトオーダーが異なります。一般的な4つの配置は:ビッグエンディアン(ABCD)- 標準ネットワークオーダー、リトルエンディアン(DCBA)、ミッドビッグエンディアン(BADC)、ミッドリトルエンディアン(CDAB)です。誤った値を読み取った場合は、異なるバイトオーダーを試して正しい解釈を見つけてください。
CRC-16/Modbusアルゴリズム
Modbus RTUは、多項式0x8005と初期値0xFFFFのCRC-16をエラー検出に使用します。CRCはスレーブアドレス、ファンクションコード、データバイトに対して計算され、下位バイト先頭の順序で追加されます。CRCが不正なフレームは受信側で破棄されます。
実用的なアプリケーション
- 生のパケットデータを分析してPLCとSCADAシステム間の通信エラーをトラブルシューティング
- コミッショニング中に16進データをエンジニアリング単位に変換してレジスタ値を検証
- 専用のModbusマスターソフトウェアなしでデバイス検証用のテストコマンドを生成
- 異なるメーカーのデバイスを統合する際のバイトオーダー問題をデバッグ