ModbusTCP与Modbus UDP的メッセージ形式是一样的,它们之间違いはありません其实就是TCP与UDP違いはありません,因此下面就针对ModbusTCP的协议进行分析,Modbus TCP与Modbus Rtu(ModbusASCII)之间違いはありません如下图:

从上图可以看出,ModbusTCP在Modbus串行通信的基础上,去除了チェック(由于TCP本身就带有チェック和)和デバイスアドレス(ModbusTCP弱化了デバイスアドレス,用IPアドレス来取代),再加上MBAPmessage header(占7 bytes),下面针对MBAP进行分析説明:
| 域 | Length | 説明 | 客户机 | Server |
|---|---|---|---|---|
| トランザクション処理标识符 | 2バイト | ModbusRequest/レスポンストランザクション処理的标识 | 客户机启动 | コピーレスポンス |
| Protocol Identifier | 2バイト | 0=ModbusProtocol | 客户机启动 | コピーレスポンス |
| Length | 2バイト | 長さ之后的バイト总数 | 客户机启动 | サーバー·サーバー启动 |
| Unit identifier | 1バイト | 串行链路或其它バス的スレーブ识别 | クライアント側は启动 | コピーレスポンス |
下面针对具体报文进行分析,Modbusプロトコル在イーサネット(イーサネット)链路上的メッセージ形式如下所示:
| トランザクション処理标识符 | Protocol Identifier | Length | Unit identifier | function code | data |
|---|---|---|---|---|---|
| 2 bytes | 2 bytes | 2 bytes | 1 byte | 1 byte | N bytes |
有了以上理论基础之后,下面针对各个機能コード进行详细分析:
読み取り出力コイル
送信メッセージ形式如下:

送信报文含义:読み取りサーバー·サーバー1駅から。出力コイル,開始アドレス为0x13=19,对应アドレス为00020,コイルの数为0x1B=27,即読み取り1駅から。出力コイル,アドレス从00020-00046,共271つのコイル的ステータス值。
这里值得注意一下,协议中的開始アドレス指的是索引,后面的アドレス指的是具体アドレス,对于任意一个存储区,索引都是Start from 0的,但是对应的具体アドレス,与存储区是相关的,比如出力コイル,0对应00001;入力コイル,0对应10001;入力レジスタ。,0对应30001;レジスタを保持する。,0对应40001。
戻るメッセージ形式如下:

戻る报文含义:戻るサーバー·サーバー1駅から。出力コイル00020-00046,共271つのコイル的ステータス值,戻るBytesの数为4个,分别为CD 6B B2 05。
CD=1100 1101 对应 00020-00027
6B=0110 1011 对应 00028-00035
B2=1011 0010 对应 00036-00043
05=0000 0101 对应 00044-00046
読み取り入力コイル
送信メッセージ形式如下:

送信报文含义:読み取りサーバー·サーバー1駅から。入力コイル,開始アドレス为0xC4=196,对应アドレス为10197,コイルの数为0x1D=29,即読み取り1駅から。入力コイル,アドレス从10197-10225,共291つのコイル的ステータス值。
戻るメッセージ形式如下:

戻る报文含义:戻るサーバー·サーバー1駅から。入力コイル10197-10225,共291つのコイル的ステータス值,戻るBytesの数为4个,分别为CD 6B B2 05。
CD=1100 1101 对应 10197-10204
6B=0110 1011 对应 10205-10212
B2=1011 0010 对应 10213-10220
05=0000 0101 对应 10221-10225
Read and hold register
送信メッセージ形式如下:

送信报文含义:読み取りサーバー·サーバー1駅から。レジスタを保持する。,開始アドレス为0x6B=107,对应アドレス为40108,レジスタの数为0x02=2,即読み取り1駅から。レジスタを保持する。,アドレス从40108-40109,共21つのレジスタ的数值。
戻るメッセージ形式如下:

戻る报文含义:戻るサーバー·サーバー1駅から。レジスタを保持する。40108-40109,共21つのレジスタ的数值,戻るBytesの数为4个,分别为02 2B 01 06,40108对应数值为0x022B,40109对应数值为0x0106。
Read input register
送信メッセージ形式如下:

送信报文含义:読み取りサーバー·サーバー1駅から。入力レジスタ。,開始アドレス为0x6B=107,对应アドレス为30108,レジスタの数为0x02=2,即読み取り1駅から。レジスタを保持する。,アドレス从30108-30109,共21つのレジスタ的数值。
戻るメッセージ形式如下:

戻る报文含义:戻るサーバー·サーバー1駅から。入力レジスタ。30108-30109,共21つのレジスタ的数值,戻るBytesの数为4个,分别为02 2B 01 06,30108对应数值为0x022B,30109对应数值为0x0106。
预置单コイル
送信メッセージ形式如下:

送信报文含义:预置サーバー·サーバー1駅から。单1つのコイル的值,コイルアドレス为0x00AC=172,对应アドレス为00173,断通标志0xFF00表示置位,0x000表示复位,即置位1駅から。出力コイル00173。
戻るメッセージ形式如下:

戻る报文含义:预置单出力コイル原报文戻る。
プリセットシングルレジスタ
送信メッセージ形式如下:

送信报文含义:预置サーバー·サーバー1駅から。单レジスタを保持する。的值,レジスター·アドレス为0x0087=135,对应アドレス为40136,値の書き込み为0x039E,即预置1駅から。レジスタを保持する。40136值为0x039E。
戻るメッセージ形式如下:

戻る报文含义:预置单レジスタを保持する。原报文戻る。
预置多コイル
送信メッセージ形式如下:

送信报文含义:预置サーバー·サーバー1駅から。多1つのコイル的值,コイルアドレス为0x0013=19,对应アドレス为00020,コイル数为0x0A=10,値の書き込み为0xCD00,即预置1駅から。コイル00020-00027=0xCD=1100 1101,00028-00029=0x00=0000 0000。
戻るメッセージ形式如下:

戻る报文含义:预置多出力コイル戻る报文是在原报文基础上除去Bytesの数及具体バイト后戻る。
プリセットマルチレジスタ
送信メッセージ形式如下:

送信报文含义:预置サーバー·サーバー1駅から。多1つのレジスタ的值,レジスター·アドレス为0x0087=135,開始アドレス为40136,レジスタの数为0x02=2,结束アドレス为40137,値の書き込み为0xCD00和0x0A10,即预置1駅から。レジスタ40136=0x0105,40137=0x0A10。
戻るメッセージ形式如下:

戻る报文含义:预置多レジスタを保持する。戻る报文是在原报文基础上除去Bytesの数及具体バイト后戻る。
Leave a Reply