Modbus 报文查看
进入报文查看
- 在左侧设备树中选中 Modbus 设备;
- 点击右侧上方的"报文"图标;
- 在弹出的窗口中实时查看通讯帧,支持暂停刷新、按方向/从机筛选、查看报文详情与原始字节定位。

Modbus TCP 帧结构
TCP 模式下报文由 MBAP 头 + PDU 组成:
┌──────────────┬──────────────┬──────────┬──────────────┬──────────────────┐
│ 事务标识符 │ 协议标识符 │ 长度 │ 单元标识符 │ PDU(功能码+数据) │
│ 2 字节 │ 2 字节 │ 2 字节 │ 1 字节 │ N 字节 │
└──────────────┴──────────────┴──────────┴──────────────┴──────────────────┘| 字段 | 说明 |
|---|---|
| 事务标识符 | 客户端生成,用于匹配请求与响应(响应回显同值) |
| 协议标识符 | Modbus 固定为 0x0000 |
| 长度 | 后续(单元标识符 + PDU)的字节数 |
| 单元标识符 | 从站地址(多从站网关时使用) |
Modbus RTU 帧结构
┌──────────┬──────────┬──────────────┬──────────┐
│ 从站地址 │ 功能码 │ 数据 │ CRC16 │
│ 1 字节 │ 1 字节 │ N 字节 │ 2 字节 │
└──────────┴──────────┴──────────────┴──────────┘- 从站地址:1~247(0 为广播地址);
- CRC16:从从站地址到数据末尾的循环冗余校验;
- 帧间间隔 ≥ 3.5 个字符时间,用于帧定界。
请求 / 响应示例
读保持寄存器(功能码 03)请求(从站 1,起始地址 0x0000,读 2 个寄存器):
01 03 00 00 00 02 C4 0B
│ │ │ │ │ └─ CRC16
│ │ │ │ └────── 寄存器数量 = 2
│ │ │ └─────────── 起始地址 = 0x0000
│ │ └──────────────── 功能码 = 03
│ └─────────────────── 从站地址 = 1
└────────────────────── 帧起始响应:
01 03 04 00 0A 00 14 ...
│ │ │ │ │
│ │ │ │ └──── 寄存器2 = 0x0014(按解析码解释)
│ │ │ └───────── 寄存器1 = 0x000A
│ │ └──────────── 数据字节数 = 4(2 个寄存器)
│ └─────────────── 功能码 = 03
└────────────────── 从站地址 = 1报文解析功能
EMS Simulate 对原始十六进制报文自动解析,展示:
- 时间记录:发送 / 接收时间;
- 方向标记:TX(发送)/ RX(接收);
- 字段解析:功能码、起始地址、寄存器数量、字节数、寄存器原始值;
- 值解释:按测点配置的解析码将原始值解释为浮点/整数等,并应用系数换算;
- 异常帧:功能码最高位置 1(如
0x83)表示异常,附异常码(非法地址/非法数据等)。
交互流程
- 客户端发起请求(事务 ID + 功能码 + 地址 + 数量);
- 服务端处理并回送响应帧(事务 ID 回显);
- 读取类请求返回数据区内容,写入类请求返回写入确认。
排查技巧
- 长时间无响应:先看 TCP 是否建立(连接超时参数),再看从站地址与功能码;
- 数据值异常:核对解析码字节序与系数;
- 偶发失败:查看命令超时与重试次数,检查网络抖动或从站负载;
- 结合"报文详情"的逐字节定位,快速判断是哪一段数据异常。