单片机基础核心知识点汇总(十九)

目录

前言

[一、MODBUS 核心架构(主从机制)](#一、MODBUS 核心架构(主从机制))

[二、物理层:RS485 总线必备知识](#二、物理层:RS485 总线必备知识)

[三、MODBUS 四大寄存器](#三、MODBUS 四大寄存器)

四、六大常用功能码

[五、标准 MODBUS 帧结构(RTU 模式)](#五、标准 MODBUS 帧结构(RTU 模式))

[六、CRC16 校验原理](#六、CRC16 校验原理)

七、主机开发流程(单片机控制外设)

八、从机开发流程(单片机作为设备被读取)

九、粘包、断包、总线冲突终极解决

十、量产必备容错机制

十一、新手高频错误与根治

十二、实战项目场景


前言

MODBUS 是工业界通用标准,90% 的工控设备、传感器、变频器、仪表、PLC 通信全部基于它。 很多新手只会抄代码,但不懂帧结构、寄存器逻辑、异常处理、总线时序,导致现场频繁丢帧、误码、不响应、总线冲突

本篇为工业通信核心终章 ,从零讲透 MODBUS RTU 原理、四大寄存器、常用功能码、帧解析、RS485 硬件适配、主从机开发、总线容错、现场避坑,看完直接具备工业设备量产通信能力

一、MODBUS 核心架构(主从机制)

MODBUS 严格遵循 一主多从、被动应答 机制

  1. 主机(Master) 主动发起查询、下发指令,一般是单片机、PLC、上位机
  2. 从机(Slave) 被动等待指令,收到对应地址指令才应答,不能主动发数据

总线同一时刻只能一台设备发送,天然半双工,适配 RS485 总线。

二、物理层:RS485 总线必备知识

MODBUS RTU 几乎全部跑在 RS485 差分总线

  1. 差分传输:抗干扰极强,适合工业长线
  2. 半双工收发:靠 DE/RE 引脚切换收发状态
  3. 总线拓扑:手牵手布线,禁止星型布线
  4. 终端电阻:总线首尾必须 120Ω 终端电阻,防止信号反射

新手最大坑:发送完不延时切换接收 → 自己覆盖自己数据

三、MODBUS 四大寄存器

所有工业设备数据只有这四种存储区域,必须分清:

1、线圈寄存器(0 区) 位操作、只读 / 可写、对应开关量

  • 用途:继电器开关、设备启停、电磁阀控制

2、离散输入寄存器(1 区) 位操作、只读

  • 用途:按键状态、传感器开关信号、故障输入

3、保持寄存器(4 区) 字操作、可读写、项目最常用

  • 用途:温度、压力、参数阈值、校准值、设备地址、波特率

4、输入寄存器(3 区) 字操作、只读

  • 用途:ADC 采集数据、实时测量值、只读监测数据

核心口诀:0 开关、1 输入、3 只读、4 可改

四、六大常用功能码

  1. 01 功能码:读线圈
  2. 02 功能码:读离散输入
  3. 03 功能码:读保持寄存器(最常用)
  4. 04 功能码:读输入寄存器
  5. 05 功能码:写单个线圈
  6. 06 功能码:写单个保持寄存器
  7. 10 功能码:批量写保持寄存器

99% 项目只需要掌握以上 7 条即可。

五、标准 MODBUS 帧结构(RTU 模式)

标准请求帧:

从机地址 + 功能码 + 起始地址 + 寄存器数量 + CRC 校验

标准正常应答帧:

从机地址 + 功能码 + 数据长度 + 数据内容 + CRC 校验

异常应答帧:

从机地址 + 功能码 + 0x80 + 异常码 + CRC 校验

RTU 核心特点:

无分隔符、靠 3.5 字符静默间隔判定帧头帧尾

六、CRC16 校验原理

MODBUS 所有帧必须带 CRC16 校验 作用:防止干扰导致数据错误、指令篡改

校验规则:

  1. 参与校验:地址、功能码、数据域
  2. 校验错误:直接丢弃整帧数据,不应答
  3. 高低字节倒置存放

量产代码必须硬件 DMA 接收 + 软件 CRC 校验双重保障。

七、主机开发流程(单片机控制外设)

  1. 配置 RS485、DMA 串口
  2. 拼装标准 MODBUS 请求帧
  3. 切换 485 为发送模式
  4. 发送完成延时,切换接收模式
  5. 等待从机应答
  6. 校验 CRC、解析寄存器数据
  7. 超时重发机制(工业必备)

适用场景:单片机读取传感器、控制变频器、对接 PLC

八、从机开发流程(单片机作为设备被读取)

  1. 持续 DMA 接收总线数据
  2. 检测 3.5T 空闲判定一帧结束
  3. 判断本机地址是否匹配
  4. CRC 校验合法性
  5. 根据功能码读写对应寄存器数组
  6. 拼装应答帧返回上位机
  7. 非法地址、非法指令返回异常码

适用场景:自制工控设备、采集终端、仪表设备

九、粘包、断包、总线冲突终极解决

  1. T3.5 静默判定 严格遵循 3.5 字符间隔判帧,杜绝半包、粘包
  2. 485 收发切换延时 发送完成必须短暂延时再切接收,避免截断尾部
  3. 超时丢弃机制 长时间未收完帧直接清空缓存,防止死残留
  4. 总线防冲突 禁止从机主动上传,严格主从机制
  5. CRC 容错 错误帧直接丢弃,不执行错误指令

十、量产必备容错机制

  1. 总线超时重发
  2. 重复指令过滤
  3. 非法寄存器拦截
  4. 异常码反馈
  5. 总线空闲检测
  6. 寄存器数据边界保护
  7. 长时间总线静默复位接收状态

十一、新手高频错误与根治

  1. 不做收发延时 → 丢尾包
  2. 无 CRC 校验 → 干扰乱执行
  3. 寄存器数组越界 → 死机
  4. 不判断地址 → 总线上所有设备乱响应
  5. 频繁发送不等待应答 → 总线阻塞
  6. 无超时机制 → 任务卡死等待

十二、实战项目场景

  • 温湿度、压力传感器总线采集
  • PLC 与单片机双向通信
  • 多设备 485 总线组网
  • 变频器、调速器控制
  • 工业 IO 采集模块
  • 智能仪表、流量计设备
相关推荐
恒锐丰科技林技术员1 小时前
SS6635E:高性价比 30V 桥式直流电机驱动芯片解析
经验分享·嵌入式硬件·硬件工程
LCG元1 小时前
STM32 FreeRTOS 多任务实战:信号量同步、互斥量保护与优先级反转排查
stm32·单片机·嵌入式硬件
国科安芯1 小时前
星载CANFD总线通信网络中抗辐射微控制器MCU的失效机理与容错设计研究
网络·人工智能·分布式·单片机·嵌入式硬件·架构·抗辐射加固
zlinear数据采集卡1 小时前
FRAM铁电存储器原理深度解析:D223校准参数的“永久保险箱“
arm开发·人工智能·stm32·单片机·fpga开发·开源
zcmodeltech1 小时前
污水处理设备沙盘模型控制系统设计与实现:多单元协同联动方案
网络·分布式·stm32·单片机·嵌入式硬件·交互
Jaixln_HRF1 小时前
率能SS6635E 单通道4.5A/30V直流电机驱动芯片,高压大电流,用于电子锁/玩具/机器人
驱动开发·嵌入式硬件·机器人·硬件工程
Jaixln_HRF2 小时前
率能SS6623E 单通道4.3A/20V直流电机驱动芯片,超低导通电阻110mΩ,用于电子锁/玩具/机器人
驱动开发·嵌入式硬件·机器人·硬件工程
比老马还六2 小时前
Bipes-Blockly项目二次开发/硬件功能-LED灯条(十一)
前端·嵌入式硬件·硬件工程
云泽8082 小时前
STM32 USART 详解(二):从波特率同步到数据帧解析
stm32·单片机·嵌入式硬件