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 RTUModbus ASCIIModbus 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/LFTCP帧结束标志

  三、校验机制详解

  1. RTU模式(CRC-16)

  计算流程

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

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

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

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

  2. ASCII模式(LRC)

  计算流程

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

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

  结果转换为两个ASCII字符。

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

  3. TCP模式

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

  四、版本差异核心对比

差异点RTUASCIITCP
编码方式二进制ASCII字符二进制(封装于TCP帧)
传输效率高(1字节=2十六进制)低(1字节=2字符)最高(直接传输原始数据)
帧分隔时间间隔(3.5字符)冒号+CR/LFTCP连接管理
校验机制CRC-16LRC无(依赖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协议通过多样化的报文格式适应不同网络环境,但其设计初衷的简洁性也带来安全挑战。在实际应用中需根据场景需求(实时性、可读性、网络架构)选择合适的传输模式,并辅以安全加固措施。

滚动至顶部