用Delphi开发OPC客户端工具的方法研究
摘要: 本文通过介绍OPC技术的工作原理,结合OPC客户端的工作机制,给出OPC客户端的开发方法及在的Delphi的具体实现,提出了OPC客户端开发工具的设计方案,并实现了OPC客户端开发工具的接口函数,可以使OPC客户端开发者可以轻松的开发OPC客户程序。
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对象,系统将会自动释放。