CoderTools

Modbus协议解析器

解析、转换和调试Modbus RTU/ASCII/TCP通信数据

请输入数据

Modbus协议参考

Modbus是工业领域应用最广泛的通信协议,由Modicon公司于1979年开发。它支持通过串行线路(RTU模式)或以太网(TCP/IP模式)在电子设备之间进行通信。本工具帮助工程师在没有专用硬件或软件的情况下调试和分析Modbus通信。

Modbus RTU帧结构

Modbus RTU(远程终端单元)通过RS-232或RS-485等串行连接以二进制格式传输数据。每帧包含从站地址、功能码、数据和16位CRC校验码用于错误检测。紧凑的二进制格式使RTU非常适合带宽受限的环境。

Slave ID
1 byte
Function
1 byte
Data
N bytes
CRC-16
2 bytes

Modbus RTU Frame Structure

Modbus TCP帧结构

Modbus TCP将RTU帧封装在TCP/IP数据包中,使用7字节的MBAP(Modbus应用协议)头。该头部包含用于请求响应匹配的事务标识符、协议标识符(Modbus固定为0)、消息长度和单元标识符。TCP通信默认使用502端口。

Trans ID
2 bytes
Proto ID
2 bytes
Length
2 bytes
Unit ID
1 byte
Function
1 byte
Data
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)。当读取到错误数值时,尝试不同的字节序可以找到正确的解释方式。

大端序 (ABCD)
A B C D
小端序 (DCBA)
D C B A
中间大端 (BADC)
B A D C
中间小端 (CDAB)
C D A B

CRC-16/Modbus算法

Modbus RTU使用多项式0x8005和初始值0xFFFF的CRC-16进行错误检测。CRC计算覆盖从站地址、功能码和数据字节,然后以低字节在前的顺序附加。CRC不正确的帧应被接收方丢弃。

多项式: 0x8005
初始值: 0xFFFF
输入反转:
输出反转:

实际应用场景

  • 通过分析原始报文数据排查PLC与SCADA系统之间的通信故障
  • 在设备调试过程中将十六进制寄存器数据转换为工程单位进行验证
  • 无需专用Modbus主站软件即可生成测试指令进行设备验证
  • 在集成不同厂商设备时调试字节序问题

相关工具

快捷菜单

暂无访问记录