当前位置:首页 期刊杂志

一种支持ModbusTCP协议的OPC UA服务器中间件

时间:2024-07-28

石春竹,柴处处,兰培霖,魏利卓,王 盈

(中国电子信息产业集团有限公司第六研究所,北京 100083)

0 引言

鉴于制造业在推动贸易增长、提高研发创新水平以及促进就业等方面起着重要作用,世界上许多国家提出了制造业国家战略,中国也出台了《中国制造2025》,将智能制造作为两化深度融合的主攻方向[1]。国家政策大力支撑智能制造,企业纷纷进入传统制造业向智能制造转型升级的过渡中,但由于我国制造业相较发达国家起步晚,信息化、自动化程度不高,在向智能制造转型升级时,存在着底层数据采集困难、不同信息系统间数据不能交互等问题[2]。高质、高效的数据流通成为迫切需求。

OPC UA又称为OPC统一架构,它是一套集信息模型定义、服务集与通信标准为一体的标准化技术框架,既能为分布式系统之间进行信息交换,也能描述一个系统和现有信息,为应用程序之间提供了互操作的、平台独立的、高性能的、可拓展的、安全和可靠的通信[3],利用OPC UA技术,可解决系统间数据交互难问题。凭借其架构的先进性,OPC UA已成为工业4.0在通信层实施方面唯一推荐的技术。目前许多厂家的设备和工业应用平台都开放了OPC UA接口,可以说,未来的工业物联网中,OPC UA会是主流的通信技术。但是,目前工业现场已有设备有些支持OPC UA,有些不支持OPC UA,这样在利用OPC UA技术作为工业现场主要通信技术时,需对不支持OPC UA的设备设计额外的通信接口。本文研发了一种通信中间件,采集底层设备数据后,将数据组态到OPC UA地址空间中,向外提供数据访问服务,这可以使不支持OPC UA的设备也能够通过OPC UA技术与外界进行通信。OPC UA服务器中间件应用环境如图1所示。各系统间(如SCADA、MES、ERP、PLM)皆可通过OPC UA技术传输数据,形成互联的网状结构,打破了原有工业现场数据层层传递的限制。

图1 利用OPC UA技术打造工业现场网状架构

1 系统整体结构

OPC UA服务器中间件从现场设备中获取状态数据,并将数据以统一形式存储在OPC UA地址空间中。此中间件对外提供数据访问服务(OPC UA与数据库),供其他客户端进行设备状态监控与其他业务逻辑。系统整体架构如图2所示。

图2 OPC UA服务器中间件架构

(1)系统通过数据访问服务(OPC UA Server)向集成了OPC UA Client的ERP、MES等系统提供数据。也可提供数据库表,其他系统利用SQL语句访问本系统数据库。

(2)系统包括现场数据采集、报文解析、数据转存、地址空间、数据显示、配置界面、报警服务、历史数据服务、日志服务、数据访问服务模块[4]。其中配置界面、现场数据采集、报文解析模块完成从底层设备中采集数据;数据转存模块将采集到的数据分别存储到数据库与地址空间中;地址空间定义了数据在OPC UA Server中对数据的组织管理形式;数据访问服务可向其他OPC UA Client提供数据。

2 配置界面

用户通过配置界面可以管理链路与设备,并设置采集变量:

(1)支持链路的创建与配置,选择计算机与设备连接的途径,如串口、以太网、OPC UA等,依据选择不同的方式进行配置。

(2)支持设备组的新建、删除、编辑,设备组中可以添加多个设备,同一设备可以在不同的设备组中。

(3)支持设备的新建、删除、编辑,包括设备名称、设备系列。

(4)支持变量组的新建、删除、编辑,变量组中可以添加多个变量,同一变量可以在不同的变量组中。

(5)采集变量的新建、删除、编辑,同时支持变量添加到变量组,并设置变量,包括变量名称、数据类型、描述,采集寄存器地址、采集数据类型、采集频率、读写类型,数据转换的设置等。

3 现场设备数据采集

3.1 设备驱动配置流程

用户在配置界面新建链路与设备时即配置了设备驱动,系统将使用用户配置的驱动进行数据采集。其流程如图3所示。

图3 设备驱动配置流程图

3.2 Modbus驱动设计类图

Modbus驱动设计类图如图4所示。其中,Connect类是连接类,负责管理Socket与设备进行连接;Disconnect类是断开连接类,负责与设备断开连接;SendAndReceive类是发送报文与接收报文类,主要负责发送与接收消息;Message类是消息类,主要负责消息结构体的定义以及组Modbus消息帧和解析Modbus消息帧。

图4 Modbus驱动设计类图

3.3 基于ModbusTCP协议的地址空间节点赋值方式

在OPC UA服务器的地址空间中创建OPC UA节点后,将与Modbus寄存器信息(寄存器类型、地址、长度)建立关联,使节点与指定寄存器绑定。接着会等待用户的节点请求。若为浏览请求,则列出当前节点的子节点。若为读请求,则依据节点对应的Modbus寄存器信息,生成Modbus读命令,即通过将节点参数传递给读操作构造函数创建对应的Message类的对象,再通过SendAndReceive()方法将报文发送给设备。若为写请求,同样依据节点对应的Modbus寄存器信息,生成Modbus写命令,即通过将节点参数传递给写操作构造函数创建对应的Message类的对象,再通过SendAndReceive()方法将报文发送给设备。随后,通过SendAndReceive()方法接收设备返回的报文。解析后得到寄存器的当前值,赋值给用户请求的指定OPC UA节点[5]。本平台地址空间多使用CacheVariable节点和CacheProperty节点。前者一般用来表示变量,后者一般用来表示属性。这两种节点均来自平台使用的SDK。整个过程流程图如图5所示。

图5 Modbus TCP协议与OPC UA传递数据流程图

4 OPC UA服务器设计要点

一个典型的OPC UA应用是由图6所示的三个软件层次组成的。整个完整的软件栈可以使用C/C++、.Net或Java实现。本文选择在Prosys OPC UA Java SDK基础上设计实现OPC UA Server。Prosys OPC UA Java SDK中封装了实现OPC UA Server的基本类与方法,减少了开发工作。

图6 OPC UA软件层次

4.1 定义一个OPC UA Server必要步骤

实现本平台的OPC UA Server中间件需要完成以下几步:

(1)实例化UaServer对象

UaServer类定义了一个完整的OPC UA服务器的实现。创建服务器:

UaServer server=new UaServer();

(2)定义程序实例证书

程序实例证书是必须定义的,用来验证正在交互的其他应用程序是可相信的实例证书。

(3)定义服务器终端

服务器终端就是客户端程序能连接的连接点。每个终端都包含URL地址和安全模式。服务器定义了哪一个终端是可用的,客户端决定使用哪一个可用的终端。终端格式如下:

://:/

本中间件的OPC UA Serve的终端URL:

opc.tcp://192.168.25.104:4840/UaServer

OPC UA通用客户端可通过此URL连接至本服务器对数据进行浏览、订阅等操作。

(4)通过证明验证客户端应用程序

为了验证连接服务器的客户端应用程序,需要将一个整数验证器添加到服务器中。

(5)注册发现服务器

UA服务器能自己执行内部发现服务。所以可以使用任何客户端应用程序的发现服务器的服务来获得服务器和可到达的终端列表。

(6)初始化服务器

调用Server.init();

(7)管理地址空间

服务器最重要的一方面是地址空间,它定义了服务器的数据和怎样管理这些数据。地址空间是通过节点管理器对象来管理的,节点管理器通常用来定义OPC UA的节点。节点指地址空间的所有要素,包括对象(objects)、变量(variables)、类型(types)等。

依照系统能够采集的数据类型,在设计地址空间时,抽象出了以下几种地址空间类型节点:ChannelType(链路)、DeviceType(设备)、AnalogInputType(AI)、AnalogOutputType(AO)、DigitInputType(DI)、DigitOutputType(DO)等。下节以ChannelType、AnalogInputType为例介绍地址空间中节点类型的设计思路。

4.2 地址空间节点类型设计

4.2.1ChannelType类

ChannelType类用来在地址空间中表示“链路”类型,链路类型主要有以下几个重要属性:链路名称、驱动类型、诊断、适配器等。这些属性对应到地址空间的CacheProperty节点类型。图7为ChannelType类的成员变量。

图7 ChannelType类设计

图7中ChannelType类几个重要函数说明如下:

(1)构造函数ChannelType:可用节点管理与名称构造一个ChannelType类型节点。

(2)createType:将创建的ChannelType类型加入到地址空间。

(3)createMember:可为ChannelType增加属性,如驱动类型。

(4)setConfigure:可为ChannelType的驱动类型赋值。

4.2.2AnalogInputType类(AI)

AnalogInputType类用来在地址空间中标示AI(模拟量输入)采集点类型,它有如下几个重要属性:原始值、高限值、低限值、过程值、所属设备、对应寄存器地址等。图8所示为AnalogInputType类的成员变量。

图8 AnalogInputType类设计

AnalogInputType类的几个重要方法如下:

(1)构造函数:可用节点管理器构造一个AnalogInputType类型节点。

(2)createType:可将创建的AnalogInputType类型加入到地址空间中。

(3)createMember:可为AnalogInputType增加属性:原始值、过程值、高限值等。

以上是本文OPC UA Server中间件的两种典型的地址空间节点类型设计,其他如DeviceType类、AnalogOutputType类、DigitInputType类、DigitOutputType类与上述类似,不再赘述。

在为地址空间增加节点时,需实例化以上类,并添加节点引用使节点与其他节点进行关联。若节点为监测变量,当监测到值发生变化后,为节点赋新值,可调用set函数,更改对象成员变量即可。

5 结论

针对一些工业现场设备无法利用OPC UA向其他系统提供设备状态数据的问题,本文设计了一种基于OPC UA Server的中间件。此中间件利用ModbusTCP协议提取设备数据,将数据以统一格式存入OPC UA服务器地址空间中,再为OPC UA Client提供数据访问服务。这使得支持ModbusTCP协议的设备均可以传递数据给OPC UA客户端。此中间件不足之处在于目前只支持通过ModbusTCP协议从设备读取数据,今后的研究方向是为此中间件增加多种主流驱动。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!