一、文档前言

1.1 协议定位

Modbus 是工业现场最通用的开源串口 / 以太网通信协议,主打简单、稳定、易移植;广泛用于 PLC、仪表、传感器、变频器、网关、新能源、电力采集。分为三大形态:

  • Modbus RTU:串口二进制(RS485/232),工业现场标配
  • Modbus TCP:以太网网口(502 端口),物联网 / 内网主推
  • Modbus ASCII:串口字符型,兼容性老旧设备,现在极少用

1.2 通信模式

标准主从架构

  • 主站(Client / 主机):主动发指令,比如网关、上位机、触摸屏
  • 从站(Server / 从机):被动应答,比如电表、传感器、变频器
  • 一条链路只能一问一答,从站不会主动上传数据

二、核心数据模型(必须吃透)

Modbus 所有数据只分 4 类寄存器空间:

表格

区域 功能 读写 地址范围 对应常用功能码
线圈(DO) 开关量输出、继电器 读 / 写 00001~09999 01、05、0F
离散输入(DI) 开关量输入、采集状态 只读 10001~19999 02
保持寄存器(AO) 参数、设定值、可修改 读 / 写 40001~49999 03、06、10
输入寄存器(AI) 采集数据、电压电流温度 只读 30001~39999 04

关键常识:

  1. 协议底层地址从 0 开始,手册地址从 1 开始,编程要减 1;
  2. 1 个寄存器 = 2 字节 (16bit)

三、三种协议帧详解

3.1 Modbus RTU(现场最常用)

帧结构

从站地址(1B) + 功能码(1B) + 数据域(NB) + CRC16校验(2B)
  • 间隔:帧间隔≥3.5 个字符空闲,用来区分两帧
  • 校验:CRC16 低字节在前,高字节在后
  • 物理层:9600/19200/2400 波特,8N1、8E1 常用

示例:读保持寄存器 03 功能

主机发:01 03 00 00 00 02 C4 0B解析:

  • 01:从站 ID=1
  • 03:读保持寄存器
  • 00 00:起始地址 0
  • 00 02:读 2 个寄存器
  • C4 0B:CRC 校验

从机回:01 03 04 00 12 00 34 85 33

  • 04:后续 4 字节数据
  • 0012、0034:两个寄存器原始值

3.2 Modbus TCP(网口)

帧结构 = MBAP 头 + 协议数据

事务ID(2B) + 协议ID(2B) + 长度(2B) + 从站ID(1B) + 功能码+数据
  • 默认端口:502
  • 无 CRC 校验,靠 TCP 链路可靠性保证
  • 适合跨网段、网关、云采集

3.3 Modbus ASCII(淘汰居多)

  • 所有字节转 ASCII 可见字符
  • 结尾 LRC 校验
  • 传输效率低,仅老设备适配用,新项目不用

四、常用标准功能码详解

读类

  • 01H 读线圈:读取开关输出状态(ON/OFF)
  • 02H 读离散输入:读取 DI 传感器开关状态
  • 03H 读保持寄存器:读设备参数、设定值(最常用)
  • 04H 读输入寄存器:读采集量(电压、电流、温度)

写类

  • 05H 写单个线圈:控制一路继电器开 / 关
  • 06H 写单个保持寄存器:改一个参数
  • 0FH 写多个线圈:批量控制开关
  • 10H 写多个保持寄存器:批量下发参数

异常响应

如果设备报错:功能码最高位 + 1(如 03→83),后跟 1 字节异常码:

  • 01:非法功能码
  • 02:非法寄存器地址
  • 03:非法数据值
  • 04:从站设备故障

五、数据解析规则(工程实操核心)

5.1 基础解析

  • 单寄存器:16 位无符号 / 有符号整数
  • 高字节在前、低字节在后(大端模式)

5.2 多字节组合(浮点数 / 32 位整数)

2 个寄存器 = 4 字节,常用排布:

  • ABCD(标准大端)
  • BADC、CDAB、DCBA(设备五花八门,需按手册调整)支持:
  • int32 / uint32
  • float32(温度、功率、电量)

5.3 缩放换算

原始值≠实际值,需要系数:实际值 = 原始寄存器值 × 倍率(0.1、0.01、10 等)例:寄存器值 1230,倍率 0.1 → 123.0


六、标准通信交互流程

  1. 主站按规则组帧(地址 + 功能码 + 地址 + 数量 + 校验)
  2. 串口 / 网口下发指令
  3. 等待从站应答(超时时间一般 200~500ms)
  4. 收到数据:先校验 CRC / 长度,合法再解析
  5. 解析功能码→拆分寄存器→转工程值
  6. 异常:超时 / 错帧 / CRC 错误直接丢弃,可配置重发

七、常见问题 & 排错手册

  1. 没应答检查:从站 ID、波特率、奇偶校验、485 正负接线、终端电阻
  2. CRC 报错抓包核对高低字节、串口参数一致性
  3. 数据乱跳寄存器高低位颠倒、倍率没乘、浮点数排布选错
  4. 能读不能写寄存器只读、设备未开写入权限、密码锁定

八、Modbus & DL/T645 快速区分(你之前学的)

表格

Modbus DL/T645-2007
通用工业协议 国网电表专用协议
CRC16 校验 累加和 + 33H 加密
4 类寄存器模型 数据 DI 标识定义所有电量
多用于 PLC / 传感器 只用于智能电表采集

九、快速落地使用建议

  1. 现场串口设备:优先用 Modbus RTU
  2. 内网网口设备 / 网关:优先 Modbus TCP
  3. 所有浮点、32 位数据:提前做好高低位配置
  4. 开发架构:通信层→拆包校验→功能码分发→数据映射→业务层

 


如果本文对你有帮助,欢迎点赞、收藏、评论,如有疑问或补充,欢迎在评论区交流探讨~

日常深耕嵌入式、物联网、协议开发相关技术,有技术答疑、项目合作、毕设指导需求,均可私信私聊!


 

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐