Modbus
Modbus 协议用于建立设备之间的客户端-服务器通信。 协议完全开放,简单易用且成本低廉,从 1979 年推出至今, 已成为事实上的标准,是工业制造环境中最广泛使用的网络协议。 Modbus 协议分为 ASCII、RTU 和 TCP 三种类型, Modbus TCP 适用于以太网通信, Modbus RTU 常用于串行通信(RS-232/RS-485), Modbus ASCII 因传输效率较低已淘汰。
网络接驳
采用 Modbus TCP 协议的设备可通过以太网接口(RJ45)接驳网络; 采用 Modbus RTU 协议的设备通常仅具有串行接口(RS-232/RS-485), 须通过串行网关转接到以太网。
由于采用 Modbus 协议通信的设备受其连接模式所限, 只能在局域网中通信, 无法直接与云端服务器通信,因此,若要与云端服务器通信, 则需要通过 VPN 或通信换向技术实现。
以太网直连
采用 Modbus TCP 协议的设备通常具有网络接口(RJ45),可直接接驳到局域网中。 设备须配置规划的网络地址和端口以及设备地址标识, 有关设备网络参数设置的更多信息,请查阅设备厂商提供的技术手册。
设备地址标识的范围为 0 ~ 255, 0 为广播地址,1 ~ 247 为从站地址,248 ~ 255 保留, 主要用于在串行链路中作为设备地址,用以识别多个串接设备。 对于独立运行并采用 Modbus TCP 协议通信的设备, 已不存在串接的多个设备,但仍需准确设定此识别号。
串行链路
采用 Modbus RTU 协议的设备通过串行链路(RS-232/RS-485)实现通信, 由于串行链路无法直接与以太网兼容, 接入以太网时须通过专用的串行链路网关设备,将其转接入以太网。
串行网关同时提供以太网接口(RJ45)和串行接口(RS-232/RS-485), 以太网接口用于接驳局域网,串行接口用于接驳设备。 网关的以太网接口通常可提供 Modbus RTU 协议透传模式以及 Modbus TCP 转换模式。 网关的串行接口(RS-232/RS-485)须设定正确的串行链路参数: 波特率、数据位、停止位和校验位,方能与设备通信。 有关网关参数设置的更多信息, 请查阅厂商提供的技术手册。
网关选型: 串行网关应支持数据缓存功能, 以协调以太网和串行链路之间速度差。 以太网理论速度 100 Mbps (12.2 MByte/s), RS-232/RS-485 在常用 9600 波特率时理论速度 9.6 Kbps (14.4 KByte/s)。
RS-232
采用 RS-232 链路的设备在转接以太网时, 设备的 RS-232 接口必须处于空闲状态(未被占用), 因为 RS-232 链路属于点对点接口,不能实现串接或共享。 如果接口已被占用,则无法转接。
注意识别: 某些设备的 RS-232 接口,外形虽然为标准的D型接口, 但是实际上属于 RS-485 链路。 请查阅设备厂商提供的技术手册进行确认。
无效方案: 采用 数据监听 或 接口分支 等方案均无法获得可用效果, 数据监听 方案无法获取原接设备未请求的数据; 接口分支 方案会导致原接设备的通信冲突; 这些方案均已在实践中被弃用。
RS-485
采用 RS-485 链路的设备,通常支持多设备串接(俗称:手牵手模式), 即将多个采用 RS-485 链路的设备串接到同一根双绞线(总线), 各个设备通过地址标识进行区分,总线上的设备地址不能相同,必须确保唯一性。 网关为主站,以相同的方式接入 RS-485 总线, 主站没有地址,其余设备为从站。
设备地址标识的范围为 0 ~ 255, 0 为广播地址,1 ~ 247 为从站地址,248 ~ 255 保留, 因此理论上 RS-485 总线可接驳 247 个设备。 但受链路传输模式和速度限制, 设备串接越多其通信效率越低, 实践中单总线不应超过 32 个设备。
串接弊端: 当多个设备采用 RS-485 总线通过“手牵手”模式串接时, 如果其中某个设备因关机或故障离线, 将导致整个总线通信效率严重降低。 原因在于主从通信模式要求所有指令均须排队执行, 当请求已离线设备时其它设备均需要等待超时之后才能继续通信。
良好连接: RS-485 总线应采用屏蔽双绞线,并且将屏蔽层良好接地; 设备间线缆尽量短,拓扑为无分支直线; 总线两端并接 120Ω 终端电阻,防止信号反射。
通信配置
MODBUS_TCP_SLAVEJOYZL SCADA 作为从端(SLAVE)主动发起连接到设备, 设备由以太网接口(RJ45)连接到网络, 设备通信参数按如下方式进行设置。
- 驱动:MODBUS_TCP_SLAVE
- 接点:设备地址和端口(IP:PORT),默认端口 502,例如 192.168.1.2:502
- 地址:设备地址识别号,范围 1 ~ 247
JOYZL SCADA 作为从端(SLAVE)主动发起连接到网关, 网关通过串行链路(RS-232/RS-485)连接设备, 设备通信参数按如下方式进行设置。
- 驱动:MODBUS_RTU_SLAVE
- 接点:网关地址和端口(IP:PORT),例如 192.168.1.2:502
- 地址:设备地址识别号,范围 1 ~ 247
单个目标网络地址(IP:PORT)如果串接了多个设备,例如通过网关转接的 RS-485 总线, 应在 JOYZL SCADA 中创建多个通信设备(Device),并且接点(Point)相同, 由地址(设备地址识别号)进行区分。
数据配置
Modbus 采用地址标识寄存器,规划的寻址范围为 0 ~ 65535。 寄存器地址按用途划分为四个区间,从 0 开始寻址。
- 00000 ~ 09999 数字量输出(DO),数据类型只能为布尔(Boolean);
- 10000 ~ 19999 数字量输入(DI),数据类型只能为布尔(Boolean);
- 20000 ~ 29999 保留,用户不可读写;
- 30000 ~ 39999 输入寄存器(AI),每地址两个字节,数据类型由设备决定;
- 40000 ~ 49999 保持寄存器(HR),每地址两个字节,数据类型由设备决定。
JOYZL SCADA 属性代码(Code)格式为:
REGISTER.[BIT]
REGISTER 为寄存器地址,采用十进制表示, 第一位数值为寻址区间,必须完整指定五位数字, 即便为零也不可省略,例如 00000 。
BIT 为可选字段,表示字节位,采用十进制表示, 有效范围为 00 ~ 15,必须完整指定两位数字 数据类型固定为布尔型(Boolean); 仅能用于输入寄存器和保持寄存器,未按字节位读取数据时,此字段可省略。
Modbus 数字(开关)量输入和输出的寄存器地址区固定为布尔型数据(False/True); 输入和保持寄存器对使用的数据类型没有严格限制, 数据类型由各设备厂商自行定义。
寄存器数据含义: 有关设备寄存器数据的具体含义,请查阅设备厂商提供的技术手册。
Modbus 采用指针标识队列(FIFO Queue),规划的指针范围为 0 ~ 9999。 队列用于存储单个参数的连续时序值, 从 0 开始寻址,数据类型由设备决定。
JOYZL SCADA 属性代码(Code)格式为:
Q(POINT)
POINT 为队列指针,采用十进制表示, 首字母 'Q' 表示队列,后跟四位数字, 必须完整指定四位数字,即便为零也不可省略, 例如 Q0000 。
队列数据含义: 有关设备队列数据的具体含义,请查阅设备厂商提供的技术手册。
JOYZL SCADA 属性支持的数据类型请参考 数据类型表 。
标准规范
Modbus 控制指令
- 读线圈
- 读离散量输入
- 读保持寄存器
- 读输入寄存器
- 写单个线圈
- 写单个寄存器
- 读异常状态(仅用于串行链路)
- 诊断(仅用于串行链路)
- 获取通信事件计数器(仅用于串行链路)
- 获取通信事件计记录(仅用于串行链路)
- 写多个线圈
- 写多个寄存器
- 报告从站地址(仅用于串行链路)
- 读文件记录
- 写文件记录
- 屏蔽写寄存器
- 读/写多个寄存器
- 读FIFO队列
- 封装接口传输
不支持的指令: JOYZL SCADA 未提供对 Modbus 规范中的 封装接口传输指令(43) 的支持, 包括 CANopen(MEI 13) 和 读取设备信息(MEI 14) 以及其它扩展的 MEI 指令。
遵循和参考的标准或规范:
GB/T 19582—2008 基于Modbus协议的工业自动化网络规范
GB/T 19582.1—2008 基于Modbus协议的工业自动化网络规范 第1部分:Modbus应用协议
GB/T 19582.2—2008 基于Modbus协议的工业自动化网络规范 第2部分:Modbus协议在串行链路上的实现指南
GB/T 19582.3—2008 基于Modbus协议的工业自动化网络规范 第3部分:Modbus协议在TCP/IP上的实现指南
ANSI EIA/TIA-485-A-1998 Electrical Characteristics of Generators and Receivers for Use in Balanced Digital Multipoint Systems
ANSI EIA/TIA-232-E-1997 Interface Between Data Terminal Equipment and Data Circuit-Termination Equipment Employing Serial Binary Data Interchange
Modbus.org Modbus application protocol specification