Modbus 助手(请求生成 + 响应解析)
覆盖 RTU 与 TCP 两种传输模式、全部常用功能码,生成请求帧时自动算 CRC16 或拼 MBAP 头,并按字节分解方便核对;解析响应时能识别异常响应与异常码,还能按数据类型(uint16/int16/uint32/int32/float32)和字节序把寄存器值解出来。适合时序器、IO 模块等设备的中控对接调试。
生成的帧(HEX)
01 03 00 00 00 0A C5 CD字节分解
- 从站01
- 功能码03
- 地址00 00
- 数量00 0A
- CRC(低字节先)C5 CD
寄存器映射表(地址↔含义,本地保存)
怎么用
生成请求帧:先选传输模式(RTU 还是 TCP),再选功能码、填从站地址(或单元ID)、寄存器/线圈地址等参数,工具会自动拼出完整的 HEX 帧——RTU 末尾带 CRC16,TCP 前面带 MBAP 头,下方还有字节分解,方便逐字节核对每一段是什么含义。
解析响应帧:把设备实际返回的 HEX 粘进解析面板,切换到对应的传输模式,就能看到 CRC(或长度、协议ID)校验是否通过、是不是一条异常响应。如果是正常的寄存器读取,再选一下数据类型和字节序,就能把原始字节解成实际数值。
解析出来的数值最终以设备手册标注的寄存器定义和字节序为准,工具只负责按你选的规则算出来。
常见问题
- RTU 帧和 TCP 帧差在哪?
- RTU 帧末尾带 CRC16 校验,走串口/RS485;TCP 帧把 CRC 换成了前面 7 字节的 MBAP 头(事务ID、协议ID、长度、单元ID),本身不带 CRC,走 502 端口走网络。工具里切一下传输模式,就能对比同一条指令生成出的两种帧长什么样。
- 读出来的 32 位数值或浮点数不对,怎么回事?
- 多半是字节序选错了。Modbus 对 32 位数据怎么摆放两个寄存器没有统一规定,ABCD/CDAB/BADC/DCBA 这四种排布设备都有在用。解析面板里换个字节序再看一眼,哪个数值看着合理就是哪个,最终还是要以设备手册标注的字节序为准。
- 设备回了一帧像 01 83 02,什么意思?
- 功能码那个字节最高位被置了 1(0x83 = 0x03 + 0x80),说明这是一条异常响应,不是正常数据。后面紧跟的那个字节就是异常码,02 代表"非法数据地址",通常是寄存器地址填错了或者超出了设备实际支持的范围。
- CRC 老是校验不过怎么办?
- 先排查几件事:字节序有没有搞反(CRC16 是低字节在前、高字节在后)、有没有把 CRC 本身也算进了待校验数据里、传输模式是不是选错了(TCP 根本不用 CRC,只在 RTU 里才有)。工具生成的帧里 CRC 是实算出来的,可以直接拿来跟设备返回的做对照。
需要用 Modbus 把设备纳入展厅中控?