调试modbus tcp 整理百度文库文档如下
《modbus-tcp-报文举例分析》
《MODBUSTCP通讯报文》

关于Modbus 报文
Client request:
19 B2 00 00 00 06 06 03 00 27 00 02
上面是modbus客户端发出的报文内容,为modbus tcp/ip协议格式,其前面的六个字节为头字节( header handle);
19 B2 00 00 00 06
19 B2 两个字节是Client发出的检验信息,Sever端只是需要将这两个字节的内容copy以后再放到response的报文的相应位子就可以了
00 00 两个字节是表示tcp/ip 的协议的modbus的协议;
00 06 两个字节表示的是header handle后面还有多长的字节,即表示的是该字节以后的字节长度(lengch),可以看到在00 06后面还有 “06 03 00 27 00 02”六个字节,所以这两个字节表示的就是6;
PDU:
“06 03 00 27 00 02”
06 一个字节表示slave address;
03 为Fuction code ;
00 27 表示Client request的寄存器地址;
00 02 表示request 寄存器的长度;(寄存器个数)
Server response:
19 B2 00 00 00 07 06 03 04 00 00 00 00
Header handle : “ 19 B2 00 00 00 07”
19 B2 为Server返回的检验码,copy from Client request;
其它的表示与客户端的表示相同
PDU:
“ 06 03 04 00 00 00 00”
06 是Slave address,从地址数;
03是Function code ;
04表示了回复给Client request的需要读的寄存器的值的个数,这里因为主地址向从地址读了2个寄存器即2个16位的寄存器(2个字)所以这里为4个字节,因为2个字为4个字节,而04这个字节表示的就是从地址要回复给主地址的寄存器字节长度,
00 00 00 00 表示了4个字节的值
ModBusTcp与串行链路Modbus的数据域是一致的,具体数据域可以参考串行modbus。这里给出几个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 | 功能码,读寄存器 | 参考标准modbus协议 | 
| 数据 | 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 | 功能码,读寄存器 | 参考标准modbus协议 | 
| 数据 | 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 | 功能码,读寄存器 | 参考标准modbus协议 | 
| 数据 | 0x0000 | 2 | 起始地址 | 
 | 
| 0x 0001 | 2 | 写寄存器数量 | 
 | |
| 0x 02 | 1 | 写字节的个数 | 
 | |
| 00 01 | 2 | 目标值 | 
 | |
| 校验 | 
 | |||
4、写多个寄存器响应
| 97 79 00 00 00 06 04 10 00 00 00 01 | ||||
| 
 | 示例 | 长度 | 说明 | 备注 | 
| Map报文头 | 0x97 | 1 | 事务处理标识符Hi | 客户机发起,服务器复制,用于事务处理配对 | 
| 0x79 | 1 | 事务处理标识符Lo | ||
| 0x0000 | 2 | 协议标识符号 | 客户机发起,服务器复制 Modbus协议 = 0. | |
| 0x0006 | 2 | 长度 | 从本字节下一个到最后 
 | |
| 0x04 | 1 | 单元标识符 | 客户机发起,服务器复制 串口链路或其他总线上远程终端标识 | |
| 功能码 | 0x10 | 1 | 功能码,读寄存器 | 参考标准modbus协议 | 
| 数据 | 0x0000 | 2 | 起始地址 | 
 | 
| 0x 0001 | 2 | 寄存器个数 | 
 | |
| 校验 | 
 | |||










