Modbus TCP 示例报文
调试modbus tcp 整理百度文库文档如下
《modbus-tcp-报文举例分析》
《MODBUSTCP通讯报文》
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 |
寄存器个数 |
|
|
校验 |
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构