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

目录

前言

[一、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 采集模块
  • 智能仪表、流量计设备
相关推荐
黑妹天下第一乖4 小时前
第 08 讲:阿加犀 AidGenSE 端侧大模型服务化与 OpenAI 兼容接口
人工智能·嵌入式硬件·深度学习·机器人·iot
辰哥单片机设计4 小时前
漏水传感器(STM32)
stm32·单片机·嵌入式硬件
恶魔泡泡糖5 小时前
stm32F103C8T6标准库串口接收之多串口基础应用5
stm32·单片机·嵌入式硬件
木子单片机5 小时前
基于51单片机计步器—无线蓝牙APP上传
单片机·嵌入式硬件·51单片机·keil
智者知已应修善业5 小时前
【51单片机只有一个8*8点阵数据如何滚动起来一片595+一组IO+花样】2022-1-15
c++·经验分享·笔记·单片机·蓝桥杯·硬件架构
恒锐丰科技林技术员5 小时前
EG2123A 三相独立半桥驱动芯片解析与工程应用
经验分享·嵌入式硬件·硬件工程
硅基手札6 小时前
【Linux 内核专栏 13】快IO层
linux·服务器·嵌入式硬件
李日华大战鸡红6 小时前
滑膜观测器(学习记录)
stm32·单片机·学习·matlab·机器人
白搞电子6 小时前
ESP32-S31 项目如何制作 Windows 一键烧录包:完整镜像、esptool 与数据边界
windows·stm32·单片机
xiangw@GZ7 小时前
纽扣电池型号
嵌入式硬件