Modbus 是以功能码和数据模型组织工业设备通信的应用层协议。主站/客户端发出请求,从站/服务器处理后响应;具体寄存器代表温度、速度、状态还是命令,由设备或项目接口定义。
学习时先区分三层:应用数据和功能码、RTU/ASCII/TCP封装、物理或网络连接。协议名称不能直接告诉你速度、距离、拓扑或设备数据的单位。
四个数据空间
跳转到“四个数据空间”| 数据空间 | 元素宽度 | 访问方向 | 常用功能码(十六进制) |
|---|---|---|---|
| 线圈 Coils | 1 bit | 读写 | 01读,05写单个,0F写多个 |
| 离散输入 Discrete Inputs | 1 bit | 只读 | 02 |
| 输入寄存器 Input Registers | 16 bit | 只读 | 04 |
| 保持寄存器 Holding Registers | 16 bit | 读写 | 03读,06写单个,10写多个 |
线圈不是16位数据项。四个空间可出现相同的地址数值,由功能码区分;映射到物理I/O还是内存变量属于应用设计。32位整数、浮点数等通常占多个寄存器,还必须约定字序与编码。
RTU、ASCII和TCP的封装
跳转到“RTU、ASCII和TCP的封装”PDU由功能码与功能相关数据组成;ADU在PDU外增加对应链路所需字段。
| 形式 | ADU组成概要 | 需要关注的边界 |
|---|---|---|
| RTU | 从站地址 + PDU + CRC | 二进制字节、串口格式、帧间静默时间 |
| ASCII | 起止标记、地址/PDU的十六进制字符、LRC | 字符编码和终止规则,不是RTU帧直接转成文字 |
| TCP | MBAP头 + PDU | TCP字节流分帧、长度、事务标识及Unit Identifier |
TCP封装不附加RTU的CRC字段。网关可能把TCP中的单元标识映射到后面的串行从站;不能用“唯一设备地址”一句话代替IP端点、单元标识和串口站号各自的寻址职责。
串行RTU主站一次只安排一笔事务,正常从站地址为1~247;广播写不应等待应答。TCP客户端则要按照实现支持的并发能力和事务标识管理请求。功能码、字段编码和数据模型见Modbus应用协议V1.1b3,串行时序见串行规范V1.02。
工程上还要约定什么
跳转到“工程上还要约定什么”设备寄存器表应给出零基线上地址、访问权限、类型、单位、比例、有效范围、更新周期及异常行为。手册中的40001等引用编号可能与报文地址不同,先确认换算规则再读写。
通信距离、速率和布线拓扑由RS485、RS232、以太网及设备实现决定;不能把“总线、星型、环形”都列为任意串行网络可互换的连接方式。能收到合法帧也不等于数据新鲜或业务动作已完成,需要超时、状态确认和诊断记录。
Modbus广泛用于工业自动化、仪表和楼宇设备。开放的规范便于互操作,但实际设备常只实现一部分功能;以具体型号的接口说明和实测报文作为联调依据。