Modbus-TCP 报文解析器
解析结果
Modbus TCP报文结构
| 用途 | 事务标识 | 协议标识符 | 长度 | 单元标识 | 功能码 | 数据 |
|---|---|---|---|---|---|---|
| 长度 | 2字节 | 2字节 | 2字节 | 1字节 | 1字节 | 可变(N字节) |
| 描述 | Modbus请求/响应事务处理的标识 | 0=Modbus协议 | 长度之后的字节总数 | 串行链路或其它总线的从站识别 | 主机要求从机执行的操作类型 | 包含了命令的具体参数,格式和长度却决于功能码 |
常用功能码详解
| 功能码 | 名称 | 数据类型 | 作用 |
|---|---|---|---|
| 0x01 | 读线圈寄存器 | 位 | 取得一组逻辑线圈的当前状态(ON/OFF) |
| 0x02 | 读离散输入寄存器 | 位 | 取得一组开关输入的当前状态(ON/OFF) |
| 0x03 | 读保持寄存器 | 整型、浮点型、字符型 | 在一个或多个保持寄存器中取得当前的二进制值 |
| 0x04 | 读输入寄存器 | 整型、浮点型 | 在一个或多个输入寄存器中取得当前的二进制值 |
| 0x05 | 写单个线圈寄存器 | 位 | 强置一个逻辑线圈的通断状态 |
| 0x06 | 写单个保持寄存器 | 整型、浮点型、字符型 | 把具体二进制值装入一个保持寄存器 |
| 0x0F | 写多个线圈寄存器 | 位 | 强置一串连续逻辑线圈的通断 |
| 0x10 | 写多个保持寄存器 | 整型、浮点型、字符型 | 把具体的二进制值装入一串连续的保持寄存器 |
工具介绍
Modbus-TCP 报文解析工具拆分 MBAP 头与 PDU,展示事务标识、协议标识、长度、单元标识,以及功能码和数据域含义,便于在以太网上排查主站与网关通信。
使用方法
- 从调试工具、网关或抓包软件复制十六进制报文,去掉无关前缀后粘贴到输入框。
- 确认字节间分隔符与大小写,必要时选择帧类型或波特率等附加参数。
- 点「解析」,在结果区查看地址域、功能码、数据域与校验值的分段表格。
- 对照下方报文结构说明核对每一段含义;校验失败时先检查是否多复制了空格或回车。
计算公式
MBAP 头(7B):事务标识(2B) + 协议标识(2B,固定 0) + 长度(2B) + 单元标识(1B) 长度字段 = 单元标识(1B) + PDU 字节数 PDU = 功能码(1B) + 数据域;TCP 帧不含 CRC 校验
协议标识非 0 或长度字段与实际字节数不符时,通常是抓包把多帧粘在一起了。
常用场景
现场联调
把主站下发的报文粘进来,确认地址、功能码与寄存器范围是否正确。
故障排查
用校验结果判断是报文传输错误还是终端返回了异常响应。
协议学习
对照结构表逐字节理解规约帧格式。
常见问题
TCP 帧为什么没有 CRC?
Modbus-TCP 依赖以太网与 TCP 的校验,MBAP 头之后不再附加 CRC16。
单元标识有什么用?
用于通过网关访问串行链路上的从站,直连设备时常为 0xFF 或 0x01。
事务标识不匹配?
请求与响应的事务标识应一致,不一致说明响应与请求没有正确配对。
以上内容仅用于说明本工具的使用方法与计算口径;财务、税务、贷款等结果均为估算,实际以官方或合同口径为准。
