Modbus TCPとModbus UDPのメッセージフォーマットは同じで、両者の違いは実はTCPとUDPの違いであるので、Modbus TCPのプロトコルを分析し、Modbus TCPとModbus RTu(Modbus ASCII)の違いは次の図のようになります。

上の図からわかるように、Modbus TCPはModbusシリアル通信に基づいて検証(TCP自体がチェックサムを持っているため)とデバイスアドレス(Modbus TCPはデバイスアドレスを弱め、IPアドレスに置き換えます)を取り除き、MBAPヘッダ(7バイト)を追加しています。
| ドメイン名:Domain | 長さは | 説明書は | クライアント·クライアント | サーバー·サーバー |
|---|---|---|---|---|
| 取引子 | 2バイト。 | Modbusリクエスト/レスポンストランザクションの識別 | クライアントの起動 | レプリケーション·レスポンス |
| プロトコル識別子 | 2バイト。 | 0=Modbusプロトコル | クライアントの起動 | レプリケーション·レスポンス |
| 長さは | 2バイト。 | 長さの後のバイト数合計 | クライアントの起動 | サーバーの起動 |
| ユニット識別子 | 1バイト目 | シリアルリンクまたは他のバスのスレーブ | クライアントの起動 | レプリケーション·レスポンス |
特定のメッセージを分析すると、イーサネットリンク上のModbusプロトコルのメッセージフォーマットは次のようになります。
| 取引子 | プロトコル識別子 | 長さは | ユニット識別子 | 関数コードの特徴 | データは |
|---|---|---|---|---|---|
| 2 bytes | 2 bytes | 2 bytes | 1 byte | 1 byte | N bytes |
以上の理論的基盤を得て、各機能コードの詳細な分析を以下に示します。
読み取り出力コイル
送信メッセージの形式は次のとおりです。

送信メッセージの意味:ステーション出力コイルからサーバー 1を読み取り、開始アドレスは0 x 13=19、対応するアドレスは00020、コイルの数は0 x 1 B =27、すなわち、ステーション出力コイルから1を読み取り、アドレスは00020-00046、合計27コイルの状態値。
ここでは、プロトコル内の開始アドレスはインデックスを指し、後続のアドレスは特定のアドレスを指し、任意のメモリ領域については、インデックスは0から始まりますが、対応する特定のアドレスは、メモリ領域に関連しています。例えば、出力コイル、0は00001に対応します。入力コイル、0は10001に対応します。入力レジスタ、0は300 01に対応します。
リターンメッセージの形式は以下のとおりです。

返送メッセージ意味:返送サーバー 1番スワーステーション出力コイル00020-00046、计27个のコイルの値、返送バイト数は4个で、それぞれCD6B B2 05である。
CD=1100 1101は00020-00027に対応します。
6B=0110 1011は00028-00035に対応する
B 2 =1011 0 010は00036-00043に対応する。
05=0000 0 1 01は00044-00046に対応する。
入力コイルの読み取り
送信メッセージの形式は次のとおりです。

送信メッセージの意味:読み取りサーバー 1はステーションからコイルに入力され、開始アドレスは0 x C 4=196、対応するアドレスは10197、コイルの数は0 x 1 D =29、つまり、ステーションから1を読み取り、アドレスは10197-10225、29コイルの状態値の合計。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:サーバー 1は、ステーションからコイル10197-10225を入力し、合計29個のコイルの状態値を返し、戻りバイト数は4個で、それぞれCD 6B 2 0 5です。
CD=1100 1101は10197- 1020 4に対応する。
6B=0110 1011は10205-10212に相当する。
B 2 =1011 0 010は10213-10220に対応する。
0 5 =0000 0 101は10221-10225に対応する。
リードホールドレジスタ
送信メッセージの形式は次のとおりです。

送信メッセージの意味:読み取りサーバ1は、ステーション保持レジスタから、開始アドレス0 x 6B=107、対応するアドレス40108、レジスタ数0 x 0 2 =2、すなわち、ステーション保持レジスタから1、アドレス40108-40109、2つのレジスタ値の合計を読み取ります。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:リターンサーバ1は、レジスタ40108-40109を保持し、合計2つのレジスタの値を保持し、リターンバイト数は4つで、それぞれ0 2 2 B 0 1 0 6、40108は0 x 0 22 B、40109は0 x 0 106に対応します。
入力レジスタの読み取り
送信メッセージの形式は次のとおりです。

メッセージの意味を送信する:読み取りサーバ1は、ステーション入力レジスタ、開始アドレス0 x 6B=107、対応するアドレス30108、レジスタ数0 x 0 2 =2、つまり、ステーション保持レジスタから1を読み取り、アドレス30108- 3 0 109、2つのレジスタ値の合計。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:リターンサーバ1は、ステーションからレジスタ30108-30109を入力し、合計2つのレジスタの値を入力し、リターンバイト数は4つで、それぞれ0 2 2 B 0 1 0 6、30108は0 x 0 22 B、30109は0 x 0 106に対応します。
プリセットシングルコイル
送信メッセージの形式は次のとおりです。

送信メッセージの意味:プリセットサーバ1はステーションの単一コイルの値から、コイルアドレスは0 x 00AC=172、対応するアドレスは00173、ブレークオフフラグ0 x FF 00はセットを示し、0 x 000はリセットを示し、つまりセット1はステーション出力コイル00173から出力します。
リターンメッセージの形式は以下のとおりです。

リターンメッセージ意味:プリセット単一出力コイル元のメッセージリターン。
プリセットシングルレジスタ
送信メッセージの形式は次のとおりです。

送信メッセージの意味:ステーションからの単一保持レジスタの値、レジスタアドレス0 x 0 0 87 =135、対応するアドレス40136、書き込み値0 x 0 3 9 E、つまり、ステーションからのプリセット1は、ステーションからの保持レジスタ40136の値0 x 0 3 9 Eの値を保持する。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:プリセットシート保持レジスタ元のメッセージが返されます。
プリセットマルチコイル
送信メッセージの形式は次のとおりです。

送信メッセージの意味:ステーションの複数のコイルの値からプリセットサーバー 1、コイルアドレス0 x 0 013 =19、対応するアドレス00020、コイル数0 x 0 A =10、書き込み値0 x CD 00、つまりステーションコイル00020- 00 027 = 0 x CD =1100 1101、00028- 00 029 = 0 x 00=0000 000。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:プリセットされたマルチ出力コイルリターンメッセージは、元のメッセージに基づいてバイト数と具体的なバイトを除去した後に返されます。
プリセットマルチレジスタ
送信メッセージの形式は次のとおりです。

送信メッセージの意味:ステーションの複数のレジスタの値からのプリセットサーバー 1、レジスタアドレス0 x 0 0 87 =135、開始アドレス40136、レジスタ数0 x 0 2 =2、終了アドレス40137、書き込み値0 x CD 00と0 x 0 A 10、すなわちステーションのレジスタ40136= 0 x 0 105、40137= 0 x 0 A 10のプリセット1。
リターンメッセージの形式は以下のとおりです。

リターンメッセージの意味:プリセットマルチホールドレジスタリターンメッセージは、元のメッセージに基づいてバイト数と具体的なバイトを除いて返されます。
发表回复