Modbus 协议完整解读文档(工业通用标准版)
·
一、文档前言
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 |
关键常识:
- 协议底层地址从 0 开始,手册地址从 1 开始,编程要减 1;
- 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
六、标准通信交互流程
- 主站按规则组帧(地址 + 功能码 + 地址 + 数量 + 校验)
- 串口 / 网口下发指令
- 等待从站应答(超时时间一般 200~500ms)
- 收到数据:先校验 CRC / 长度,合法再解析
- 解析功能码→拆分寄存器→转工程值
- 异常:超时 / 错帧 / CRC 错误直接丢弃,可配置重发
七、常见问题 & 排错手册
- 没应答检查:从站 ID、波特率、奇偶校验、485 正负接线、终端电阻
- CRC 报错抓包核对高低字节、串口参数一致性
- 数据乱跳寄存器高低位颠倒、倍率没乘、浮点数排布选错
- 能读不能写寄存器只读、设备未开写入权限、密码锁定
八、Modbus & DL/T645 快速区分(你之前学的)
表格
| Modbus | DL/T645-2007 |
|---|---|
| 通用工业协议 | 国网电表专用协议 |
| CRC16 校验 | 累加和 + 33H 加密 |
| 4 类寄存器模型 | 数据 DI 标识定义所有电量 |
| 多用于 PLC / 传感器 | 只用于智能电表采集 |
九、快速落地使用建议
- 现场串口设备:优先用 Modbus RTU
- 内网网口设备 / 网关:优先 Modbus TCP
- 所有浮点、32 位数据:提前做好高低位配置
- 开发架构:通信层→拆包校验→功能码分发→数据映射→业务层
如果本文对你有帮助,欢迎点赞、收藏、评论,如有疑问或补充,欢迎在评论区交流探讨~
日常深耕嵌入式、物联网、协议开发相关技术,有技术答疑、项目合作、毕设指导需求,均可私信私聊!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)