Modbus 工业通讯协议实践
Publish by2025-04-19
Updated by2025-04-23
Read in~4 min
本科读的网络工程,没怎么接触过工业使用的一些通讯协议,近期开发使用到一个 RS485 + ModbusRTU 的组合来做业务数据传递处理,写个文章记录下吧!
Written by - kok-s0s
复盘了下,根本没啥特别难的点,只是 DDD 领域驱动开发(工业自动化),这个领域下一些技术词汇对我而言还是有些陌生。直接上手开发带着些许迷茫罢了,这个 RS485 物理层协议蛮简单的。其实作为上位机应用的开发,甚至于我,无需过分关注物理层协议用到了什么,关键的是 Modbus 这个工业通讯协议我要根据业务如何使用。
RS485 物理层协议在维基百科上最新名词为EIA-485了…
起因
目前开发的应用需要外接一个硬件设备使用,应用和这个硬件设备的数据交互是通过 RS485 协议进行的(OSI 物理层)。
目标
打通应用和硬件设备之间的数据交互,完成数据的收发以及相关业务功能的开发,迷茫的是数据收发处理,业务功能的开发就简单多了。
触类旁通 + ChatGPT
作为通讯一方的主站,应用是使用公司所封装的一个 SDK 接口走 ModbusRTU 协议方式对设备寄存器做读写操作;
作为通讯一方的从站,设备是使用 QT 生态下的 ModbusRTU 相关类对设备寄存器做读写操作;
两方本质使用的都是 ModbusRTU 工业通信协议;
整个数据交互开发,我仅仅只用到 Modbus 协议中的 0x03 读取多个寄存器功能码 和 0X10 写多个寄存器功能码;
以及熟悉了下 QT 生态下是如何使用 ModbusRTU 协议的 - QModbusRtuSerialSlave;
剩下的都是和 ChatGPT 的一个问答交互学习以及修改代码的事情。
与 GPT 问答的记录及一些理解梳理
Modbus 是一种广泛应用于工业自动化领域的通信协议,主要用于工业设备(如 PLC、传感器、变频器、仪表等)之间的数据交换。
Modbus 的工业属性
| 特性 | 说明 |
|---|---|
| 设计初衷 | 为工业环境设计,强调简单、可靠、实时性。 |
| 典型应用场景 | 工厂自动化、SCADA 系统、电力监控、楼宇控制等。 |
| 硬件兼容性 | 支持 RS485(抗干扰)、RS232、以太网(Modbus TCP),适应工业现场布线。 |
| 协议简单性 | 帧结构紧凑,易于嵌入式设备实现(适合资源受限的工业控制器)。 |
| 主从架构 | 适合工业控制中的集中监控(如 PLC 作为主站,传感器/执行器作为从站)。 |
Modbus 的工业应用案例
- PLC 通信:西门子、施耐德等 PLC 通过 Modbus 与外围设备交互
- 传感器数据采集:温度、压力传感器通过 Modbus RTU 上报数据
- 变频器控制:调节电机转速(如 ABB 变频器支持 Modbus 协议)
- 电力监控:电表(如威胜、科陆)使用 Modbus 传输电压、电流数据
- HMI 与设备交互:触摸屏(HMI)通过 Modbus TCP 访问 PLC 数据
为什么工业领域偏爱 Modbus?
- 标准化:开放协议,无版权限制,厂商广泛支持
- 低开销:协议简单,对硬件资源要求低(适合低成本嵌入式设备)
- 灵活性:支持多种物理层(RS485/RS232/TCP),适应不同工业场景
- 成熟稳定:自 1979 年推出至今,经过长期工业现场验证
Modbus 的局限性(工业场景中的注意事项)
- 无内置安全机制:无加密/认证,需通过物理隔离或防火墙保护
- 实时性有限:相比 EtherCAT、PROFINET 等现代工业协议,速度较慢
- 数据规模限制:单次读写寄存器数量受限(如 Modbus RTU 最多 123 个寄存器)
Modbus 与其他工业协议对比
| 协议 | 层级 | 特点 | 适用场景 |
|---|---|---|---|
| Modbus | 应用层 | 简单、通用、低成本 | 中小型工业控制系统 |
| PROFINET | 实时以太网 | 高速、确定性延迟 | 高性能自动化(如汽车制造) |
| EtherCAT | 实时以太网 | 分布式时钟、超低延迟 | 精密运动控制(如机器人) |
| CANopen | 数据链路层 | 抗干扰强、多主架构 | 车辆、工程机械 |
End
一个知识领域入了个门,之后遇到一些类似问题,也能轻松迎刃而解了!