欢迎光临
我们一直在努力

Modbus-RTU协议深度解析|自研CRC校验封装+一主多从组网+标准库极简驱动

一、前言 RS485只是硬件链路,Modbus-RTU才是总线通信语言,组网必须遵循统一协议规则。 市面代码痛点:CRC冗余复杂、协议耦合485底层、主从代码混用、超时无处理、多从机地址冲突、照搬网上臃肿协议栈。 本文亮点:底层485解耦、自研精简CRC16、分离主机/从机业务、标准时序帧判定、适配一主多从、可搭配ADC/定时器联动采集寄存器数据。


二、Modbus-RTU核心底层原理(工控必懂) 2.1 协议特点

  • 物理层:基于RS485差分总线,一主多从拓扑,单总线最多挂载32台从设备。
  • 传输模式:二进制报文,效率高于Modbus-ASCII。
  • 校验方式:末尾CRC16多项式校验,防止总线干扰篡改数据。
  • 帧判定:总线静默3.5个字节时间,判定一帧收发完成(核心时序规则)。 2.2 标准RTU帧格式(固定结构) 从站问询帧:【从机地址】+【功能码】+【起始高地址】+【起始低地址】+【寄存器个数高】+【寄存器个数低】+【CRC低字节】+【CRC高字节】
  • 从机地址:01~247,总线唯一,组网区分设备。
  • 功能码:03读保持寄存器、06写单个寄存器(项目最常用)。
  • 寄存器地址:设备数据存储地址。
  • CRC16:整帧校验,错误直接丢弃报文,不应答。 2.3 两大核心功能码(99%工控项目只用这两个)
    • 03功能码:主机读取从机保持寄存器(读电压、温度、设备状态)。
    • 06功能码:主机写入从机寄存器(控继电器、调速、参数设置)。 2.4 CRC16校验原理(自研代码依据) 工业标准多项式:0xA001 运算规则:初始值0xFFFF,报文逐字节异或移位,最终输出2字节校验码,低字节在前、高字节在后,不可颠倒。

    三、实战组网项目方案 3.1 组网架构:一主两从

    • 主机:STM32主控,轮询下发指令,采集所有从机数据。
    • 从机1:地址0x01,挂载ADC电压采集寄存器。
    • 从机2:地址0x02,挂载LED/继电器控制寄存器。 3.2 硬件依托 复用RS485驱动:USART2+PA4收发控制,自动切换收发模式,无需改动底层485代码。 3.3 协议设计规则
  • 波特率9600,8N1,总线共地,末端120Ω终端电阻。
  • 非法地址、CRC错误、帧长度错误,直接丢弃报文,无应答。
  • 主机轮询间隔50ms,防止总线抢占冲突。

  • 四、模块化全套代码(标准库、解耦分层、原创精简) 文件分层:modbus.h + modbus.c,完全解耦485底层,适配任意串口485驱动,自研CRC、主机发送、从机解

    赞(0)
    未经允许不得转载:171主机测评 » Modbus-RTU协议深度解析|自研CRC校验封装+一主多从组网+标准库极简驱动
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址