基于国产软硬件平台的OPC UA服务器设计与实现*
2018-12-25闵晓霜
闵晓霜,杨 鑫
(中国电子信息产业集团有限公司第六研究所,北京 102209)
0 引言
在工业4.0与智能制造时代,首先需要解决的就是互联互通的问题,为了实现M2M(机器到机器)、B2M(商业系统与机器)以及B2B(商业系统之间)的协同,满足来自各个维度的数据交互需求,OPC UA成为最佳的选择[1]。OPC UA作为数据互联的标准与规范,为工业4.0时代提供底层技术支撑及解决方案。在工业控制现场,OPC UA能够有效实现嵌入式现场设备、DCS、PLC等设备与生产管理系统、SCADA、HMI等管理监视系统的互操作。
OPC统一架构(OPC UA)是由OPC基金会继传统OPC技术获得成功应用之后推出的新的OPC标准。传统OPC基于COM/DCOM技术,而这项基础技术不再发展并且只能支持Windows操作系统;同时,传统OPC提供的服务数据模型不统一,导致用户访问不同数据的方法不统一,不支持复杂的数据结构,且在安全方面也存在不足[2],为解决这些问题,满足时代发展需求,OPC UA得以推出并大力发展。OPC UA基于Socket传输层,采用以信息为中心的分层架构,与平台无关,能够兼容Windows、Linux等操作系统,OPC UA提供一系列通用信息模型,提供完全面向对象,同时包含元数据和对象描述的地址空间,在一个地址空间中就可访问所有对象,支持客户服务器模型、发布订阅模型,提供复杂数据规范,集成安全功能,并且OPC UA兼容传统OPC。
自OPC UA规范发布以来,很多国外知名厂商如艾默生、西门子、倍福等已经研发并推出支持OPC UA标准的产品,并得到了应用[3]。我国于2017年9月正式发布了GB/T 33863.1~.8-2017《OPC统一架构》标准,并成立了OPC中国认证测试实验室,标志着OPC UA技术正式成为我国智能制造发展的关键技术之一[4],文献[5]实现了数据管理功能,文献[6]实现了具备一定安全机制的OPC UA服务器,但二者都是基于微软平台实现的,并不能满足服务器的安全需求。
为了满足工业控制系统中核心基础设备的安全保密,本文基于国产软硬件平台设计并实现OPC UA服务器,提供数据访问服务,能够对控制设备进行安全隔离,并在PLC系统中进行测试验证,能够支持第三方客户端的数据访问,满足工业现场数据交互需求。
1 基于国产软硬件平台的OPC UA服务器设计
1.1 OPC UA服务器总体设计
本文OPC UA服务器基于国产软硬件平台,采用国产控制器,搭载麒麟操作系统,采用Qt5开发OPC UA服务器。
1.1.1OPCUA服务器模式
OPC UA服务器可以同时支持客户端-服务器模型和发布订阅模型,这两种通信机制独立于实际通信协议,如TCP和HTTPS可用于客户端-服务器模式,而UDP、AMQP和MQTT可用于发布订阅模式。
(1)客户端-服务器模式
OPC UA客户端访问OPC UA服务器的专用服务。这是一种对等的方式,提供了信息安全和确定的信息交换,对连接数量有一定限制。适合客户端个数一定,交换信息需求确定的系统。
(2)发布者-订阅者模式
OPC UA服务器通过配置信息可供任意数量的订阅者使用。这是一种广播机制,提供了一个无需信息确认的即发即弃的信息交换方式。适合多点连接且对实时性要求高的系统。
本文的OPC UA服务器使用客户端-服务器模式,通过建立TCP连接,提供安全、确定的数据交换。
1.1.2软件分层架构
OPC UA应用程序开发基于软件分层架构。OPC UA堆栈位于分层架构的底层,它采用OPC基金会定义的TCP / IP通信协议,能够实现所有的OPC UA服务呼叫,处理通信协议;在堆栈上层为OPC UA软件工具开发包(Software Development Kit,SDK),SDK的主要功能为运行OPC UA服务器的服务,包括数据访问、报警功能、信息模型建立、节点管理、订阅管理、会议管理以及身份认证管理;分层架构的最上层为OPC UA服务器应用程序。
本文的OPC UA服务器采用软件分层架构,基于C++ OPC UA服务器SDK进行开发,利用Qt的跨平台特性以及对标准C++的支持,首先将SDK移植到国产系统中,然后基于SDK进行应用功能开发。
1.2 OPC UA服务器软件设计
1.2.1功能说明
OPC UA服务器的主要功能是将控制器的数据映射到服务器地址空间中进行管理,并与控制器进行数据交互,同时,对外与支持OPC UA协议的设备(如SCADA、HMI和第三方客户端等)基于地址空间进行数据读写操作,支持启动/停止服务、配置可访问数据及访问权限、运行守护以及冗余防护等功能。
该OPC UA服务器实现的主要功能如图1所示,配置功能负责人机交互的配置及配置数据生成,服务器启动服务时根据配置数据的参数启动并执行数据访问功能,安全认证和冗余功能用于保证服务器运行过程中的通信与运行安全。
图1 OPC UA服务器功能图
(1)基于协议栈的数据访问功能
包括数据的读写、读写权限的修改、登录服务和退出登录服务。客户端通过服务器对控制器中的数据进行实时获取,并将数据映射到服务器的地址空间,客户端通过对地址空间的访问进行对数据的读写操作。在与下位机进行通信时采用一问多答、循环收包的方式。
(2)配置功能
通过配置界面对服务器地址空间的数据进行配置,以便服务器能够管理服务器中的数据。
(3)启停服务功能
服务器开启服务后,客户端能够进行相应的访问操作;停止服务后,客户端则无法继续对服务器进行访问。
(4)安全认证功能
包括身份鉴别机制、基于角色的用户授权机制以及数据传输过程的安全机制。身份鉴别机制指客户端与服务器建立连接进行数据访问时,系统对用户进行输入用户名和密码的登录身份验证。基于角色的用户授权机制指的是对工程师、管理员以及操作员等不同身份的角色,设置不同的访问权限。数据传输安全机制指的是对通信数据加密以及OPC变量表的CRC校验功能。
(5)冗余功能
在服务器启动之后,自动开启冗余守护进程机制,实时备份服务器中的数据,检测主机的运行状态,因此能够在主机无响应时启用备机功能。
1.2.2工作过程
当OPC UA服务器应用在工控系统中时,系统的工作过程如下:
(1)用户在编程组态软件中,将控制程序与OPC数据配置信息下装到控制器中,同时生成OPC数据配置文件。
(2)在服务器中可创建站,通过加载解析上述OPC数据配置文件,能够对该站的变量进行配置,将其添加到服务器的数据列表中,即加入地址空间管理,每个变量对应一个节点,可对节点的访问权限及属性进行配置。配置完成后,可启动OPC UA服务器,则服务器开始与PLC通信交互OPC数据表中的数据,同时,管理地址空间中的节点,处理来自客户端的连接以及服务请求。
(3)客户端想要访问PLC中的变量信息时,首先对服务器发送服务请求,要求建立与服务器的连接,服务器收到请求后,在其地址空间内查找对应的节点信息,服务器根据变量与节点的映射,与控制器通过私有协议进行变量读写等操作,最后在服务器接口调用请求/响应服务,给客户端返回有效信息。
上述过程的数据流图如图2所示。
图2 系统的数据流图
2 可跨平台的OPC UA服务器实现
2.1 SDK的移植
OPC UA SDK产品供应商常见的有MatrikonOPC、ProSys、Unified Automation等,在选择采购SDK时主要注意的包括SDK提供的是库还是源码、提供的功能、支持的平台以及技术支持等因素[7]。本文使用的SDK以C++源码的形式提供,提供数据访问等功能。本文首先将SDK移植到国内操作系统中,使用Qt开发环境进行编译,然后基于SDK提供的API进行应用功能开发。
SDK开发包目录结构如图3所示,主要包括:
…/OPC_UA_SDK/lib:用于存放SDK编译以后生成的库。
…/OPC_UA_SDK/Examples:包含示例程序,可基于例程进行应用开发。
图3 OPC UA软件开发包
使用Qt编译生成的库在lib目录下,应用软件直接引用生成的动态库,examples中包含示例程序,基于示例程序、调用SDK提供的API进行应用开发。
2.2 服务器应用开发
OPC UA服务器应用程序开发分为4个模块,分别为:通用功能模块Global、基础应用功能模块CommonOPCUA、配置管理模块ConfigUI、OPC UA服务器模块OPCUASvr。
(1)Global模块提供基础功能支持,与OPC UA业务无关,实现了数据类型转换、字符串转换、CRC校验算法等功能。
(2)CommonOPCUA模块实现OPC UA业务相关的通用功能,包括OPC UA服务器所需的地址空间、序列化、反序列化、变量表文件解析、对象节点的管理等。通过调用该功能接口能够实现与文件数据进行交互,加载控制器生成的服务器配置文件并进行解析,生成包含地址空间信息的二进制文件。
(3)ConfigUI模块实现服务器配置的人机交互功能,包括主界面、数据访问配置界面、添加站对话框、编辑节点属性对话框。
(4)OPCUASvr模块实现OCPUA协议栈功能,提供OPC UA服务,包括启动、停止服务、数据访问服务等,使用SDK提供的API接口,引用了SDK的动态库。
2.3 地址空间开发
地址空间的开发为OPC UA服务器应用程序开发中关键的部分,当服务器对底层PLC设备中的数据进行采集处理时,把每个PLC设备抽象为一个对象,把所要访问的数据信息,即对象中的地址空间,作为其中的一个节点,从而创建一个从节点到对象自下而上的类似文件夹结构的地址空间结构,增强了数据处理效率。
本文服务器地址空间中的数据为测量模拟数据,即通过数据访问获取的实时IO模拟量。地址空间的编码实现,首先需要在程序中定义节点管理类,用于管理整个地址空间的所有节点,并在服务器启动时申请内存空间。NodeManagerDemo的主要功能是实现服务器和PLC控制器等下位机设备的通信,完成数据的读写。NodeManagerDemoBase主要是在地址空间内部建立点表,包括定义节点的ID、节点的名称、节点类型等,方便OPC UA客户端对服务器地址空间的数据进行处理。地址空间编码实现的具体空间结构如图4和图5所示。
图4 地址空间主要类图
图5 服务器主要类图
服务器软件的主要流程图如图6和图7所示,包括服务器启动以及地址空间节点管理。
图6 服务器启动流程图
图7 节点管理流程图
3 验证
本文OPC UA服务器在PLC系统中进行验证,并采用第三方提供的标准OPC UA客户端验证OPC UA服务器功能。验证功能包括数据访问、数据读写、数据读写权限设置、安全认证。在测试过程中,用一个及多个客户端对服务器设备进行连接,最终,定义监视的变量在OPC UA客户端能够看到变量节点,并能够对变量进行读写操作。验证结果表明该OPC UA服务器满足功能和设计需求,具备在实际工业现场使用的条件。
4 结论
随着工业信息化及智能制造的发展,我国工控行业也在加强对关键基础技术的研究与应用。OPC UA作为数据互联的基础标准与规范,在工业控制系统中是一个必须掌握与深入研究的技术。本文所开发的OPC UA服务器实现了基本的数据访问、地址空间与节点管理等功能。后续将再此基础上,将OPC UA服务器移植到嵌入式操作系统中,并实现历史数据访问、报警与事件,增强安全功能设计,提供功能更加丰富、更加安全、更加通用的OPC UA产品。此外,OPC UA与其他新兴技术的结合,也是今后重要的研究方向。