Modbus协议解析器
解析、转换和调试Modbus RTU/ASCII/TCP通信数据
请输入数据
Modbus协议参考
Modbus是工业领域应用最广泛的通信协议,由Modicon公司于1979年开发。它支持通过串行线路(RTU模式)或以太网(TCP/IP模式)在电子设备之间进行通信。本工具帮助工程师在没有专用硬件或软件的情况下调试和分析Modbus通信。
Modbus RTU帧结构
Modbus RTU(远程终端单元)通过RS-232或RS-485等串行连接以二进制格式传输数据。每帧包含从站地址、功能码、数据和16位CRC校验码用于错误检测。紧凑的二进制格式使RTU非常适合带宽受限的环境。
1 byte
1 byte
N bytes
2 bytes
Modbus RTU Frame Structure
Modbus TCP帧结构
Modbus TCP将RTU帧封装在TCP/IP数据包中,使用7字节的MBAP(Modbus应用协议)头。该头部包含用于请求响应匹配的事务标识符、协议标识符(Modbus固定为0)、消息长度和单元标识符。TCP通信默认使用502端口。
2 bytes
2 bytes
2 bytes
1 byte
1 byte
N bytes
Modbus TCP Frame Structure (MBAP Header + PDU)
常用功能码
功能码定义Modbus请求中的操作类型。读操作(01-04)用于获取线圈状态或寄存器值,写操作(05、06、0F、10)用于修改设备数据。每个功能码都有特定的数据格式要求。
| 代码 | 功能 | 类型 |
|---|---|---|
| 0x01 | 读线圈 | 读取 |
| 0x02 | 读离散输入 | 读取 |
| 0x03 | 读保持寄存器 | 读取 |
| 0x04 | 读输入寄存器 | 读取 |
| 0x05 | 写单个线圈 | 写入 |
| 0x06 | 写单个寄存器 | 写入 |
| 0x0F | 写多个线圈 | 写入 |
| 0x10 | 写多个寄存器 | 写入 |
Modbus中的字节序
不同PLC厂商对32位和64位数值使用不同的字节序。四种常见排列方式是:大端序(ABCD)- 标准网络序;小端序(DCBA);中间大端序(BADC);中间小端序(CDAB)。当读取到错误数值时,尝试不同的字节序可以找到正确的解释方式。
CRC-16/Modbus算法
Modbus RTU使用多项式0x8005和初始值0xFFFF的CRC-16进行错误检测。CRC计算覆盖从站地址、功能码和数据字节,然后以低字节在前的顺序附加。CRC不正确的帧应被接收方丢弃。
实际应用场景
- 通过分析原始报文数据排查PLC与SCADA系统之间的通信故障
- 在设备调试过程中将十六进制寄存器数据转换为工程单位进行验证
- 无需专用Modbus主站软件即可生成测试指令进行设备验证
- 在集成不同厂商设备时调试字节序问题