摘要:VCS2是由广东肇庆维光仪表有限公司委托开发的小型DCS系统.在VCS2系统软件方面,我们使用了OPC(OLE for Process Control)技术[1].OPC是OLE在过程控制方面的应用,为工业自动化软件面向对象的开发提供一项统一的标准,目的是为工厂底层设备或者控制室数据库中的大量数据源之间的通信提供一种标准的通信机制.本文详细介绍了小型DCS系统VCS2的OPC数据访问服务器开发过程中双向通信机制的实现.
关键词:组件对象模型;OPC接口;OPC数据访问服务器
中***分类号:TP273.5 文献标识码:A文章编号:1007-9599 (2011) 10-0000-03
Implementtation of Intercommunication Mechanism for OPC Data Access Server
Huang Hai
(Zhengzhou VCOM Science&Technology Co.,Ltd,Zhengzhou450001,China)
Abstract:VCS2 was a kind of mini DCS,developed under authorization of WeiGuang Zhaoqing Instruments Company.In the software of VCS2,OPC(OLE for Process Control)technology was used.OPC is an application of OLE(Object linking and embedding)technology in process control,which supplies uniform specifications for the design of industry automation software.The aim of OPC is to provide a kind of normative communication mechanism between date resources of devices or of database in control room.This paper discusses the development process of OPC data access server in VCS2.
Keywords:Component object model;OPC interfaces;OPC data access server
一、引言
随着计算机技术、网络技术、通信技术的发展,需要一种标准的通信机制来实现工厂底层设备或者控制室数据库中的大量数据源之间的通信,于是OPC技术应运而生。每个支持OPC接口标准的硬件厂商为其设备开发一个OPC服务器,主要负责从硬件设备得到数据并暂存起来;支持OPC接口的应用程序作为OPC客户通过与OPC服务器之间的交互来读写硬件设备的信息,所以,通过OPC服务器访问过程数据,可以克服异构网络结构和接口协议的差异,上层应用可以不关心底层的硬件特性以及OPC服务器与硬件通讯细节,就可以得到过程数据。然而技术的核心是微软的COM技术,而OPC服务器中异步访问机制的实现设计到COM的深层次编程技巧。
二、数据访问机能
首先,OPC DA客户要能够连接到DA服务器上,并建立OPC组对象和OPC数据项对象,为了访问过程数据,DA需要事先指定DA服务器的名称、运行DA服务器的机器名、DA服务器上Item的定义[2]。
其次,客户通过对其建立的Group与Item进行访问实现对过程数据的访问,客户可以选择设备或数据存储区作为其访问的数据源。客户的过程数据访问包括过程数据的读、写、刷新、订阅;其中读写还分为同步读、写和异步读、写[3]。
第三,完成通知,当服务器响应客户的过程数据访问的请求,并处理完时通知客户。这种情况经常发生在过程数据的异步读写时。
除了以上三个机能是OPC DA服务器必须实现的外,还可以提供DA服务器的地址空间的浏览和停机通知,即当服务器发生异常断开与客户的连接时,向客户发出通知。
三、异步访问过程
在组对象中,我们实现了IVCS Sync IO接口和IVCSSyncIO2接口,其中IVCS Sync IO用于同步读写,其中有Read和Write方法;IVCSSyncIO2用于异步读写,其中也有Read和Write方法[3]。其中同步读写比较简单,客户程序调用方法后知道读取或写入数据后Read和Write方法才返回,而异步读写的机制则比较复杂,下面以异步读取过程为例说明,异步写入则类似:
首先DA客户要利用DA服务器的组对象CVCS Group所提供的用于双向通信的接口IVCS Connection Point Container同服务器建立联系,此过程中将客户的ICallback接口指针传递给OPC服务器,此后客户调用IVCSASyncIO2接口的Read函数,向DA服务器发出从指定的数据源异步读取Item句柄数组指定的Item的请求。服务器接收到请求后立即回答客户的请求,服务器返回给客户一个取消ID,让客户取消此操作,此函数调用完毕并返回;然后服务器读取客户请求的Item的数据信息,并通过客户传来的ICallback接口指针调用客户的ICallback:OnRead Compete把这些Item的信息返回给客户,并刷新缓冲区,此时,异步读取完毕,客户对获得的数据作进一步处理,如***3.1。
***3.1异步读取过程
由上述过程可知,异步访问的关键在于接口IVCS Connection Point Container;所以我们必须在CVCS Group类中实现接口IVCS Connection Point Container。下面说明该接口的结构及实现过程。
四、双向通信机制的实现
在一般的交互过程中,客户总是主动的,而组件则处于被动状态,VCSVR通过自身暴露的接口监听客户的请求,一旦接收到客户的请求便做出响应。然而在双向通信中,我们还需要服务器才可以发起和客户的通信,因此,因此我们在服务器的CVCS Server对象和CVCS Group对象中都实现了一个ICallback接口,组件对象通过这种出接口与客户进行通信。这个接口是在我们的组件中定义的,但VCSVR并没有实现其中的方法,所以想使用CVCS Group的客户必须实现这个接口中的方法,在VCSVR中,我们提供了一个函数Advise(),用户可以调用该函数把他们实现的ICallback接口的指针传递给CVCS Group,于是,CVCS Group就可以在适当的时候调用此接口中的方法了,可连接对象的出接口也是一个COM接口,它包含一组成员函数,每个成员函数代表了一个事件(Event)、一个通知(Notification)或一个请求(Request)。在客户程序方,需要实现我们定义的ICallback接口。
在双向通信过程中,涉及到三个既***又相关的部分:客户程序、COM对象和客户实现的ICallback[4]。这三者的交互过程如***4.1所示:
***4.1客户与CVCS Group对象的通信
从***中可以看出CVCS Group对象、客户和ICallback之间的基本关系,客户程序把ICallback接口指针通过参数传递给CVCS Group对象,CVCS Group对象记录下ICallback接口指针,以后在必要的时候通过此接口指针调用其成员函数。尽管ICallback也是一个COM对象,但由于其特殊性,它位于客户程序内部,并不需要通过COM库来创建,因此ICallback不需要用CLSID来标识,也不需要类厂,可以用new来创建。ICallback也有自己的引用计数,有自己的接口查询方法即Query Interface成员函数。CVCS Group对象通过接口IVCS Connection Point Container管理接口ICallback。在他们内部都实现了一个CVCS Connection Point的类,该类实现了IVCS Connection Point接口,客户就是调用该接口中的方法把ICallback接口指针传递给CVCS Server的。如***4.2:
***4.2用于双向通信的CVCS Server和CVCS Group的结构部分
ICallback与CVCS Group之间的通信过程:如***4.3所示。ICallback接口,它由客户对象实现,而拥有该接口的类为TCallBack。下面给出了客户如何从一个基本对象IUnknown接口指针pUnk建立连接的过程:
***4.3双向通信过程
1.客户程序调用pUnk->QueryInterface(IID-IVCSConnectionPiontContainer,&pIVCSConnectionPointContainer)获取对象CVCSServer的IVCSConnectionPointContainer接口的指针。
2.客户程序调用pIVCS ConnectionPointContainer->FindConnectionPoint(IID_ICallback,&pIVCSConnectionPoint);获得接口ICallback对应的CVCSConnectionPoint对象的IconnectionPoint接口的指针,然后调用pIVCSConnctionPointContainer->Release来释放pIVCSConnctionPointContainer。
3.客户程序创建对象TCallback:pICallback=(Icallback*)new Tcallback。返回接收器对象Tcallback的指针。
4.客户调用pIVCSConnectionPoint->Advise(pICallback,&dwCookie)把Tcallback对象连接到CVCSServer组件对象,并保存组件对象给客户返回的连接标识dwCookie。
5.CVCSServer组件对象在适当时候通过pICallback调用接口ICallback中的函数(在客户程序中实现)与客户通信。ICallback在客户中,它能方便地访问客户,因此组件对象能由pICallback访问到客户。客户需要取消连接时,调用pIVCSConnectionPoint->Unadvise(dwCookie)以断开连接,并调用pIVCSConnectionPoint->Release()释放CVCSConnectionPoint对象。
五、结论
本文详细介绍了小型DCS系统VCS2的OPC数据访问服务器开发过程中双向通信机制的实现。实践也证明,这种机制实现不仅是可行的,而且是卓有成效的。VCS2是针对流程工业中小型单元设备的过程控制而开发的,以提供控制品质为核心以工程控制为重点的完整的小型DCS,主要应用在各种中小型工厂的控制系统中。为了克服传统的方法带来诸如系统升级和移植不便的缺陷,在VCS2中我们使用了OPC技术。这种实现机制应用于广东肇庆维光仪表有限公司委托开发的小型DCS系统。
参考文献:
[1]OLE for Process Control Data Access Standard(UPDATED)Version 1.0A.OPC Foundation:1997,9
[2]Richard C.Harrison.OPC,DCOM and Security.Intellution Inc:1998,2
[3]Chisholm.OLE/OPC Memory Management White Paper Al.Intellution Inc:1998,1
[4]潘爱民.COM原理及应用[J].北京:清华大学出版社,1999
转载请注明出处学文网 » OPC数据访问服务器双向通信机制的实现