AlwaysControl Technology

← 知识库

Modbus 协议

Modbus Protocol

当前版本发布时间 ·

本文目录从现场设备取得数据用地址组织设备读写把现场通信接入 TCP/IP 网络网络通信带来的安全需求把返回数值变成设备信息让设备采用共同的数据模型把设备接入能源管理
Modbus 是一种用于设备间交换数据的应用层通信协议。它以客户端发起请求、服务器处理并响应为基本方式,规定怎样读取状态、读取数值或写入设定值,可用于串行总线及 TCP/IP 网络。[1]
Modbus 概念封面:能源管理器通过数据连接与电表、逆变器及电池控制柜交换信息。 / Modbus concept illustration: an energy manager exchanges data with a meter, inverter and battery control cabinet.

从现场设备取得数据

能源管理器通过电表了解现场的用电功率,通过电池控制器取得可用电量,再据此安排充放电。要取得这些信息,管理器与设备需要约定谁发起询问、怎样指定所需数据,以及设备怎样回答。

Modicon 于 1979 年推出的 Modbus,起初就服务于工业控制设备之间的串行通信,让控制器取得现场状态、读取测量值和写入设定值。在这套通信中,客户端发起请求,服务器处理并响应。能源管理器读取电表时,管理器充当客户端,电表充当服务器。[2][8][1]

Modbus RTU 是串行 Modbus 的一种传输模式,它把请求和响应组织成二进制报文。常见的物理接口是 RS-485,多个设备可以共享一条总线。RS-485 规定电气信号怎样传输,RTU 规定报文怎样组织和分隔,两者共同构成这条通信链路。[3]

在总线上,客户端依次向设备发出请求,被寻址的设备处理后响应。一次交换包含发送、设备处理和等待响应;遇到超时,还要按配置决定是否重试。控制器取得一轮数据所需的时间,因而取决于设备数量、报文长度、串口速率和各台设备的响应时间。[3]

用地址组织设备读写

控制器还需要告诉设备,这次请求要访问哪项数据。Modbus 把访问对象组织成位和寄存器:一个位可以表示开或关,一个寄存器包含 16 位数据。客户端用功能码指定操作,再给出地址、数量等参数,服务器据此返回数据或异常响应。[1]

访问对象数据大小客户端访问方式
线圈(Coils)1 位读、写
离散输入(Discrete Inputs)1 位只读
输入寄存器(Input Registers)16 位只读
保持寄存器(Holding Registers)16 位读、写

电表可以把功率和电量映射到相应寄存器,逆变器可以提供运行状态和输出参数。设备接口文档列出支持的对象、地址和操作,管理器按这些资料配置访问。用同一套读写规则,就能向不同设备发出请求。[1]

把现场通信接入 TCP/IP 网络

当工厂需要把现场数据交给更多计算机和管理系统时,设备通信的范围也向工厂与企业网络扩展。以太网方案逐渐成熟、实施成本下降,为现场系统接入企业内网和制造执行系统(MES)提供了条件。[7]

Modbus 随之扩展到 TCP/IP。管理器通过设备的 IP 地址找到目标,再连接其提供 Modbus 服务的 TCP 端口 502。安全规范记载,这个端口于 1996 年完成 IANA 登记;开放的 Modbus TCP/IP 规范于 1999 年形成,供开发者实现这种网络通信。[4][6][7]

Modbus TCP 保留了功能码、位和寄存器的访问方式,读取、写入和应答逻辑得以延续。报文外层则适配新的传输环境:RTU 使用串行地址、校验和帧间静默时间;Modbus TCP 在功能码与数据前增加报文头,用事务标识配对请求与响应,用长度信息确定消息边界,再通过 TCP/IP 传送。[3][4]

原有串行设备可以通过网关进入这套网络。管理器向网关发送 Modbus TCP 请求,网关再向下游串行设备发起对应交换。上层系统采用以太网,现场继续使用原有设备和线路,两部分便能共同工作。[4]

对于由一个控制器采集和控制的一组设备,只要串行线路满足所需的更新周期,就可以继续承担现场通信。需要接入上层网络时,再根据设备接口、访问需求和改造条件选择网关或直接使用 TCP 接口。

经过网关的一次采集,包含 TCP/IP 链路和下游串行交换。管理器要等网关完成相应交换,才能取得结果,采集周期仍受串行传输、设备处理和等待响应的时间影响。现场保留的串行设备,也保留了这部分通信条件。[4][3]

网络通信带来的安全需求

设备接入网络后,管理器可以通过网络发起读取或写入请求。设备处理设定值时,需要确认请求来自哪个管理器,以及它有权执行哪些操作;双方也需要保护传输中的数据,使内容保持机密和完整。这些要求把身份认证、传输保护和操作权限带入了 Modbus 接口。[6]

围绕这些要求,Modbus 增加了使用 TLS 的安全服务。IANA 于 2014 年 6 月 10 日登记安全服务 mbap-s,使用端口 802;2018 年 10 月 29 日,Modbus Organization 正式宣布发布 Modbus Security。传统 Modbus TCP 服务使用 502,安全服务通过 802 接受连接。[10][9]

管理器连接安全服务后,先与设备完成 TLS 握手、验证双方证书并建立受保护的会话,再在会话中交换原有的 Modbus TCP 报文。TLS 提供加密和完整性保护,服务器按设备或客户配置的规则,利用客户端证书携带的角色信息检查请求的操作权限。[6]

接入安全服务,需要通信双方实现相应协议,并配置证书、信任关系和授权规则。完成这些配置后,原有的寄存器读写便可在受保护的会话和约定的访问范围内进行。[6]

把返回数值变成设备信息

从串行总线、TCP/IP 到安全会话,传送的核心内容始终包括设备的位和寄存器数据。管理器取得这些数据后,还要依据设备资料把它们解释成测量值或运行状态。以读取电表有功功率为例,可以看到这一步怎样完成。[1][4][6]

假设某电表用一个保持寄存器提供有功功率,说明书规定其报文地址为 100(从 0 计数),整数的每一单位代表 0.1 W。客户端用功能码 03 从这个地址读取一个寄存器,收到整数 1250,便可按说明书换算为 125 W。这个例子中的地址、比例和数值均为教学假设。

左上方编号1为客户端,右上方编号2为电表。箭头A从1到2表示请求,箭头B从2回到1并标出返回整数1250。随后1向下连接编号3的寄存器说明表,再向右连接编号4的解释结果125。
图 1|一次读取与解释。1 为能源管理器,2 为电表;蓝色箭头 A 表示用功能码 03 从地址 100 读取一个保持寄存器,绿色箭头 B 表示电表返回整数 1250。管理器结合 3 所示的设备寄存器表,按每单位 0.1 W 的假设换算,得到 4 所示的 125 W。

作者依据请求响应与寄存器机制 [1] 自绘。地址和换算规则采用上述教学假设;图中 3 表示集成者查阅的设备寄存器说明资料。

从 1250 得到 125 W,依靠的是说明书对物理量和比例的规定。这类映射通常写在设备寄存器表中,指出每个地址对应的物理量、单位、数值类型和比例,并说明允许执行哪些读写操作。Modbus 应用规范把寄存器与设备数据之间的映射交给具体厂商和设备定义。[1]

较长的数值还需要组合多个寄存器。一个 32 位数占用两个 16 位寄存器;协议规定单个寄存器内的高字节先传,跨寄存器的数值排列则要依设备文档核对。管理器按相应顺序拼接,才能还原设备提供的数值。[1][2]

让设备采用共同的数据模型

逐台查阅和配置寄存器表,会产生一项重复工作:为不同设备解释相同的物理量。能源行业可以进一步为这些量建立共同的数据约定。SunSpec 设备信息模型就为分布式能源设备定义数据点、类型、单位、比例因子和访问属性,并规定它们怎样映射到 Modbus 寄存器。[5]

采用相应 SunSpec 模型的设备,便有了共同的数据解释依据。接入方可以按设备实际实现的模型和数据点配置采集与控制。Modbus 承担读写交换,SunSpec 补充这些交换所涉及的数据含义,两层约定一起构成设备接口。[5]

把设备接入能源管理

从 RTU 到 TCP/IP,再到安全服务,Modbus 的演进让同一套设备读写机制适应了更广的连接范围和新的安全要求。控制器继续使用位、寄存器和功能码访问设备,通信路径、访问保护和数据解释则由各层约定共同支撑。[1][3][4][6]

要让管理器根据现场用电和电池状态安排充放电,设备接入需要落实到具体的通信路径、访问权限、数据含义和可用控制功能。完成这些配置,分散在电表、电池控制器等设备中的数据和操作,才能进入同一项能源调度任务。

参考资料

Modbus 协议:从串行 RTU、TCP/IP 到 802 安全服务