Modbus 报文工具

粘贴报文即可看懂,选好参数即可生成。支持 RTU / TCP / ASCII。

粘贴报文

选择参数生成报文

调用代码

32 位数据的四种字节序

Modbus 寄存器是 16 位的,一个 float / int32 要占两个寄存器。不同厂家拼字节的顺序不一样,读出来是乱数时先换这里试。默认按「ABCD」书写。

16 位寄存器的高低字节

只调一个寄存器也可能高低字节反了,这里做 AB ↔ BA 互换。

CRC16(Modbus)/ LRC 计算

粘贴不含校验的报文,或者整帧(会自动去掉最后 2 字节再算),得到正确的校验值。

Modbus 功能码

功能码名称作用数据区
01读线圈读开关量输出状态(ON/OFF)0xxxx
02读离散输入读开关量输入状态1xxxx
03读保持寄存器读可读写的 16 位寄存器(最常用)4xxxx
04读输入寄存器读只读的 16 位寄存器(如测量值)3xxxx
05写单个线圈控制一个开关量输出0xxxx
06写单个寄存器写一个 16 位寄存器(如设定值)4xxxx
0F写多个线圈连续控制多个开关量0xxxx
10写多个寄存器连续写多个 16 位寄存器4xxxx
17读/写多个寄存器一次完成读和写4xxxx
2B读设备标识读厂家、型号、版本—

异常码(响应功能码 + 0x80 时)

异常码含义常见原因
01非法功能码从站不支持这个功能码
02非法数据地址地址超出范围、地址映射没配对
03非法数据值写入的值或数量超范围
04从站设备故障从站内部错误,查设备手册
05确认已接受,但需要较长时间处理
06从站设备忙稍后重试
08存储奇偶性差错从站存储区异常
0A网关路径不可用网关后面的设备没响应
0B网关目标设备无响应目标设备掉线或站号错

地址对照:报文地址 vs 文档地址

报文里的地址是 从 0 开始,而设备手册/组态软件里常见的是 从 1 开始 的 5 位号。

线圈报文 0 → 文档 00001 离散输入报文 0 → 文档 10001 输入寄存器报文 0 → 文档 30001 保持寄存器报文 0 → 文档 40001

换算:文档地址 40100 → 报文地址 99(40100 − 40001)。

常用参数

串口默认 9600 bps / 8 数据位 / 无校验 / 1 停止位(8N1);从站地址 1–247,0 是广播(只能写,不回复)。

TCP默认端口 502。MBAP 头 7 字节:事务标识(2) + 协议标识(2,固定 0) + 长度(2) + 单元标识(1)。

帧间隔RTU 两帧之间至少静默 3.5 个字符时间,否则从站会当成同一帧。

寄存器1 个寄存器 = 16 位 = 2 字节,范围 0–65535(无符号)。

其他工控协议(帧结构速查)

西门子 S7 通信(S7comm / 端口 102)

报文分三层,从外到内:

TPKT版本 03 + 保留 00 + 总长度(2 字节) COTP长度 + PDU 类型(F0 = 数据,E0 = 连接请求) S7 头协议号 32 + ROSCTR(01 请求/03 响应) + 冗余标识 + PDU 参考号 + 参数长度 + 数据长度 + 错误类 + 错误码 参数区功能码(04 读变量 / 05 写变量)+ 变量个数 + 变量描述 变量描述传输尺寸 + 长度 + DB 号 + 区域 + 地址(位偏移)

区域码:0x81 输入 I、0x82 输出 Q、0x83 标志 M、0x84 数据块 DB、0x1C 计数器 C、0x1D 定时器 T。

注意:S7 地址按「字节.位」表示,例如 DB1.DBX0.0;读 10 个字节就是长度 10、地址偏移 0。

三菱 MC 协议(以太网 / 串口)

副标题二进制请求 5000、响应 D000;ASCII 为 5000 / D000 的文本形式 网络号通常 00 PC 号通常 FF(自身) 请求目标模块IO 号(2 字节) + 站号(1 字节) 请求数据长度从「命令」到「点位」的字节数(二进制) 命令0401 批量读、1401 批量写(二进制) 子命令0000 按字、0001 按位 软元件软元件代码(1–2 字节) + 起始地址(3 字节) + 点数(2 字节)

注意:二进制和 ASCII 模式的软元件代码不一样,D/M/X/Y 等代码以对应系列手册为准;TCP 端口由 PLC 参数设定(常见 5000)。

欧姆龙 FINS(TCP/UDP 9600)

ICF信息控制字段(80/81) RSV保留,固定 00 GCT网关计数,通常 02 DNA / DA1 / DA2目标网络号 / 节点号 / 单元地址 SNA / SA1 / SA2源网络号 / 节点号 / 单元地址 SID服务 ID,用于匹配请求和响应 MRC / SRC主命令码 / 次命令码(如 01 01 = 读字,01 02 = 读位) 参数区起始地址(3 字节) + 点数(2 字节)

其他设备

汇川、信捷、台达、步科等大部分国产 PLC/触摸屏的以太网通信都兼容 Modbus TCP(端口 502),地址映射看各自手册。用上面的「报文解析」直接粘贴抓到的报文就能对照。