lora

Modbus协议报文格式简介

Modbus协议作为工业自动化领域的核心通信标准,其报文格式根据传输模式(RTU、ASCII、TCP)存在显著差异。以下从协议类型、报文结构、校验机制及版本差异四个维度进行详细解析:

  一、Modbus协议的主要类型

  1.Modbus RTU

应用场景:串行通信(RS-232/RS-485),工业自动化、SCADA系统等高实时性场景。

特点:二进制编码,数据密度高(每个字节直接传输两个十六进制字符),采用CRC-16校验,传输效率优于ASCII。

字节格式:1起始位 + 8数据位(低位先发) + 1奇偶校验位(可选) + 1停止位(无校验时为2位)。

  2.Modbus ASCII

应用场景:串行链路定时要求低或需人工调试的场景。

特点:ASCII字符编码(0-9、A-F),每个字节拆分为两个字符发送,效率较低但可读性强,采用LRC校验。

字节格式:1起始位 + 7数据位 + 1奇偶校验位(可选) + 1停止位(无校验时为2位)。

帧结构:以冒号(:)开头,回车换行(CR/LF)结尾。

  3.Modbus TCP/IP

应用场景:以太网通信,现代工业网络及物联网设备互联。

特点:基于TCP/IP协议,添加MBAP报文头(事务标识符、协议标识符、长度、单元标识符),无需额外校验(依赖TCP的可靠性)。

数据单元:保留RTU/ASCII的PDU(协议数据单元),封装在TCP帧中传输。

  二、报文结构对比

组件 Modbus RTU Modbus ASCII Modbus TCP
起始符 3.5字符时间的停顿间隔 冒号(:) 无(由TCP连接管理)
地址域 1字节(0-247) 2字符(ASCII编码地址) 单元标识符(1字节)
功能码 1字节(01-FF,如03读保持寄存器) 2字符(ASCII编码功能码) 1字节(与RTU相同)
数据域 可变长度,二进制格式 可变长度,ASCII编码 可变长度,二进制格式
校验域 CRC-16(2字节) LRC(2字符) 无(依赖TCP校验)
结束符 3.5字符时间的停顿间隔 CR/LF TCP帧结束标志

  三、校验机制详解

  1.RTU模式(CRC-16)

计算流程

  初始化16位寄存器为全1(0xFFFF)。

  逐字节异或寄存器值并右移,最低位为1时与预设多项式(如0xA001)异或。

  重复8次移位后处理下一字节,最终寄存器值为CRC。

传输顺序:低字节在前,高字节在后。

  2.ASCII模式(LRC)

计算流程

  累加所有字节(不包括起始符和结束符)。

  对累加和取二进制补码(即取反加1)。

  结果转换为两个ASCII字符。

示例:数据0x01 0x03的LRC为0xFA。

  3.TCP模式

无显式校验:依赖TCP的序列号、确认应答和重传机制保障可靠性。

  四、版本差异核心对比

差异点 RTU ASCII TCP
编码方式 二进制 ASCII字符 二进制(封装于TCP帧)
传输效率 高(1字节=2十六进制) 低(1字节=2字符) 最高(直接传输原始数据)
帧分隔 时间间隔(3.5字符) 冒号+CR/LF TCP连接管理
校验机制 CRC-16 LRC 无(依赖TCP)
适用网络 串行链路 串行链路 以太网
地址表示 1字节(0-247) 2字符(ASCII编码) 单元标识符(1字节)
扩展性 有限(主从架构) 有限(主从架构) 高(支持多客户端/服务器)

  五、典型应用示例

  1.RTU读取保持寄存器

  请求帧:01 03 00 6B 00 03 CRC

  地址=0x01.功能码=0x03(读寄存器),起始地址=0x006B,数量=3.

  响应帧:01 03 06 02 2B 00 00 00 64 CRC

  数据长度=6字节,返回3个寄存器值(0x022B、0x0000、0x0064)。

  2.TCP写入单个线圈

  请求帧:00 01 00 00 00 06 01 05 00 03 FF 00

  MBAP头(事务ID=0x0001.协议=0.长度=6),功能码=0x05(写线圈),地址=0x0003.值=0xFF00(ON)。

  六、安全性考量

漏洞:Modbus协议无加密或身份验证机制,易受中间人攻击、重放攻击。

防护建议:通过VPN隔离网络、使用防火墙规则限制访问、升级至Modbus Secure(TLS扩展)。

  通过上述分析可见,Modbus协议通过多样化的报文格式适应不同网络环境,但其设计初衷的简洁性也带来安全挑战。在实际应用中需根据场景需求(实时性、可读性、网络架构)选择合适的传输模式,并辅以安全加固措施。

滚动至顶部
Baidu
map