OPC数据存取服务器的实现

OPC数据存取服务器的实现

ID:38266062

大小:231.19 KB

页数:4页

时间:2019-05-27

上传者:U-2494
OPC数据存取服务器的实现_第1页
OPC数据存取服务器的实现_第2页
OPC数据存取服务器的实现_第3页
OPC数据存取服务器的实现_第4页
资源描述:

《OPC数据存取服务器的实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

第15卷第2期湖南工程学院学报Vo1.15.No.22005年6月JournalofHunanInstituteofEngineeringJune.2005OPC数据存取服务器的实现X李蕾,戴瑜兴(湖南大学电气与信息工程学院,湖南长沙410082)摘要:介绍了OPC技术,重点论述了OPC服务器实现中的关键技术及难点:COM线程、OPC数据存取方法中用到的通报连接机制和可连接对象机制,以及OPC服务器中的三种对象与现场设备之间的关联.关键词:OPC服务器;OPC客户端;COM线程;通报连接机制;可连接对象机制+中图分类号:TP273.5文献标识码:A文章编号:1671-119X(2005)02-0019-04功能.OPC的数据访问方法主要有同步访问、异步0前言访问和订阅三种,同步访问与异步访问都是OPC客户应用程序对OPC服务器发出了数据请求,不同点OPC(OLEforProcessControl)是作为工业标准在于如果客户程序调用服务器端的同步访问的方定义的特殊的COM(DistributedComponentObject法,必须等到服务器端完成操作之后此方法才能返Model)接口,它是工业自动化软件之间的接口标准,回,而如果是异步访问,那么请求立即被返回,服务也是应用软件与现场设备之间的数据存取规范,对器会把这次请求操作的结果以回调的方式来告知客于每一种现场设备只需设备生产厂商开发其遵守户程序,这样就可以让客户程序在这段时间内做一OPC规范的驱动程序———OPC服务器,那么任何一些别的事情.订阅即OPC服务器监控的数据在状态个遵守OPC规范开发的访问现场数据的应用程序发生改变时主动的通知客户程序,而不用客户被动———OPC客户端都可以与任何一个OPC服务器实地、一遍一遍地去查询数据,判断其是否发生改变.现无缝连接,这样就完成了系统的集成,提高了系统OPC服务器由Server对象、Group对象、Item的开放性与互操作性.对象和针对不同现场设备的编写的I/ODLL组成.Server对象、Group对象都是标准的COM对象,1OPC技术OPC客户端通过它们提供的接口来访问现场设备的数据,使OPC客户端与OPC服务器实现无缝连OPC是基于OLE/COM/DCOM技术的,它采接成为可能.Server对象是OPC客户端与OPC服用客户/服务器模式,把开发访问接口的任务放在现务器端交互的首要对象,OPC客户端通过Server对场设备的生产厂家,以OPC服务器的形式提供给用象来组织管理Group对象,Group对象是用来组织户即OPC客户端.OPC服务器收集现场设备的数管理Item对象的.Item对象描述了服务器与现场据信息,通过标准的OPC接口提供给OPC客户端设备的连接,是对应的现场设备的属性在服务器中使用.的代表,它包含有数据项的值、值的质量标志和时间OPC规范包括OPC数据存取规范、OPC报警标签(读取数据的时间).I/ODLL实现从具体的现与事件规范、OPC历史数据存取规范、OPC安全规场设备中读取数据的功能,因为不同厂商设备的数范、OPC批处理规范、OPC服务器数据交换规范、据采集方式和现场通信网络的通信协议不同,需要OPCXML规范.其中应用的比较多的是OPC数为不同硬件设备和通信协议编写不同的I/ODLL.据存取规范,OPC数据服务器主要实现的数据采集OPC服务器的整体结构如1图所示.X收稿日期:2005-01-25作者简介:李蕾(1980-),女,硕士,研究方向:现场总线控制系统及软件开发. 20湖南工程学院学报2005年2.2OPC数据存取的方法OPC数据服务器主要实现的数据采集功能.OPC的数据访问方法主要有同步访问、异步访问和订阅三种,其中异步访问和订阅这两种数据访问方法涉及到数据的回调.在OPC数据存取规范1.0版本中,这两种方法是用通报连接机制来实现的;在OPC数据存取规范2.0版本中,这两种方法是通过可连接对象机制来实现的.目前OPC基金会已经发布了3.0版本的OPC规范,不过作者开发的OPC服务器依据的是2.0版本的OPC数据存取规范,开发的OPC服务器都要能够兼容,那么为了兼容依据图1OPC服务器的整体结构OPC规范1.0版本开发的OPC客户端程序,那么需每一个OPC服务器都需要遵循OPC规范,但要分别用这两种机制来实现异步访问和订阅这两种是OPC规范只是定义了需实现的接口,以及指定了方法.因此这两种机制在OPC服务器的实现中是非每个接口需实现哪些功能,并没有给出具体的实施常重要的.下面分别论述这两种机制并且对两种机方案,那么每一个实现者都可以有自己的实现.制做了比较.2.2.1可连接对象机制2OPC服务器实现的关键技术与难点可连接对象可以支持一个或多个出接口,它通过接口IConnectionPointContainer管理所有的出接2.1COM线程口,对于每个出接口,可连接对象又管理一个连接点因为对现场设备的读写操作是非常耗时的,因对象,每一个连接点对象实现了IConnectionPoint而实现的OPC服务器必须要采用多线程技术,这样接口,客户通过连接点对象建立接收器与可连接对就涉及到COM线程.COM有两种线程类型:套间象的连接,它们之间的关系如图2所示.线程与自由线程,可分别类比于Win32线程:UI线程与辅助线程,都是前者的主函数中有消息循环,后者的主函数中不包括消息循环.COM对象属于创建此对象的套间线程所有,并且永远运行在此线程中.因为套间线程通过消息循环调用有关的消息控制函数,那么当其他线程中的代码要调用COM对象的成员函数时,必须通过消息循环由消息分发机制保证调用到COM对象的成员函数,这样自动实现了这些调用的同步,运行在套间线程中的COM对象图2可连接对象、连接点对象以及接收器之间的关系就不需要附加同步处理,但是套间线程外的客户只能通过代理/存根模块间接调用此COM对象,这样下面以OPC组对象上的IConnection2效率就自然有所降低.PointerContainer接口来说明如何建立连接、断开连如果一个COM对象运行在一个自由线程中,接,以IOPCAsyncIO2::Read接口函数为例来说明那么同一进程中的其他线程(客户线程)就可以直接如何使用连接,为了让条理更清晰,所以省去了引用调用此COM对象了,这样此COM对象就可能同时计数的考虑:被多个客户线程访问,因此运行在自由线程中的建立连接:(1)客户端在调用CoCreateInstance启动一个COM对象的成员函数需要进行同步处理,以保证其服务器程序之后,得到服务器对象的接口指针,然后线程安全性,但因为调用不需要经过代理/存根模请求加组,再请求组对象的IConnection2块,所以效率比较高.PointerContainer接口指针pCPC;因此,OPC服务器对象的实现者可以根据自己(2)客户端调用pCPC->FindConnectionPoint的设计选用合适的线程模型. 第2期李蕾等:OPC数据存取服务器的实现21(IID-IOPCDataCallback,&pCP);如果组对象支持接收器对象和数据对象之间建立多个连接,每个连出接口IOPCDataCallback,那么就得到了连接点的接对应一种格式.IDataObject::DUnadvise终止一接口指针pCP;个连接,客户程序通过EnumConnections函数可枚(3)客户端实例化接收器对象,得到接收器对象举出数据对象的所有连接,但OPC的数据存取规范的接口指针pIOPCDataCallback,调用pCP->Ad2中没有用到这个接口函数.一旦连接建立起来,如果vise(pIOPCDataCallback,&dwCookie)建立与接收数据对象内部发生了客户连接所关心的事件,那么器的连接,客户保存dwCookie,它标识建立的这个它就调用接收器的IAdviseSink::OnDataChange函连接,服务器程序的组对象保存客户端接收器的接数,因此,客户程序的接收器对象的OnDataChange口指针pIOPCDataCallback;成员函数就对通知时间做出处理.通信过程如图3使用连接:所示.客户调用服务器程序中的IOPCAsyncIO2::Read接口函数,该接口函数在服务器程序的主线程(套间线程)中检查完参数中指定的项的服务器句柄是否有效之后,这个接口函数就该返回了,不过在返回之前,它要引发一个在Read接口函数结束后读取指定项对应的设备数据并把结果返回给客户的操作,这里就有两种方法:第一种,IOPCAsyncIO2::Read接口函数新开图3数据对象与客户程序之间的通信过程一个线程,再把组对象保管的pIOPCDataCallback下面以组对象的IDataObject接口为例来说明列集到新线程中,在新线程中再散集,这样在新线程如何建立、断开连接,以组对象的IOPCAsyncIO::中从指定项对应的数据源中读取数据以后,新线程Read接口函数为例来说明如何使用连接.调用pIOPCDataCallback->OnReadComplete()函建立连接:数,从而把操作的情况、读取的数据传递给了客户(1)客户端启动服务器进程,加组,再请求组对端.象的IDataObject接口指针pIDataObject,那么服务第二种,IOPCAsyncIO2::Read接口函数给主器端在IDataObject接口对象的构造函数中调用线程发送一个自定义的消息,在这个消息的处理函RegisterClipboardFormat注册三种数据流格式:数中主线程完成读取指定项的数据的操作,这样就OPCSTMFORMATDATA、OPCSTMFORMATDA2不用再进行列集、散集操作,不过这种情况下,服务TATIME、OPCSTMFORMATWRITECOMPLETE;器没有真的实现多线程.(2)客户端调用pIDataObject->DAdvise()函断开连接:数,如果成功便建立了连接.参数pFmt->cfFor2当不再使用此连接,客户端就可以把此连接断mat客户端感兴趣的是服务器端注册的哪一种数据开.对于OPC组对象与客户端建立的连接,应用中流格式,参数pSnk给服务器提供客户端的连接器很少出现这种情况,只有当客户端删除一个组对象对象的指针,在使用连接时用,参数pdwConnection时,才断开连接.指向的数据标识这个连接,在断开连接时用;客户端调用pCP->Unadvise(dwCookie),这使用连接:同4.2.1可连接对象机制部分中使样就断开连接了.用连接中所说的一样,这里也有两种实现方式,并且2.2.2通报连接机制整体架构一样,只是这里需要把数据封装在FOR2客户程序通过IDataObject::DAdvise函数建立MATETC和STGMEDIUM两个结构中,服务器程客户程序接收器对象与数据对象之间的连接时,它序调用pSnk->OnDataChange()函数.除了要提供接收器对象的IAdviseSink接口指针,还释放连接:要提供两个信息:格式信息(参数pformatetc)和与客户端调用pIDataObject->DUnadvise()函通报连接有关的标志信息(参数advf),格式信息说数,如果成功便释放了连接.在实际应用中也是在删明客户程序只针对这种格式才接收通知,如果客户除一个组对象的时候才会出现.程序对多种格式感兴趣的话,那么客户程序可以在2.2.3两种机制的比较 22湖南工程学院学报2005年可连接对象机制中,可连接对象为了支持事件能以及完成与客户程序交互的功能,并没有与特定通信,必须实现IConnectionPointContainer接口,并的现场设备产生联系,而Item对象就是一个代表特且针对每一个出接口实现一个连接点对象,而客户定数据源———现场设备的特定属性的对象,代表与程序必须先定位到出接口的连接点对象上,才能建数据源的连接.OPC服务器会为与之连接的OPC立两者之间的连接,这种连接机制虽然灵活,又具有客户端程序实例化一个Server对象,这个Server对很强的扩展性,但实现的过程和建立连接的过程并象就管理了这个OPC客户端程序的所特有的信息:不简捷;而通报连接机制中,客户程序与数据对象之如新建了多少组对象,每个组对象的属性等等;间的连接方式要简便得多,IDataObject接口的最后Group对象最容易让人与一台现场设备联系起来,三个成员函数DAdvise、DUnadvise、EnumDAdvise但是把Group对象认定为就是一台OPC服务器管与连接点对象IConnectionPoint接口的Advise、Un2理的现场设备的逻辑代表,这样是不确切的,Groupadvise、EnumConnections有很好的对应关系,所以,对象应该只是一个单纯的用来管理一些Item对象数据对象绕过了IConnectionPointContainer接口和的逻辑对象,同一个Group对象中的不同的Item连接点对象,它直接管理与客户程序接收器对象之对象的数据源可以处在不同的现场设备中,这样就间的通报连接.给客户带来很多的灵活性,如客户可以把经常需要这两种机制的客户端的接收器也是不一样的.访问的一些项放在一个组对象中进行管理等等.但如应用在OPC中,可连接对象机制的接收器是,OPC客户端的用户也可以在加组时让它就代表(IOPCDataCallback接口对象)的接口函数有四个,一台OPC服务器管理的现场设备.不同的操作回调不同的接口函数,而通报连接机制的接收器(IAdviseSink接口函数)的接口函数只有3结束语一个,服务器都是通过这个接口函数把异步访问和订阅操作的结果传递给客户,它是用Pfe->cfFor2国内外许多工业控制系统的软硬件开发供应mat指定是哪一种操作的结果.可见通报连接机制商,都非常重视采用OPC技术来提升自己产品的性的接收器比较简单,但是不直观.能,目前已有600种以上的OPC服务器产品和OPC2.3Server对象、Group对象、Item对象的理解应用程序产品出现在由OPC基金会发行的OPC产OPC服务器主要的就是包含着三个对象,但是品目录上.可以看出随着信息时代的到来,OPC得很多的开发者都会在这三个对象与现场设备、现场到广泛的应用是一个必然的发展趋势.设备属性的关系之间产生迷惑,如为什么一个OPC参考文献服务器程序中会有多个Server对象,是否每一个Group对象对应OPC服务器管理的一个现场设备,[1]潘爱民.COM原理与应用[M].清华大学出版社,是否每一个Item对象对应OPC服务器管理的一个1999.现场设备的属性等[2]OPCOverview1.0[Z].OPCfoundation,1998..[3]OPCDataAccessCustomInterfaceSpecification2.05A[Z].Server对象、Group对象是两个标准的COM对OPCfoundation,2002.象,它们都是一个逻辑概念,都执行的是一些管理功RealizationofOPCDataAccessServerLILei,DAIYu-xin(InstituteofElect.andInformationEngineering,HunanUniversity,Changsha410082,China)Abstract:ThepaperintroducesOPCtechnologyanddiscussesthekeyanddifficulttechnologyindevelopingOPCServerprogramme:theCOMthread,advisoryconnectionmechanism,connectionobjectmechanisminOPCdataaccessmethodandthreeobjectsintheOPCServerprogramme.Keywords:OPCServer;OPCClient;COMthread;advisoryconnectionmechanism;connectionobjectmecha2nism

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭