APP下载

OPC数据访问服务器研究与应用

2015-11-09田茂琴

现代电子技术 2015年21期

田茂琴

摘 要: 针对OPC技术在国内的应用现状,以OPC数据的存取规范为依据,利用国产MultiBus?RTU系列模块基于ModbusTCP协议对OPC数据访问服务器进行开发,设计采用OPCMaster公司的OPC开发工具OM_OPCSvr.dll实现OPC数据传输服务器的开发,通过以太网方式,在Modbus设备和OPC客户端之间提供数据交换通道。通过对OPC数据访问服务器结构和操作流程的设计,构建了服务器的功能框架。基于Modbus TCP OPC服务器和Windows平台,通过对服务器进行初始化,对通信驱动模块和用户界面进行规划,进而对OPC数据访问服务器进行了详细的实现。通过进一步的OPC服务器测试发现,该服务器具有可靠的稳定性,能切实地节约成本,减少通信驱动数量,并缩短开发周期。

关键词: OPC服务器; COM/DCOM; 数据访问; Modbus TCP

中图分类号: TN911?34; TP273.5 文献标识码: A 文章编号: 1004?373X(2015)21?0072?04

Research and application of OPC data access server

TIAN Maoqin

(Tongren Radio & TV University, Tongren 554300, China)

Abstract: Aiming at the domestic application status of OPC technology, and taking the access specification of OPC data as the basis, the OPC data access server was developed by using domestic MultiBus?RTU series module based on ModbusTCP protocol. The OPC development tool OM_OPCSvr.dll created by OPCMaster company is adopted to achieve the development of OPC data access server. The exchange channels of data are provided between the Modbus device and the OPC client with the Ethernet. The function framework of the server was constructed by designing the structure and operation process of OPC data access server. Based on the Modbus TCP OPC server and the Windows platform, the communication driver module and user interface were planned by initializing the server, and then the OPC data access server was realized. The further test to the OPC server found that the server has reliable stability, and can save the cost effectively, reduce the number of communication driver, and shorten the development cycle.

Keywords: OPC server; COM/DCOM; data access; Modbus TCP

0 引 言

计算机技术的不断发展,使得应用于工业控制领域的软件与硬件设备种类越来越丰富[1],由于没有统一的通信接口标准,难以方便高效地实现来自不同厂商的应用程序与硬件设备之间的数据通信,因此严重制约了工控领域的拓展。OPC技术的出现使来自不同数据源的数据与运行在各种平台上的应用软件能够顺利地集成在一起[2]。目前,OPC技术已经成为工业控制中系统集成与数据交换的重要工具。近年来国内不少高等院校、研究院所和软硬件开发商都对OPC技术进行了研究和开发应用。为了进一步地节约成本,减少通信驱动数量,缩短开发周期,针对嵌入式多总线RTU硬件产品开发基于Modbus TCP通信协议的OPC数据访问服务器变得非常具有现实意义。

1 OPC数据访问规范

OPC技术是COM在工业领域的一种特殊应用,针对敏感度高的实时数据,可以将其从实时数据中分离。从COM的角度分析,OPC规范实质就是定义了一些用于实时数据存取、事件报警处理、历史数据存取等的COM对象和接口[3]。

基于OPC软总线的过程控制系统(PCS)的基本架构中,整个PCS以OPC DA服务器为中心,以从OPC DA服务器上获得的实时数据为基础,OPC AE服务器根据用户的设置进行相关逻辑分析和处理,可以产生相应的事件/报警消息发送到客户端;OPC HAD服务器将按照用户设置要求进行保存历史数据,方便客户端用户进行查询和分析统计过程数据在过去的时间段内的变化情况;OPC DX服务器根据实际现场需要可以将多个OPC DA服务器的数据联系起来,便于多个OPC DA服务器之间进行数据交换[4];OPC XML DA服务器通过将实时数据转换成XML文本,以提供将过程数据发布到互联网的功能,实现更大范围内的数据共享;OPC Security服务器提供了访问数据的安全访问机制,可以对整个PCS中的数据进行安全保护。

OPC数据访问规范是OPC协议族中的核心和基础,其他所有的OPC相关规范都是以OPC DA规范为基础进行扩展制定的。本文主要参照OPC Data Access Specification Version 3.0研究和应用OPC DA服务器。

只要遵循OPC规范实现OPC接口的客户应用端,即可无缝连接OPC服务器进行数据通信,一个客户应用端可以同时访问多个OPC服务器,而一个OPC服务器也可以被多个OPC客户应用端访问,根据OPC服务器提供的功能可以知道OPC服务器内部结构大致分为3部分:设备驱动模块、数据管理模块和数据调度与分发模块。如图1所示。

OPC服务器支持多客户并发访问及数据存取请求,数据调度与分发模块对客户的访问及数据存取请求进行协调和管理,然后将具体数据存取请求交给数据管理模块,数据管理模块将数据存取请求传递给设备驱动模块,设备驱动模块将数据存取请求转换为读写设备消息,对设备进行具体的读写操作,操作完成后将数据返回给数据管理模块,数据管理模块再更新数据缓冲区中对应的数据,并将更新的数据返回给各个请求数据的客户端。

OPC数据访问规范中定义了OPC客户端和服务器如何交互数据和数据存储结构[5],OPC服务器中的数据调度与分发模块负责与OPC客户端进行数据交互,其模块实现必须与OPC规范规定保持一致。数据管理模块与设备驱动模块由于针对不同的设备,读写数据方式和获取的数据就不同,因此需要根据具体需求开发实现。因此OPC服务器的具体实现会由于不同的应用而有所不同。

通常的数据采集应用的是主从式的应用结构,客户周期性地查询服务器的数据。在这种应用模式下,增加了系统的额外开销,而且效率比较低。基于COM的OPC支持的双向通信机制,具有事件驱动功能,当OPC服务器的数据发生变化时,能够自动通知OPC客户,客户可以从周期性的轮询中脱离出来,从而大大提高了效率,降低了系统负荷。OPC规范主要定义了3种数据访问方式:同步通信、异步通信和数据订阅。

2 OPC服务器设计

由于COM规范一般以C++语言描述,所以通常采用VC++开发OPC数据访问服务器[6]。在本文中,基于Windows的Dot NET平台,利用OPC接口动态库来开发OPC服务器。本文实现的OPC数据访问服务器要完成对ModbusTCP设备的数据采集功能,提供OPC数据存取规定的定制接口,同时通过数据存取区将设备数据与OPC接口联系起来。如图2所示的OPC数据存取服务器总体结构,各个功能模块之间相对独立又相互协作,形成了一个有机整体。

本文设计的OPC数据存取服务器属于进程外服务器,拥有独立的进程空间,与客户进行数据交换时稳定性高,同时提供了用户友好的人机界面,便于用户的自定义组态操作。OPC对象接口模块通过数据存储区间接与设备驱动相互联系,以获取数据存储区内的数据或直接访问设备获取过程数据。OPC客户程序通过Group对象访问数据存储区中的数据项,设备通信驱动周期性将最新的设备过程数据写入到数据存储区内。客户通过Server对象的IOPCBrowse接口可以浏览数据存储区内所有数据项Item对象的相关属性。

针对某国产的硬件设备多总线RTU,硬件设备通信模块实现了标准的MdbusTCP通信协议,可以和实现标准的ModbusTCP设备无缝互联通信,简单方便地获取硬件设备的过程数据。在实际应用中,此处采用了OPCMaster的OM_OPCSvr.dll OPC接口动态库工具来实现OPC接口模块部分,ModbusTCP是Modbus协议的网络协议,TCP端口号为502。ModbusTCP在ModbusRTU协议前,增加了6个字节的协议头MBAP[7],同时去掉了2 B的CRC16校验和协议格式。通信驱动模块主要使用6种标准的Modbus功能码。当主设备向从机发送请求,希望获取一个正常响应,但是可能由于各种原因,从机返回一个异常消息帧。因此需要通过异常码来标识发生了什么错误导致了异常响应。本Modbus TCP协议通信驱动模块属Modbus Slave,需要对设备返回的Modbus TCP消息帧进行MBAP验证、请求数据获取。图3是对设备进行读取数据的流程。

为了方便用户操作和使用OPC服务器,提高人机交互性,本文设计的OPC服务器设计了类Windows窗口的用户界面。通过将属性列表来对数据项进行组织和标识,通过属性设置对话框将数据项与硬件设备的数据绑定,并将数据存储区与硬件通信接口联系起来,进而可以实现用户自定义组态功能。另外还需要将数据项的属性和设备设置参数保存到配置文件中,便于下次在OPC服务器程序启动运行时,可以自动打开组态配置文件完成初始设置。

3 OPC服务器的实现

本文设计的基于Modbus TCP OPC服务器基于Windows平台开发,开发环境详细列表见表1和图4。

OPC服务器程序的基础代码创建完成后,通过调用Init OPCSvr(byte *pSvrCLSID, bool bExeSvr,DWord dwCoInit)对OPC服务器的CLSID、程序应用模型和初始化COM库的线程模式进行初始化设置。将数据项用树形结构标识,然后设计数据项和硬件设备的数据绑定设置界面以及实时显示数据项列表界面,并将数据存储区与硬件通信接口联系起来,实现用户自定义组态功能。设计用户界面主要包括6部分,分别是:菜单栏、工具栏、设备树形列表、标签列表、信息列表和状态栏。借助Dot Net4.0平台的Socket类定义封装了一个TcpSocket TCP通信类,通过此类可以完成TCP连接断开、发送接收数据和发现断开自动重连功能。

在OPC服务器程序关闭时需要将数据项的属性以及硬件设备设置的参数作为组态配置文件保存起来,便于下次OPC服务器运行时能自动调入组态配置文件,自动完成初始设置。利用DotNet 4.0的序列化和反序列化技术,可以将数据对象序列化到文件中和将文件反序列化到数据对象[8]。

经过用户自定义组态配置好数据点后,可以运行OPC服务器开始轮询设备数据,将实时获取的数据更新到数据缓冲区内。根据OPC服务器数据结构关系,每一个设备对应一个轮询线程,这样OPC服务器可以对多个设备独立地读写设备数据。其中轮询线程是由Back Groud Monitor类实现的。

4 OPC服务器的测试结果与分析

如表2所示,OPC服务器的测试环境包括软件环境和硬件环境。图5显示了测试环境的结构图,在一台普通操作系统为Windosw XP的普通PC机上依次安装SIEMENS WinCC6.2,KEPware测试客户端和Modbus Slave数据模拟器。通过普通双绞线将PC与交换机连接,一台MultiBus?RTU网口直接连接交换机,另一台MultiBus?RTU的RS 485口通过MultiBus网关与交换机连接。

4.1 OPC服务器功能测试

打开KEPware测试客户端,选中“Lensys.Modbus.TCP.DA.3”节点,可建立与OPC服务器的通信连接。在Lensys.Modbus. TCP.DA.3”节点中可查看OPC服务器的属性,打开WinCC项目管理器WinCC Exploer,点击新建菜单,创建一个单用户测试项目,项目名称为OPCServerTest。创建一个如图6所示的OPC服务器测试界面。其中MultiBus?RTU1#直接连接交换机,MultiBus?RTU 2#通过MultiBus网关间接连接交换机。分别获取MultiBus?RTU的4类共8个数据,具体含义参见表3。

4.2 OPC服务器性能测试

OPC服务器的性能测试需要大量数据源才能进行,由于MultiBus?RTU可以提供的数据量有限,因此利用Modbus Slave提供数据源。通过Modbus Slave,可以模拟一个通信协议为Modbus的设备,这个设备可以包含无限量的数据。打开一个Modbus Slaves进程,配置设备ID为1,通信参数Port为502,IP默认为本机地址。然后依次配置如表4所示的数据点。

按照上述配置,依次打开10个Modbus Slave进程,此时有了10个模拟设备,每个模拟设备包括4类数据,每类数据数量为25个,即共计1 000个数据点。

经过上述Modbus数据源配置、OPC服务器配置,首先将10个模拟设备(Modbus Slave)进行本地TCP绑定,作为数据提供源;其次点击OPC服务器界面工具栏中的“启动服务器”按钮,则OPC服务器开始存取10个模拟设备数据,此时观察OPC服务器下侧的信息列表,是否有警告或错误信息,打开Windows任务管理器,观察OPC服务器进程的CPU和内存消耗。经过1天时间的测试,无任何警告或错误信息,OPC服务器进程的CPU占用保持在3%左右,内存消耗保持在8 MB左右。

5 结 论

本文基于Modbus TCP协议的OPC数据存取服务,在对市场进行深入调研的基础上,结合国产嵌入式产品工程应用的现状,开发了OPC数据存取服务器。通过OPC数据存取服务器实时获取设备过程数据,利用国内外现有SCADA的OPC客户端接口,轻松地实现了与某国产MultiBus?RTU互联通信。不仅利用了OPC的技术优势,如访问速度和稳定性,还节约了成本,减少了通信驱动数量。鉴于Windows在工控领域的成熟度和稳定性,以及Dot Net FrameWork的跨平台性,基于Dot Net4.0平台封装OPC接口,通过编程实现了Modbus TCP通信协议以及良好的人机交互界面,并通过了功能测试和性能测试。

参考文献

[1] 李绍成,马连祥.面向PLC的OPC服务器设计与开发[J].制造业自动化,2011,33(12):19?21.

[2] 望荆沙.基于OPC DA 3.0的OPC服务器与客户端的研究与实现[D].西安:西安电子科技大学,2012.

[3] 孙绪洁,梁岚珍.基于TLSvrRDK.dll技术的电厂燃煤数据OPC服务器研究[J].化工自动化及仪表,2011(12):1461?1465.

[4] 刘瑞祥,倪福生,顾明.基于VC++和OPC的冗余监控程序设计[J].机电工程,2012,31(8):1094?1097.

[5] 杨之乐,郑学理,苏伟,等.工业无线网络测控系统OPC数据服务器的设计实现[J].计算机测量与控制,2013,21(4):865?869.

[6] 吕亚锋,成立存.基于Modbus TCP/IP协议的海上油田发电机组网络监控系统[J].北京联合大学学报:自然科学版,2014,28(3):389?393.

[7] 黄礼超,巫茜.基于OPC的工控系统软件集成[J].重庆理工大学学报:自然科学版,2012(3):109?113.

[8] 张立华,张文仲,王钊,等.基于OPC技术的多平台数据共享技术在选煤厂中的应用[J].电子技术,2012(10):57?59.