Modbus 工作原理
工作模式
Modbus 基于主从模式工作。在一个网络中,Modbus 协议通过主设备(客户端)和从设备(服务器)之间的请求-应答机制来交换信息。
下图展示了典型的 Modbus 网络,其中一个 master 设备(client)控制一个或多个 slave 设备(server)。
在标准的 Modbus 网络中,有 1 个主设备和最多 31 个从设备。
通讯特点
主设备-从设备工作原理有如下特点:
- 在同一时间只能有一个主设备连接到网络;
- 只有主设备能够发起通讯并向从设备发送请求;
- 主设备可以使用专门的地址分别访问每个从设备,也可以使用地址 0 同时访问所有从设备;
- 从设备只能向主设备发送应答 ;
- 从设备不能向主设备或其它从设备发起通讯。
通讯模式
Modbus 协议支持两种通讯模式交换信息:
- 单播模式 —— 主设备通过专门的地址访问从设备,从设备处理请求,然后向主设备发送应答。
- 广播模式 —— 主设备通过地址 0 访问所有从设备,在这种模式下,从设备不对广播消息作出应答。(因此,广播模式的请求指令必须是 Modbus 标准功能中的写指令)
应答时间
应答时间是指从设备对主设备发出的请求做出应答所需的时间。其中 Modbus 协议的数值:
- 典型值 < 10 ms (90% 的信息交换)
- 最大值大约是 700 ms,因此建议在发送完一个 Modbus 请求后暂停 1 秒钟再继续。
数据交换
Modbus 协议支持两种数据类型:
- 单个位
- 寄存器(16 位)
具体的位和寄存器定义由从设备决定。
地址
使用 Modbus 协议交换的消息包含要处理的数据的地址。每个寄存器都有一个寄存器编号,每类数据(位或寄存器)都有一个 16 位的地址。
在 Modbus 协议规定的 PDU 中,规定所有线圈或寄 存器地址从 0 开始计算。因此,第 n 号寄存器的地址是 n-1。例如,第 12000 号寄存器的地址是 0x2EDF(11999)。
帧
使用 Modbus 协议交换的所有帧(ADU)最大为 256 字节(ASCII 格式翻倍),其中包括 4 个域:
域 | 定义 | 大小(RTU 格式) | 描述 |
---|---|---|---|
1 | 从设备号(地址) | 1 个字节 | 请求的目的地址 - 0 :广播(涉及所有从设备) - 1-247 :单播,从设备的唯一地址 |
2 | 功能代码 | 1 个字节 | 参阅 Modbus 功能码 |
3 | 数据 | 0 到 252 个字节 | 请求数据(或应答数据) |
4 | 校验和 | 2 个字节 | CRC 校验和(ASCII 为 LRC) |
下图展示了主设备-从设备工作模型中的帧交换过程。
网络拓扑
Modbus RTU
Modbus RTU 通常基于 RS-485 串行通信链路,RS-485 总线布线规范规定其必须是总线式拓扑结构。在实际布线中,通常采用手牵手菊花链布线方式。例如,Slave 1/2/3 三台 RS-485 设备,Slave1 的 485+ 接入 Slave2 的 485+ 端口,Slave2 的 485+ 再连接到 Slave3 的 485+ 端口,以此类推,485- 的接线方式和 485+ 一样。
Modbus TCP
相对于使用串行链路的 Modbus RTU,Modbus TCP 基于以太网通信,因此其网络拓扑结构更为灵活。从串行链路上一主多从的构造,演变为多客户端/多服务器端的构造模型。
使用 Modbus TCP,主站设备(客户端)可以通过 IP 地址找到 Modbus 从设备(服务器),并通过 Modbus 网关连接到另一个 Modbus RTU 网络。