接口技术-OPC DA服务器的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
OPC DA服务器的设计与实现
马亮, 张志鸿
(郑州大学信息工程学院,河南郑州 450001)
摘要:本文对OPC技术做了详细的分析,在OPC DA标准的基础上,给出了一个OPC数据存取访问服务器框架的设计方案,并介绍了实现的主要步骤。在设计中引入了适配器模式,用来针对不同数据源进行快速开发。
关键词:OPC;数据访问;COM;适配器模式
中图分类号:TP273 文献标识码:B
Design and Implement of OPC Data Access Server
MA Liang , ZHANG Zhi-hong
(School of Information Engineering, Zhengzhou University, Zhengzhou Henan 450001, China ) Abstract: This paper presented a detailed analysis of OPC technical, gave an OPC Data Access Server framework on the basis of OPC DA standards, and introduced the main steps of realization. In the design, we exploited the Adapter Pattern to accelerate the implement for different data sources.
Key words: OLE for Process Control; Data Access; COM; Adapter pattern
0 引言
OPC全称OLE for Process Control,它是由OPC基金会制定的自动化领域过程控制标准。实际上,OPC代表一系列的标准,包括OPC 数据访问(OPC Data Access),OPC报警与事件(Alarms & Events ),历史数据访问(OPC Historical Data Access),OPC XML-DA(1.0)等[3]。目前,OPC标准在现代工业控制领域,特别是在数据采集和软实时控制方面已有很好的应用。
1 OPC标准介绍
在OPC标准制定之前,工业软件制造商需要为不同的硬件开发各自独立的驱动接口。对于开发典型监控程序软件的技术人员来说,约有20%-30%的时间是用于编写通讯驱动程序[4]。当供应商提供一个新的硬件时,应用软件研发人员就不得不重新编写一个新的程序。而OPC标准的出现为此解决该问题提供了一个方案,它制定了一系列的数据存取,事件,报警等规范,使得当有新的硬件出现时,供应商只需提供实现的OPC标准接口,而上层应用软件则不需重新改写。这样,在系统与设备之间,车间现场与信息管理之间,甚至更远的距离上,都可以通过OPC标准实现无缝通讯,而不必担心设备升级带来的不便和额外费用。 OPC为不同的应用制定了不同的标准,OPC DA是针对现场数据进行存取的接口规范,该标准基于OLE / COM / DCOM / COM+技术,采用Client / Server模式。数据通过特定的采集卡或串口等,从现场设备中获得,然后OPC DA服务器将这些从数据源采集到的数据,以OPC标准接口形式提供给外部应用程序,例如工控软件,实时数据库等。OPC服务器可以通过本地或远程服务服务器两种方式,为依照OPC标准实现的客户端提供服务。
DA服务器的设计
2 OPC
本文通过使用VC++编程实现的一个OPC DA服务器框架,来介绍OPC DA服务器设计中需要解决的主要问题。在OPC服务器的设计中,引入适配器模式[6],通过适配层将数据访问同具体的数据源操作相分离,以便针对不同的数据来源时,进行快速的二次开发。
实现OPC DA服务器,需要依照OPC基金会提供的OPC DA标准,将从数据源中采集数据,以标准规定的接口形式提供给外部。其中,OPC规范为OPC服务器规定了两套接口方式:定制接口(Custom interface)和自动化接口(Automation Interface)[1]。其中,前者是OPC服务器必须实现的接口,后者则是为方便VB等脚本语言而提供,可以选择性实现。
2.1 OPC DA 服务器中的对象
根据OPC 标准,在OPC DA 服务器中,主要包含三个层次的对象[1]:服务器对象(Server),组对象(Group)和数据项(Item)。其中,服务器对象与组对象是一对多的关系,一个Server 对象可以包含0到多个Group 对象,而一个组对象中可以包含0到多个数据项。OPC DA 标准对Server 和Group 对象需要实现的接口,进行了详细的规定说明。
在OPC DA 标准中,客户端对服务器的数据存取是以Group 为单位的,每次将需要存取的数据项Item 加入一个Group ,然后对该Group 进行整体读写操作。Group 对象通过标准定义的IOPCDataMgt 接口,对Item 进行添加,删除等相关的管理;而Server 对象则通过IOPCServer 接口对Group 对象进行添加,删除等管理。
2.2 OPC DA 服务器的结构
开发一个OPC DA 服务器需要注意以下问题:服务器的运行方式,各个接口与对象的相互关系,内部数据的组织形式,对外部数据源的访问等。在本实例中,OPC 数据存取服务器的框架结构如下图所示
图1 OPC 服务器的结构
接口与对象:在各层次对象与接口的关系处理中,可以采用两种方法:多继承的方式,将Server/Group 对象继承自每个标准规定的接口;或者采用聚合的方式,Server/Group 对象包含接口对象。本例采用的是第二种方式,该方式可以将使接口的编写相对独立,以方便测试,并且有利于自动化接口的可选择实现。
服务器使用VC++编程,包含以下几个主要的类:
COPCServer :Server 对象的类,管理IOPCCommon ,IOPCServer ,IConnectionContainer 等接口;
COPCGroup :Group 对象的类,管理IOPCItemMgt ,IOPCGroupStateMgt ,IOPCSyncIO ,IOPCAsyncIO ,IConnectionContainer 等接口;
其他接口类:每个接口还对应一个实现类(如:CIOPCItemMgtImp 是IOPCItemMgt 的具体实现),该类完成OPC 标准规定的对应接口的功能函数,类的实例化对象将以聚合的方式接受Server 或Group 对象的管理;
数据缓存区的构造:在OPC 服务器中,Cache 是重要的部分,存储结构将直接影响数据访问的速度,它负责将从设备中读取的数据先存放在数据缓存区,供同步或异步读取。缓存区内存可以采用连续存储,链式存储和哈希存储[2]。其中,考虑到存取速度和方便管理,该服务器选择采用连续存储的方式。该方式可以随机存取数据,但存取数据的数量不宜过大,
OPC DA 服务器
组对象
组对象 Item
Item
Item 组对象 Item
Item 服务器
对象 数据存取适配层 数据源
OPC Custom / Automation interface
OPC 客户端