OPC客户端订阅式数据采集的实现和研究

2012-04-16 02:37
电气传动自动化 2012年4期
关键词:接收器调用客户端

肖 俊

(武汉大学 自动化系,湖北 武汉 430072)

1 引言

随着工业控制过程的复杂性和集成性的提高,工业自动化系统也变得更复杂,系统的集成度也越来越高。而传统控制系统中不同设备之间的通信成为急需解决的问题。由于各厂商之间的通信协议不一致,不同厂商生产的设备之间通信往往需要专门的软硬件设备或者根本就无法通信。OPC技术就是为了解决这个问题而产生的。

OPC(OLE for Process Control,过程控制对象连接与嵌入技术)是OPC基金会组织推广的工业控制和生产自动化领域中的硬件和软件之间的标准接口[1]。它是Windows平台下的,工业应用程序之间的一种高效通信技术规范。它以组件对象模型(COM/DCOM/COM+)为基础,采用客户端/服务器模式。OPC定义了一套标准的COM接口,允许各种不同设备之间以相同的方式进行通信。这极大地改善了传统的控制系统中各设备之间通信以及硬件升级等带来的各种问题。

2 OPC简介

OPC对于不同的工业用途有不同的规范。目前已经推出的OPC规范有OPC数据存取规范、OPC报警与事件规范、OPC历史数据存取规范、OPC安全性规范、OPC服务器数据交换规范等一系列规范,以及目前仍处于制定中的OPC Common IO(OPC公共输入输出接口)等规范。

OPC规范是基于COM技术的。其体系结构是客户端—服务器体系。其体系图如图1所示。

从图1中可以看出OPC不仅提供了C/C++语言编写用的定制接口,也提供了自动化接口,方便VB、Java、Delphi等语言的编写,极大提高了各种语言的支持。

图1 OPC体系结构

OPC对象有三种:OPC服务器对象、OPC组对象、OPC项对象[2]。OPC项对象是三种对象中最小的单位。一个项对象就是一个对应的数据。而OPC组对象是管理项集合的对象,对组对象进行添加、删除项等相关操作。OPC服务器对象包含所有的组对象,对外暴露了一些简单的接口。这些接口可以客户端连接然后再对组对象进行操作。OPC服务器可以和任何遵循OPC协议的客户端进行通信。

3 OPC数据存取方式

OPC数据存取规范着重于对现场设备的在线数据进行存取。每个OPC客户端可以连接到一个或多个不同厂商提供的OPC服务器。多个OPC服务器也可以和一个OPC客户端进行通信。

在OPC规范中,OPC服务器与OPC客户端的数据存取有三种方式:同步、异步、订阅[2][3]。此三种方式都可进行客户端读取数据。而客户端向服务器写数据只有两种方式:同步写和异步写。

同步数据存取是指,客户端首先向OPC服务器提出请求,OPC服务器将客户端要求的数据作为方法的参数返回给OPC客户端,OPC客户端在数据被返回前必须处于等待状态。这种方式比较简单,适用于数据量少的情况。若数据量增多,效率会大幅下降。如图2所示为同步式数据访问。

图2 同步式数据访问

异步访问方式则不需要等待,客户端向服务器提出请求后,OPC服务器几乎立即将方法返回,客户端随后进行其他处理。当OPC服务器完成数据存取时,在客户端产生一个回调,在回调信息中指明数据。异步式数据存取比同步数据存取效率高。最大程度节省了CPU和网络资源。如图3所示为异步式数据存取。

图3 异步式数据存取

订阅式数据采集与以上两种方式不同。如图4所示为订阅式数据采集。这种方式下,OPC客户端并不需要向服务器提出请求。而是服务器周期性地扫描缓冲区的数据。如果数据发生变化或者变化超过一定范围,就通知客户端并发送数据。订阅式数据采集实质上是异步数据存取方式的一种。相比于同步数据存取和异步数据存取,订阅式数据采集方式可以有效降低客户端访问服务器的次数,并且最大程度避免数据量大时网络阻塞的情况。但是这种方式也有缺点,即订阅式数据采集只能获得数据而不能向服务器写数据。若要向服务器写数据则必须采用同步数据存取或异步数据存取。不过,现在的工业控制系统中,需要监测的数据远比需要调节的参数要多。因此订阅式数据采集仍有良好的优势。

图4 订阅式数据采集

4 订阅式数据采集

在OPC的集中数据存取方式中,单纯的同步读写和异步读写都是非常容易做到的,在文献中都做了明确的说明。而OPC订阅式数据采集由于涉及到COM连接点的知识,这种方式的实现则较为复杂。OPC订阅式数据采集在不同的OPC规范版本中有轻微改动。OPC1.0规范中使用COM的通报连接机制,在OPC2.0规范中又增加了对连接点的支持[1][4]。采用订阅式数据采集,需通过回调由服务器通知客户端。这样,客户端程序设计接收器对象。OPC2.0规范支持从IadviseSink接口以及IOPCDataCallback接口派生的接收器。OPC2.0规范中增加的IOPCDataCallback比前一个版本功能更加强大且使用更方便。在这里只对从IOPCDataCallback接口派生的接收器进行论述。

接收器的设计涉及到COM编程的相关知识,在这里可以参考文献[5]。

接收器设计的关键代码如下:

上述接口申明均可在OPC基金会规范中找到。OPCCallback 中要实现 OnDataChange、On-ReadComplete、OnWriteComplete 以 及 OnCancel-Complete函数。

OPC客户端利用订阅方式读取数据的步骤如下。由于订阅方式读写数据实质上是异步读写的一种特殊形式,所以在下面的步骤中加入了异步读写的过程。在文献[2][4]中已经详细说明了如何创建OPC服务器对象并添加组等一系列基本操作。这里不再赘述,假设客户端已经得到了指向OPC服务器组对象Iunknown接口的指针。

(1)通过调用QueryInterface获取Iconnection-PointerContainer接口指针。

(2)调用 IconnectionPointerContainer接口的FindConnectionPoint函数获取IconnectionPoint接口指针。

(3)调用IconnectionPoint接口的Advise方法将接收器连接到OPC服务器组对象,并将客户端的IOPCCallback接口指针传递给服务器。调用组对象的IOPCGroupStateMgt接口的SetSate方法设置刷新速率。

(4)调用IOPCAsyncIO2接口的Read函数进行异步读数据。

(5)OPC服务器按照设定好的刷新速率从数据源读取数据。若数据发生变化,则利用On-DataChange函数将数据发送给客户端。

(6)客户端调用IOPCAsyncIO2接口的Write函数进行异步写数据。

(7)异步读写及订阅式读取急速,调用Unadvised断开连接。然后逐一释放各接口。

5 结论

OPC在工业自动控制领域已经得到了广泛的应用。在PLC、工业网络、SCADA等系统中随处可见。它利用了成熟的计算机技术解决了控制系统中“信息孤岛”的问题,让各个厂家的设备之间可以进行稳定快速开放的数据交换。对于OPC技术的使用,应根据控制系统的详细要求选用OPC技术具体实现的方式,以达到最好的资源利用和控制效果。

[1]OPC FOUNDATION.Data Access Custom Interface Specification Version 2.05[M].2001.

[2]郑 立.OPC应用程序入门[M].2002

[3]乔加新.OPC客户端与OPC服务器的交互方式的研究[J].信息技术,2005,(8).

[4]蔡祥云等.OPC规范及其开发应用[J].昆明理工大学学报,2001,27(3).

[5]潘爱民.COM原理与应用[M].北京:清华大学出版社,1999.

猜你喜欢
接收器调用客户端
核电项目物项调用管理的应用研究
如何看待传统媒体新闻客户端的“断舍离”?
LabWindows/CVI下基于ActiveX技术的Excel调用
JXG-50S型相敏轨道电路接收器自动测试台
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
大枢纽 云平台 客户端——中央人民广播电台的探索之路
基于系统调用的恶意软件检测技术研究
新型二取二结构的25Hz微电子相敏接收器数据处理方法研究
IDT推出超紧凑型无线电源接收器,可节省70%板面积