用Delphi开发OPC客户端工具的方法研究[1]
王海瑞 钟家玉
(昆明理工大学信息及自动化学院,昆明650093)
摘要: 本文通过介绍OPC技术的工作原理,结合OPC客户端的工作机制,给出OPC客户端的开发方法及在的Delphi的具体实现,提出了OPC客户端开发工具的设计方案,并实现了OPC客户端开发工具的接口函数,可以使OPC客户端开发者可以轻松的开发OPC客户程序。
关键词: OPC、OPC客户端、开发工具、COM组件
Abstract: This article provides the way of exploring OPC data access server and its fulfillment in Delphi via the introduction of the working principles of OPC technology combined with the working mechanism of OPC data access server. In addition, it sets forth its designing scheme and the interface functions of OPC toolkit at the same time in order to facilitate the developers of OPC data access server.
Key Words: OPC、OPC Client、Develop Toolkit Component object Model
0、引言
OPC(OLE for Process Control)是工业自动化过程中数据交换的一个标准,OPC的出现为基于Windows平台的组态软件和基于现场控制的控制器之间的数据交换提供了确实可行的方法。在OPC出现之前,组态软件为了能够存取现场控制设备的数据,组态软件必须提供每一种相连控制设备的通讯驱动程序,由于不同厂家控制设备使用的通讯协议不同,组态软件必须为每一个控制设备开发专用的通讯DRIVER。目前流行的现场控制设备种类繁多,且产品不断升级换代,往往给组态软件的开发带来了巨大的经济压力和工作负担。而不断开发通讯DRIVER也不能满足实际工作的需要,硬件开发商和组态软件开发商急切需要一种具有高效性、可靠性、开放性、可互操作性的即插即用的设备驱动程序。在这样的大背景下,OPC工业标准应运而生,OPC工业标准的出现把开发访问设备接口的任务放在硬件开发商或专门从事软件开发的第三方厂家,以OPC服务器的形式提供给,组态软件可以按照OPC服务器提供的接口访问现场控制设备的数据,避免了不停开发通讯DRIVER的问题,提高了系统的开放性和可互操作性。
1、OPC技术标准
OPC技术是以Microsoft公司的OLE/COM/DCOM技术为基础的通讯标准.OLE/COM是一种客户/服务器模式,具有语言无关性、代码重用性、易于集成性等优点.如图l所示,OPC服务器中的代码确定了服务器所存取的设备、数据和数据项的命名规则和服务器存取数据的细节,不管现场设备以何种形式存在,客户都以统一的方式去访问服务器,从而保证软件对客户的透明性,客户应用程序仅需使用统一的标准接口和服务器通信,而并不需要知道底层的实现细节。通过OPC服务器,OPC客户既可以直接读写现场控制设备的I/O数据,也可操作SCADA、DCS等系统的端口变量(只要该系统提供OPC服务)。
任何一个OPC客户可连接到由多个OPC服务器上,每个OPC服务器也为多个OPC客户服务。只要应用软件符合OPC技术标准,不需要做任何修改就能访问OPC服务器提供的数据。OPC技术标准包括客户/服务器通讯使用的一整套的接口、属性和方法。OPC技术支持分布式应用和异构环境下软件的无缝连接和软件的互操作性,使现场控制设备层、自动化层以及组态软件层之间的协同工作成为了可能.并且提供了工业自动化应用领域的统一数据传输平台,使异构系统之间的数据交换更为方便。
2、OPC的对象模型
OPC逻辑对象模型包括3类对象:OPC server对象、OPC group对象、OPC item对象,每类对象都包括一系列接口。
OPC Server对象提供了一种访问数据的方法,它通过Iopcserver 、Opcbrowser、Ipersistfile向客户提供接口。主要功能为:1)创建和管理OPC Group对象;2)管理服务器内部的状态信息;3)将服务器的错误代码翻译成描述性语句;4)浏览OPC服务器内部的数据组织结构。从OPC Server对象的功能可以看出,OPC Server对象面向OPC服务器的技术细节,基本独立于实时数据源,可以统一实现,其中数据的组织结构与数据源属性与具体数据源有关,需要从用户处获取信息。OPC Server对象主要实现IUnknown和IOPC Server接口,OPC客户通过OPC服务器的接口与OPC对象进行通信.IOPCServer接口为OPC客户提供了方便有效操作OPC组的方法。
OPC Group对象的主要功能表现为:1)管理OPC Group对象的内部状态信息;2)创建和管理Items对象。3)OPC服务器内部的实时数据存取服务(同步与异步方式)。从OPC Group对象的功能可以看出,该对象面向OPC服务器中的数据存取信息,对实时数据源的依赖性很强,需要从用户数据源处获取信息。OPC Group提供了客户程序组织数据的手段.每个组中都可以定义一个或多个OPC Item。组有两种类型:公共组(Public)和局部组(local),公共组可以被多个客户共享,而局部组只能被一个客户使用。OPC组中有以下几个主要属性:1)Name :组的名字 2)Active:组的激活状态标志 3)Update Rate OPC:服务器向客户程序提交数据变化的刷新速率4)Percent Dead band:数据死区,即能引起数据变化的最小数值百分比。
OPC ITEM 是非COM对象,在OPC标准中用来描述实时数据,是客户端不可见的对象。代表了与服务器中的数据的连接,它并不是数据源,而仅仅是与数据源的连接。每个项都有以下主要属性:1) Active项的激活状态2)Value项的数值3)类型为VARIANT;4)Quality项的品质,5)代表数值的可信度,类型为SHORT;6)TimeStamp时间戳,代表数据的存取时间。
OPC技术基础包含了两套接口:客户化接口(Custom Interface)和自动化接口(Automation Interface)。客户化接口是一个OPC服务器所必须实现的接口,它描述了OPC组件对象的接口和其中的方法,适合C++和PASCAL语言设计,并可实现最佳运行性能的客户应用程序。客户化接口没有项对象,它对项的操作都是通过包容此项的组对象进行的。自动化接口是可选接口,它提供的是一个自动配置和存取过程控制数据。只要是支持C0M对象的编程语言都能进行OPC客户端的开发。OPC提供了客户化接口和自动化接口,要进行客户端开发实际上就是对这两套接口的声明和调用。自动化接口封装了C0M底层的许多实现,使开发者能比较轻松的进行数据访问。
3、OPC客户端的工作流程
由于OPC的结构是一个典型的CLIENT/SERVER结构,其技术基础是基于COM/DCOM技术的,所以OPC客户端的开发与COM/DCOM编程大体相同。从OPC的工作机制可以知道,OPC客户端的开发必须按下面的步骤处理。
1, 客户端程序必须对DCOM进行初始化设置,以保证OPC服务器端的回调函数不会被堵塞。
2, 在正确初始化DCOM的基础上,创建客户化接口(Custom Interface),自动化接口(Automation Interface)一般由已注册在系统中的OPCProxy.dll文件自动处理。完成OPC Server的创建。
3, 在正确创建了客户化接口(Custom Interface)后,客户端程序可以为OPC Server对象创建一个OPC组对象(OPC GROUP)。
4, 在正确创建了OPC组对象后,客户端程序可以为OPC GROUP对象创建多个OPC ITEM对象。
5, 为自动化接口实现两个方法:OndataChange和Onasync_WriteComplete,在数据发生变化或异步写操作完成后可被调用。
6, 可以实现对OPC ITEM 数据的读写操作。
7, 在客户端工作结束时,清除OPC服务器对象中的GROUP对象,系统将会自动释放。
4、OPC客户端开发工具的实现
OPC客户端开发工具的目的是将开发OPC客户端的技术细节封装起来,使客户的开发工作集中在自己特定的数据处理任务上来。目前大多数小型控制系统的数据处理及显示程序都由用户自己编写,而OPC技术在国际工业控制领域中的使用已经相当广泛,大多数硬件厂家度提供了OPC数据服务器,部分可以直接使用,而工控组态软件虽然支持OPC技术,但这些组态软件的价格十分昂贵,对于小型工控系统的成本过高,如果能提供OPC客户端开发工具,小型工控的成本将会大幅下降。所以有必要研究OPC客户端开发工具的开发方法。
OPC客户端开发工具通常可以分以两种方式存在,一种以源代码形式存在,另一种以二进制的形式存在(动态链接库或组件形式)。以源代码形式存在的OPC客户端开发工具一般包括OPC客户端实现的全部源代码。这种形式使用起来对于程序设计来说比较灵活,用户可以更具自己的需要进行开发,但是源代码往往是某一种语言的源代码,用户在开发OPC客户端程序时一般要求使用与源代码相同的开发语言,开发起来对用户的要求很高,源代码对于语言级的开发通用性低。而以二进制的形式存在(动态链接库或组件形式)的OPC客户端开发工具的通用性强,对开发环境的要求较小,可以在任意支持动态链接库或组件形式的环境下使用,开发者只要使用动态连接库的输出函数或组件的接口函数即可完成OPC客户端程序的开发,这种方法使用简单,缺少灵活性,但通常能够满足多数用户的开发需求。
根据OPC客户端的工作流程,利用Delphi开发工具作者开发了一个完整的OPC客户端开发工具,该工具分别以动态链接库和组件形式存在,以供不同的开发者使用。不论是以动态链接库形式还是以组件形式存在,它们的接口函数是一致的。
1) OPC客户端初始化函数InitializeServer的功能是在使用开发工具之前,必须使用初使化函数对开发工具进行初使化,提供OPC服务器刷新率、OPC服务器的程序信息(如CLSID)、服务器的版本信息等。
2) OPC客户端添加组对象函数ServerAddGroup的功能是在初始化函数成功之后,调用此函数完成客户端在现有OPC服务器下完成对组对象的添加和命名,以便后面的函数使用。
3) OPC客户端添加组内ITEM 对象函数GroupAddItem的功能是在ServerAddGroup函数执行之后在添加的组对象内添加ITEM对象,以保证OPC客户端能利用ReadOPCGroupItemValue函数和WriteOPCGroupItemValue函数完成对OPC服务器端变量的读写。
4) OPC客户端删除组内ITEM 对象函数GroupRemoveItem的功能是在客户端不需要对OPC服务器端的变量进行读写后,需要利用此函数删除组对象的ITEM对象,此函数的执行必须是在GroupAddItem执行成功之后才能执行。
5) OPC客户端通过IDATAOBJECT实现回调函数GroupAdviseTime的功能是建立一个由IDataObject接口实现的OPC客户端的组对象建立回调功能,使OPC服务器端的数据发生变化时,会自动通知OPC客户端。该功能非常重要,是完成实时数据交换的保证。
6) OPC客户端删除已建立的由IDATAOBJECT接口实现回调函数GroupUnAdvise的功能是结束由GroupAdviseTime建立的回调功能。
7) OPC客户端通过IConnectionPointContainer接口实现回调函数GroupAdvise2的功能是建立一个由IConnectionPointContainer 接口实现的的OPC客户端的组对象建立回调功能,当OPC服务器端的数据发生变化时,会自动通知OPC客户端。该功能非常重要,是完成实时数据交换的保证。
8) OPC客户端删除已建立的由IConnectionPointContainer接口实现回调函数GroupUnadvise2的功能是结束由GroupAdvise2函数建立的回调功能。
9) OPC客户端读取OPC服务器变量函数ReadOPCGroupItemValue的功能是从指定的OPC服务器中读取指定的ITEM对象值。通过此函数,用户可以及时获得OPC服务器中的数据。
10)OPC客户端设定OPC服务器变量函数WriteOPCGroupItemValue的功能是将OPC客户端的数据用异步方式写入到OPC服务器中去。通过此函数,用户可以及时修改OPC服务器中的数据。
11)OPC客户端工作结束函数DestroyServer的功能是将由InitializeServer函数初始化的服务器释放,服务器与客户端的连结便断开。
5、结束语
OPC开发工具的出现,方便了工业控制软件中的设计与集成,缩短了产品的开发周期。优秀的OPC开发工具将是国内工业控制领域中必不可少的工具软件。同时OPC标准的本身也在不断的改进,其范围也越来越广。OPC基金会现在已经颁布了数据访问和报警事件标准,其它的OPC标准,如历史数据OPC标准,也正在酝酿之中。OPC基金会发布的与微软公司BizTalk体系兼容的XML(Extensible Markup Laguage)纲要,将Internet技术应用在工业控制中。相信在不久的将来,OPC技术及标准将应用于更加广泛的领域,OPC开发工具也将向着多元化发展。OPC技术必将赋予现代工业控制软件更强的生命活力。
参考文献
1 Al Chisholm, A Technical Overview of the OPC Data Access Interface, ISA EXPO 98
2 OPC Foundation,OPC Data Access Custom Interface Standard ,Version 2.0。
3 OPC Foundation,OPC Data Access Automation Interface Standard ,Version 2.0。
4 OPC Foundation, Overview, Version 1.0
The research and method of OPC client development tool using
(
WangHairui Zhong Jiayu
王海瑞 男 1969年8月生于山西省和顺县,副教授,在读博士,主要从事计算机控制技术的研究和垃圾焚烧炉模糊神经控制的研究与应用。
联系电话: 13888385529 或 0871-5115891
联系地址:昆明理工大学信息自动化学院计算机系
联系人 :王海瑞
邮政编码:650093
Email:[email protected]