一、请求帧格式
Client request:例:
19 B2 00 00 00 06 06 03 00 27 00 02
1、头字节
上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle);
19 B2 00 00 00 06
| 19 B2 | 00 00 | 00 06 |
| 两个Client发出的检验信息,Sever端只是需要将这两个字节的内容copy以后再放到response的报文的相应位子就可以了 | 两个字节是表示tcp/ip 的协议的modbus的协议 | 两个字节表示的是header handle后面还有多长的字节,即表示的是该字节以后的字节长度(lengch),可以看到在00 06后面还有 “06 03 00 27 00 02”六个字节,所以这两个字节表示的就是6; |
2、协议数据单元(PDU)
MODBUS 协议定义了一个与基础通信层无关的简单协议数据单元(PDU)。特定总线或网络上的 MODBUS 协议映射能够在应用数据单元(ADU)上引入一些附加域。
06 03 00 27 00 02
| 06 | 03 | 00 27 | 00 02 |
| 一个字节表示slave address; | 一个字节是表示modbus的功能码 | 两个字节 表示Client request的寄存器地址; | 两个字节表示request 寄存器的长度;(寄存器个数) |
二、回复帧格式
Server response例:
19 B2 00 00 00 07 06 03 04 00 00 00 00
1、头字节
Header handle : “19 B2 00 00 00 07”
| 19 B2 | 00 00 | 00 07 |
| 两个字节为Server返回的检验码 | 两个字节是表示tcp/ip 的协议的modbus的协议 | 两个字节表示的是header handle后面还有多长的字节,即表示的是该字节以后的字节长度(lengch),可以看到在00 07后面还有 “19 B2 00 00 00 07”六个字节,所以这两个字节表示的就是6; |
2、协议数据单元(PDU)
PDU:“06 03 04 00 00 00 00”
| 06 | 03 | 04 | 00 00 00 00 |
| 是Slave address,从地址数; | 一个字节是表示modbus的功能码 | 两个字节 表示了回复给Client request的需要读的寄存器的值的个数,这里因为主地址向从地址读了2个寄存器即2个16位的寄存器(2个字)所以这里为4个字节,因为2个字为4个字节,而04这个字节表示的就是从地址要回复给主地址的寄存器字节长度 | 表示了4个字节的值 |
三、ModbusTcp的链路解析说明
1、数据请求
| 97 76 00 00 00 06 04 04 00 7D 00 7D | ||||
| 示例 | 长度 | 说明 | 备注 | |
| Map报文头 | 0x97 | 1 | 事务处理标识符Hi | 客户机发起,服务器复制,用于事务处理配对 |
| 0x96 | 1 | 事务处理标识符Lo | ||
| 0x0000 | 2 | 协议标识符号 | 客户机发起,服务器复制 Modbus协议 = 0. | |
| 0x0006 | 2 | 长度 | 从本字节下一个到最后 | |
| 0x04 | 1 | 单元标识符 | 客户机发起,服务器复制 串口链路或其他总线上远程终端标识 | |
| 功能码 | 0x04 | 1 | 功能码 | (0x04)读输入寄存器 |
| 数据 | 0x007D | 2 | 起始地址 | |
| 0x 007D | 2 | 寄存器数量 | ||
| 校验 | ||||
2、数据请求回复
| 97 76 00 00 00 FD 04 04 FA AB 9E 41 18 7A E1 3F 94 7A E1 3F 94 0A 3D 3F 97 51 EC 3F 98 CC CD C0 6C 33 33 C0 E3 CC CD C0 EC EB 85 41 F1 D7 0A 41 E9 47 AE 41 ED EB 85 41 F1 19 9A 43 D0 E6 66 43 C9 4C CD 43 CF EB 85 41 F3 66 66 42 0F CC CD 41 C2 E6 66 44 0A 1E B8 41 FB A3 D7 42 0C CC CD 41 BC C0 00 44 0A B8 52 41 F6 5C 29 42 0F 47 AE 41 D1 C6 66 44 0A 00 00 00 00 C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F C9 9E FF 7F 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 05 16 00 00 04 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0A 00 0A 00 0A 00 0A 00 04 00 04 00 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0F | ||||
| 示例 | 长度 | 说明 | 备注 | |
| Map报文头 | 0x97 | 1 | 事务处理标识符Hi | 客户机发起,服务器复制,用于事务处理配对 |
| 0x96 | 1 | 事务处理标识符Lo | ||
| 0x0000 | 2 | 协议标识符号 | 客户机发起,服务器复制 Modbus协议 = 0. | |
| 0x00FD | 2 | 长度 | 从本字节下一个到最后 | |
| 0x04 | 1 | 单元标识符 | 客户机发起,服务器复制 串口链路或其他总线上远程终端标识 | |
| 功能码 | 0x04 | 1 | 功能码 | (0x04)读输入寄存器 |
| 数据 | 0x FA | 1 | 字节个数 | |
| 0x---- | 数据 | |||
| 校验 | ||||
3、写多个寄存器
| 97 79 00 00 00 09 04 10 00 00 00 01 02 00 01 | ||||
| 示例 | 长度 | 说明 | 备注 | |
| Map报文头 | 0x97 | 1 | 事务处理标识符Hi | 客户机发起,服务器复制,用于事务处理配对 |
| 0x79 | 1 | 事务处理标识符Lo | ||
| 0x0000 | 2 | 协议标识符号 | 客户机发起,服务器复制 Modbus协议 = 0. | |
| 0x0009 | 2 | 长度 | 从本字节下一个到最后 | |
| 0x04 | 1 | 单元标识符 | 客户机发起,服务器复制 串口链路或其他总线上远程终端标识 | |
| 功能码 | 0x10 | 1 | 功能码 | (0x10) 写多个寄存器 |
| 数据 | 0x0000 | 2 | 起始地址 | |
| 0x 0001 | 2 | 写寄存器数量 | ||
| 0x 02 | 1 | 写字节的个数 | ||
| 00 01 | 2 | 目标值 | ||
| 校验 | ||||



















