一、请求帧格式
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 | 目标值 | ||
校验 |