Modbus 协议通信原理(通俗+技术结合)Modbus 是工业主流主从式总线通信协议,核心是一问一答、主站轮询,结构简单、可靠性高,广泛用于 PLC、仪表、传感器、变频器等工业设备。
一、核心架构:主从模式(最关键)
整个网络只分两类设备,严格单向发起通信:1. 主站(Master):主动发起请求,比如上位机、PLC、触摸屏。
只能主站主动问话,从站不会主动发数据。
2. 从站(Slave):被动响应,现场传感器、电表、阀门、变频器等。
收到对应自己的指令才回复,无请求则静默。
规则:一条总线上只能有 1 个主站,可挂载多个从站(最多 247 个),每个从站拥有**地址(1~247),用来区分设备。
二、通信流程(标准一问一答)
完整交互分 4 步,全程轮询执行:1. 主站发送请求帧
主站指定从站地址 + 功能码 + 寄存器地址 + 读写数量,广播到总线。
2. 从站地址匹配
所有从站都接收报文,对比地址,地址不符直接丢弃;地址一致才解析指令。
3. 从站执行指令并返回应答帧
按功能码执行读数据 / 写数据,把结果打包成应答帧发回主站。
4. 主站接收解析
校验数据、提取内容,一次通信结束,主站继续轮询下一个从站。
特点:不会冲突,因为永远只有主站发指令,从站只被动回复。
三、两种主流传输方式(物理 + 报文格式)
Modbus 分串行链路和以太网两大类,报文逻辑一致,底层载体不同。1. Modbus RTU(串口最常用:RS-485/RS-232)
工业现场串口**,二进制格式、效率高、帧紧凑。
报文帧结构(按顺序)
- 从站地址(1 字节):定位设备
- 功能码(1 字节):定义操作(读线圈、读寄存器、写数据等)
- 数据区:寄存器地址、长度、写入数值等
- CRC 校验(2 字节):校验报文是否传输出错
2. Modbus ASCII(串口备选)
字符格式,用 ASCII 码传输,可读性强、传输慢,现在很少用。
用 LRC 校验,帧首尾有起止标记。
3. Modbus TCP(以太网,网口通信)
跑在标准 TCP/IP 网络上,电脑 / 交换机直接连接,无地址字段(靠 IP 区分设备)。
- 默认端口:502
- 增加 Modbus 报文头(MBAP) 做事务管理
- 内部指令逻辑和 RTU 完全兼容,只是封装在以太网包里。
四、核心:功能码(定义做什么操作)
功能码决定读写对象,常用基础码:- 01:读线圈(开关量,继电器通断)
- 02:读离散输入(外部开关、传感器状态)
- 03:读保持寄存器(最常用,读取温度、电压、转速等数值)
- 04:读输入寄存器(只读测量值)
- 05:写单个线圈(控制单路开关)
- 06:写单个寄存器(设置参数、下发指令)
五、数据存储模型(设备内部地址划分)
Modbus 把设备数据统一抽象成4 类存储区,所有读写都针对这四类:1. 线圈(Coils):位数据,开关量,可读写
2. 离散输入(Discrete Inputs):位数据,开关量,只读
3. 保持寄存器(Holding Registers):16 位寄存器,数值,可读写
4. 输入寄存器(Input Registers):16 位寄存器,数值,只读
所有设备都遵循这套统一模型,所以不同品牌设备能互通。
六、差错机制(保证通信可靠)
1. 地址过滤:非目标从站不响应,避免干扰2. 帧校验:RTU 用 CRC、ASCII 用 LRC、TCP 靠 TCP 校验,出错直接丢弃报文
3. 超时重传:主站发出请求后,超时未收到应答,判定通信失败,可重试
Modbus 依靠一主多从轮询架构,通过**从站地址区分设备,用功能码定义读写动作,搭配校验机制保证传输可靠;底层可跑串口 (RTU/ASCII) 或以太网 (TCP),统一的数据模型让不同工业设备轻松实现互联互通。