1、协议定义
通信协议(国际组织IETF互联网工程任务组定义)是允许通信系统中多个实体传输信息的规则系统,包括语法、语义、同步方式及差错恢复方法,协议需经多方认可并形成技术标准,如 TCP/IP 协议族的 RFC 文档定义。
有时候我们咨询客户、供应商设备支持什么协议,总能听到支持RS485。
MODBUS是应用层报文规范。我们作为Modbus 协议的实际使用者(比如 PLC 工程师、工控调试人员)来说,核心关注点是应用层的报文规范(也就是协议定义中提到的语法、语义、同步方式及差错恢复方法等)—— 底层的传输层(TCP/UDP)、网络层(IP)、物理层(以太网 / RS485)都是由设备固件或驱动自动处理的,我们几乎不需要手动干预。
2.1语法
如图1.1,以MODBUS RTU为例,语法实质是指:
- 主站读数据:从站地址(1字节) + 功能码(1字节) + 数据起始地址(2字节) +寄存器个数(2字节)+ CRC校验(2字节)
- 从站正确响应:从站地址(1字节)+功能码(1字节)+字节数(1字节)+数据内容(N字节)+CRC校验(2字节)
- 从站的异常响应:从站地址(1字节)+功能码(功能码+0x80表示错误1字节)+异常代码(1字节)+CRC校验(2字节)
三种情况字节顺序、内容必须严格遵守描述,缺一不可。
MODBUS TCP/IP 无CRC校验,报文头部固定为MBAP,用于TCP通信管理(事务ID,协议ID,数据长度)。
MODBUS报文最先开始为从站地址,MODBUS TCP/IP为MBAP头部+PDU。
PDU除了第一个字节为单元ID,无CRC校验以外,其余与MODBUS RTU的报文相同。
单元ID,用于在多从站情况下标识逻辑设备。例如网关下通过MODBUS RTU采集了多个仪表。每个仪表设置不同的站地址。上位机通过MODBUS TCP/IP读取网关中所有的仪表数据,网关只有一个IP地址,此时通过单元ID区分不同仪表。工业物联网中数采网关模块应用较多(例如北辰的网关)。
2.2语义
Modbus RTU 是主从式同步:只能主站(上位机 / PLC)先发请求,从站(传感器 / 变频器)才能回应,从站不能主动发数据;
校验纠错:2.1章节提到的MODBUS RTU CRC 校验,也就是校验纠错。MODBUS TCP/IP不同,采用TCP本身的纠错机制。
经常听说MODBUS是应用层报文规范,RS485是物理层的接口电气标准。应用层和物理层等又是什么意思了?如表1。
核心功能(工控视角)
应用层
7-5 层(应用 + 表示 + 会话)
传输层
TCP/UDP 传输,端口 502 寻址
网络层
3层
数据链路层
以太网帧封装、MAC 地址识别、CRC 校验
网络接口层
1 层
为什么有这么多种不同层的模型?
3.2协议工作流程
那MODBUS RTU协议基于四层模型工作流程又是怎么一回事了?MODBUS RTU基于串口相对于MODBUS TCP/IP。无传输层和网络层,网络接口层要求RS485/RS422/RS232 串口电气标准。
不属于modbus协议。有人认为它属于数据链路层,有人认为它属于物理层,评论区发表你的个人看法。
