目录
[一、MODBUS 核心架构(主从机制)](#一、MODBUS 核心架构(主从机制))
[二、物理层:RS485 总线必备知识](#二、物理层:RS485 总线必备知识)
[三、MODBUS 四大寄存器](#三、MODBUS 四大寄存器)
[五、标准 MODBUS 帧结构(RTU 模式)](#五、标准 MODBUS 帧结构(RTU 模式))
[六、CRC16 校验原理](#六、CRC16 校验原理)
前言
MODBUS 是工业界通用标准,90% 的工控设备、传感器、变频器、仪表、PLC 通信全部基于它。 很多新手只会抄代码,但不懂帧结构、寄存器逻辑、异常处理、总线时序,导致现场频繁丢帧、误码、不响应、总线冲突。
本篇为工业通信核心终章 ,从零讲透 MODBUS RTU 原理、四大寄存器、常用功能码、帧解析、RS485 硬件适配、主从机开发、总线容错、现场避坑,看完直接具备工业设备量产通信能力。
一、MODBUS 核心架构(主从机制)
MODBUS 严格遵循 一主多从、被动应答 机制
- 主机(Master) 主动发起查询、下发指令,一般是单片机、PLC、上位机
- 从机(Slave) 被动等待指令,收到对应地址指令才应答,不能主动发数据
总线同一时刻只能一台设备发送,天然半双工,适配 RS485 总线。
二、物理层:RS485 总线必备知识
MODBUS RTU 几乎全部跑在 RS485 差分总线
- 差分传输:抗干扰极强,适合工业长线
- 半双工收发:靠 DE/RE 引脚切换收发状态
- 总线拓扑:手牵手布线,禁止星型布线
- 终端电阻:总线首尾必须 120Ω 终端电阻,防止信号反射
新手最大坑:发送完不延时切换接收 → 自己覆盖自己数据
三、MODBUS 四大寄存器
所有工业设备数据只有这四种存储区域,必须分清:
1、线圈寄存器(0 区) 位操作、只读 / 可写、对应开关量
- 用途:继电器开关、设备启停、电磁阀控制
2、离散输入寄存器(1 区) 位操作、只读
- 用途:按键状态、传感器开关信号、故障输入
3、保持寄存器(4 区) 字操作、可读写、项目最常用
- 用途:温度、压力、参数阈值、校准值、设备地址、波特率
4、输入寄存器(3 区) 字操作、只读
- 用途:ADC 采集数据、实时测量值、只读监测数据
核心口诀:0 开关、1 输入、3 只读、4 可改
四、六大常用功能码
- 01 功能码:读线圈
- 02 功能码:读离散输入
- 03 功能码:读保持寄存器(最常用)
- 04 功能码:读输入寄存器
- 05 功能码:写单个线圈
- 06 功能码:写单个保持寄存器
- 10 功能码:批量写保持寄存器
99% 项目只需要掌握以上 7 条即可。
五、标准 MODBUS 帧结构(RTU 模式)
标准请求帧:
从机地址 + 功能码 + 起始地址 + 寄存器数量 + CRC 校验
标准正常应答帧:
从机地址 + 功能码 + 数据长度 + 数据内容 + CRC 校验
异常应答帧:
从机地址 + 功能码 + 0x80 + 异常码 + CRC 校验
RTU 核心特点:
无分隔符、靠 3.5 字符静默间隔判定帧头帧尾
六、CRC16 校验原理
MODBUS 所有帧必须带 CRC16 校验 作用:防止干扰导致数据错误、指令篡改
校验规则:
- 参与校验:地址、功能码、数据域
- 校验错误:直接丢弃整帧数据,不应答
- 高低字节倒置存放
量产代码必须硬件 DMA 接收 + 软件 CRC 校验双重保障。
七、主机开发流程(单片机控制外设)
- 配置 RS485、DMA 串口
- 拼装标准 MODBUS 请求帧
- 切换 485 为发送模式
- 发送完成延时,切换接收模式
- 等待从机应答
- 校验 CRC、解析寄存器数据
- 超时重发机制(工业必备)
适用场景:单片机读取传感器、控制变频器、对接 PLC
八、从机开发流程(单片机作为设备被读取)
- 持续 DMA 接收总线数据
- 检测 3.5T 空闲判定一帧结束
- 判断本机地址是否匹配
- CRC 校验合法性
- 根据功能码读写对应寄存器数组
- 拼装应答帧返回上位机
- 非法地址、非法指令返回异常码
适用场景:自制工控设备、采集终端、仪表设备
九、粘包、断包、总线冲突终极解决
- T3.5 静默判定 严格遵循 3.5 字符间隔判帧,杜绝半包、粘包
- 485 收发切换延时 发送完成必须短暂延时再切接收,避免截断尾部
- 超时丢弃机制 长时间未收完帧直接清空缓存,防止死残留
- 总线防冲突 禁止从机主动上传,严格主从机制
- CRC 容错 错误帧直接丢弃,不执行错误指令
十、量产必备容错机制
- 总线超时重发
- 重复指令过滤
- 非法寄存器拦截
- 异常码反馈
- 总线空闲检测
- 寄存器数据边界保护
- 长时间总线静默复位接收状态
十一、新手高频错误与根治
- 不做收发延时 → 丢尾包
- 无 CRC 校验 → 干扰乱执行
- 寄存器数组越界 → 死机
- 不判断地址 → 总线上所有设备乱响应
- 频繁发送不等待应答 → 总线阻塞
- 无超时机制 → 任务卡死等待
十二、实战项目场景
- 温湿度、压力传感器总线采集
- PLC 与单片机双向通信
- 多设备 485 总线组网
- 变频器、调速器控制
- 工业 IO 采集模块
- 智能仪表、流量计设备
