当前位置: 首页 > news >正文

Modbus RTU协议详解:从帧格式到功能码示例,一篇就够了

一、什么是Modbus RTU?

Modbus RTU(Remote Terminal Unit)是Modbus协议在串行链路上最常用的一种传输方式,采用二进制编码和CRC校验,具有帧结构紧凑、传输效率高的特点。它广泛应用于工业自动化、PLC、仪表、传感器等设备之间的通信。

对比:Modbus ASCII使用ASCII字符传输,可读性好但效率低;Modbus TCP基于以太网,去掉了CRC校验,增加了MBAP报文头。


二、物理层与通信参数

Modbus RTU通常运行于RS-232或RS-485串行接口上,常用参数配置:

参数典型值
波特率9600、19200、38400、115200
数据位8
停止位1(或2)
校验位无校验(N)、奇校验(O)、偶校验(E)
总线拓扑RS-485:半双工,菊花链手拉手
最大从站数RS-485:32或128(加中继)

关键点:通信双方必须完全一致才能正常通信。


三、RTU帧格式(核心重点)

一个完整的Modbus RTU帧由以下4个字段组成,没有帧头或帧尾,通过时间间隔区分帧边界。

字段长度说明
地址码1字节从站地址1~247,0为广播地址
功能码1字节指示操作类型(读/写)
数据N字节根据功能码不同,长度和内容不同
CRC校验2字节循环冗余校验,低字节在前

3.1 帧间隔时间(极易出错考点)

  • 帧内间隔:一帧内,字节与字节之间的间隔不能超过1.5个字符时间,否则从站会认为帧不完整而丢弃。

  • 帧间间隔:两帧之间的空闲时间必须 ≥3.5个字符时间,用以区分不同的帧。

例如:波特率9600,1个字符时间 ≈ 1/9600 * 11位(8数据+1起始+1停止+1校验? 实际按位计算),通常1字符≈1ms。3.5字符≈3.5ms。


四、功能码详解(带示例)

Modbus定义了四种数据对象:线圈(Coil)离散输入(Discrete Input)输入寄存器(Input Register)保持寄存器(Holding Register)。常用功能码如下:

功能码(HEX)名称操作对象权限
0x01读线圈线圈
0x02读离散输入离散输入
0x03读保持寄存器保持寄存器
0x04读输入寄存器输入寄存器
0x05写单个线圈线圈
0x06写单个寄存器保持寄存器
0x0F (15)写多个线圈线圈
0x10 (16)写多个寄存器保持寄存器

下面给出最常用的几个功能码的请求/响应示例(假设从站地址=01)。

4.1 功能码 0x03 – 读保持寄存器

请求01 03 00 01 00 01 D5 CA
解析:

  • 01:从站地址

  • 03:功能码

  • 00 01:起始寄存器地址(协议地址,对应PLC地址40002)

  • 00 01:读取寄存器数量(1个)

  • D5 CA:CRC校验(低字节CA在前,D5在后)

正常响应01 03 02 00 17 F8 4A

  • 01:从站地址

  • 03:功能码

  • 02:数据字节数(2字节)

  • 00 17:寄存器值 = 0x0017 = 23

  • F8 4A:CRC

4.2 功能码 0x06 – 写单个寄存器

请求(向地址0x0001的寄存器写入0x001F):01 06 00 01 00 1F 19 9E

  • 00 01:寄存器地址

  • 00 1F:写入的值(31)

  • 19 9E:CRC

正常响应:回显相同的请求报文(原样返回)。

4.3 功能码 0x10 – 写多个寄存器

请求(从地址0x0002开始写入2个寄存器的值:0x000A和0x000B):
01 10 00 02 00 02 04 00 0A 00 0B 60 71

  • 01:地址

  • 10:功能码(16进制10 = 16)

  • 00 02:起始地址

  • 00 02:寄存器数量

  • 04:后续数据字节数(2个寄存器 × 2字节 = 4)

  • 00 0A:第1个寄存器值

  • 00 0B:第2个寄存器值

  • 60 71:CRC

正常响应01 10 00 02 00 02 E0 78

  • 回显地址、功能码、起始地址、数量,CRC重新计算。

4.4 功能码 0x01 – 读线圈

请求(从线圈地址0x0000开始读取2个线圈状态):01 01 00 00 00 02 3D C9

  • 00 00:起始线圈地址(PLC地址00001)

  • 00 02:读取2个线圈

响应01 01 01 03 91 90

  • 01:字节数(1字节)

  • 03:二进制 0000 0011,表示第0位=1,第1位=1(两个线圈均为ON)


五、CRC校验计算与字节序

CRC-16-Modbus算法:

  • 多项式:0x8005(反转后为0xA001

  • 初始值:0xFFFF

  • 计算范围:地址 + 功能码 + 数据(不包含CRC本身

  • 结果发送顺序低字节在前,高字节在后(小端序)

示例计算(手动简单理解)

01 03 00 01 00 01为例:

  1. CRC初始值 0xFFFF

  2. 异或 0x01 → 0xFFFE

  3. 右移8次,每次若移出1则异或0xA001,得到临时CRC...

  4. 处理完所有字节后,最终的CRC = 0xD5CA

  5. 发送时先发CA,再发D5

常见面试题:CRC校验的两个字节,发送时谁在前?答:低字节在前


六、异常码与异常响应

当从站无法处理请求时,返回异常响应:功能码的最高位置1,数据字节为异常码。

例如:请求读保持寄存器(0x03)时地址越界,从站返回:
01 83 02 C1 91

  • 01:地址

  • 83=0x80 | 0x03,表示读寄存器出错

  • 02:异常码(非法数据地址)

常见异常码表

异常码名称含义
0x01非法功能码从站不支持该功能码
0x02非法数据地址地址超出范围或不存在
0x03非法数据值数据值无效(如写入只读寄存器)
0x04从站设备故障执行时发生不可恢复错误
0x06从站忙正在处理上一个命令,稍后再试

七、数据模型与地址映射

在实际工程中,我们常听到PLC地址如4000100001,它们与协议地址的对应关系如下:

数据类型PLC地址范围协议地址(十六进制)功能码示例
线圈00001~099990x0000~0x270E01(读) / 05(写)
离散输入10001~199990x0000~0x270E02(读)
输入寄存器30001~399990x0000~0x270E04(读)
保持寄存器40001~499990x0000~0x270E03(读) / 06(写)

注意:PLC地址40001对应的协议地址是0x0000400020x0001,依此类推。在报文中必须使用协议地址。


八、常见故障排查指南

现象可能原因解决方法
无响应地址错误、波特率不一致、接线A/B反、终端电阻缺失检查配置,用示波器或串口助手抓包
返回异常码0x02请求的地址超出设备范围确认设备地址映射表
返回异常码0x03写入值非法(如写入只读区域)检查功能码与数据类型是否匹配
CRC错误帧内字节间隔超过1.5字符,或线路干扰检查软件发送连续性,增加屏蔽,降低波特率
读取数据值错乱(大端)32位数据或浮点数的字节顺序不对交换寄存器高低字节(如使用Modbus Poll软件)

九、调试工具推荐

  • 串口助手:格西烽火、SSCOM,可捕获原始字节。

  • Modbus调试软件:Modbus Poll(主站模拟)、Modbus Slave(从站模拟)。

  • 逻辑分析仪:查看总线实际波形和字符间隔。


十、总结

Modbus RTU简单、稳定、开放,是工业通信的必修课。掌握以下重点,即可轻松应对开发与面试:

  1. 帧结构:地址、功能码、数据、CRC(低字节在前)。

  2. 时间间隔:帧内<1.5字符,帧间≥3.5字符。

  3. 常用功能码:03读寄存器、06写单寄存器、16写多寄存器、01读线圈。

  4. CRC算法:多项式0xA001,初始0xFFFF,发送小端序。

  5. 异常码:01~04的含义。

  6. 物理层参数:9600-8-N-1最常见。

最后留一道思考题:如果一帧数

http://www.zskr.cn/news/1505109.html

相关文章:

  • I2C总线开关PCA9548A应用与焊接工艺全解析
  • 【实战指南】供应链准时交付预测 —— 基于Amazon SageMaker Canvas的端到端建模
  • Resistor Scanner:3步教你用手机摄像头识别电阻值,从此告别色环记忆烦恼
  • 如何快速获得专业级鼠标指针:Bibata_Cursor完全定制指南
  • MTProxy网络层架构深度解析:构建高可用代理服务的核心技术实现
  • 联发科设备修复终极指南:5步掌握MTKClient专业数据恢复与系统刷写
  • 2026年四川会议策划公司综合实力榜:五大服务商深度评测 - 深度智识库
  • Vue3定时任务可视化配置:如何用no-vue3-cron告别复杂Cron表达式
  • Claude Code UI Git集成架构深度解析:4层架构设计与企业级版本控制实现
  • 导师推荐!盘点2026年抢手爆款的一键生成论文工具
  • 2026年澳洲留学哪家咨询服务好:五家优选品牌深度解析 - 科技焦点
  • 精选视频转动图优质工具,一键转换打造清晰流畅 GIF 图片 - 软件工具教程方法
  • 蓝气球戴腻了能卖多少?万国葡萄牙回收行情,西安表友必看 - 奢侈品回收测评
  • C++轻量级状态机框架:支持消息驱动的状态切换与多角色协作
  • 2026年河北玻璃钢环保设备全面选型指南:衡水电缆桥架、管道、一体化泵站对标横评 - 优质企业观察收录
  • 如何快速搭建世嘉模拟器:终极复古游戏体验指南
  • 铲屎官省钱秘籍:告别高价猫粮,平价也能养出健康喵! - 品牌测评鉴赏家
  • HDMI硬件设计实战:从信号完整性到CTS认证的关键考量
  • 邯郸装修公司权威排名 全域家装服务商实测盘点 - 装修新知
  • 做设计3年,2026年最推荐的5个商用字体下载站
  • 广州番禺上门回收黄金奢侈品,哪家口碑好价格高又快捷? - 资讯速览
  • STM32水下水质监测系统:含4G上传、微信小程序控制与可复现硬件方案
  • Pygame外星人入侵增强版:P键启停、实时得分、布局更合理
  • AI智能客服系统的开发
  • 2026福州铂金回收避坑攻略!别再当冤大头,本地靠谱出手方式在这 - 开心测评
  • 2026青岛宝珀回收分级榜:六家机构评级,S+就选它 - 薛定谔的梨花猫
  • 深耕本地出行服务!集宁区汇通汽车租赁打造乌兰察布靠谱租车标杆 - 资讯速览
  • 万爱通礼品卡回收价格怎么看?回收实操经验分享 - 团团收购物卡回收
  • TwinCAT实时性网卡配置
  • 2026合肥名表回收TOP5实测|劳力士变现优选这家不压价 - 禹竞