搜档网
当前位置:搜档网 › OPC数据访问客户端开发方法讨论

OPC数据访问客户端开发方法讨论

OPC 数据访问客户端开发方法讨论

花新峰, 卫国

(西安建筑科技大学计算机控制研究所 陕西西安 710055)

摘 要:简要介绍了开发O PC 数据访问客户程序的背景知识。较为详细地介绍了如何使用A ctiveX 控件进行O PC 客户端开发,如何使用专用O PC 开发工具进行O PC 客户端开发,如何使用O PC 定制接口进行O PC 客户端开发,如何使用O PC 自动化接口进行O PC 客户端开发。并对开发O PC 数据访问客户程序的不同方法的优劣进行了分析,从而对读者选择合适的开发方法提供帮助。

关键词:O PC ;COM ;A ctiveX ;VBA ;DLL ;客户;服务器;接口

中图分类号:T P 399 文献标识码:B 文章编号:1004373X (2005)1912004

Research of the M ethods of D evelop i ng OPC Cl ien t Appl ica tion

HUA X infeng ,YUN W eiguo

(R esearch Institute of Computer Contro l ,X i ′an U niversity of A rch itecture and T echno l ogy ,X i ′an ,710055,Ch ina )

Abs tra c t :T h is paper introduces the background of develop ing O PC client app licati on briefly 1It m akes a introducti on of several

w ays of O PC client developm ent by using A ctiveX ,O PC custom interface ,special O PC develop ing k it ,A ctiveX and autom ati on inter 2face 1T he different m ethods of develop ing an O PC C lient are discussed in th is article and the advantages and disadvantages of them are refered as w ell to give som e help to the reader fo r choo sing p roper m ethod 1

Ke yw o rds :O PC ;COM ;A ctiveX ;VBA ;DLL ;client ;server ;interface

收稿日期:20050710

随着计算机技术的发展,计算机在工业控制领域发挥着越来越重要的作用。各种仪器仪表都提供了与计算机通信协议相通的功能。但是,不同厂家产品的协议互不相同,即使是同一家公司的不同产品与计算机之间的通信协议也不尽相同。因为不同的语言和运行环境对驱动程序的接口有不同的要求,所以不仅软件厂商需要编写大量设备驱动程序,硬件厂家也需要为应用程序开发不同的驱动程序,这样软硬件厂商无疑都加大了开发成本,同时此方案也不符合软件工程的发展趋势,在这样的背景下,O PC 技术应运而生。

O PC (OL E fo r P rocess Contro l )技术为工业控制领域

提供了一种标准的数据访问机制,将硬件与应用软件有效的分离开来。不同的硬件厂商只需为各自的设备提供带有

O PC 接口的服务器,软件厂商可以采用支持O PC 接口的

客户端程序对他们进行统一方式的访问。

本文主要讲述了使用不同技术进行O PC 客户端的开发。目的是对有兴趣进行O PC 客户端开发的工程技术人员,在选择适合自己的O PC 开发技术方面提供帮助。1 使用ActiveX 控件进行OPC 客户端开发

为了减轻O PC 客户程序开发的复杂度,某些设备厂

商提供了针对自己产品的A ctiveX 控件。在用这些A c 2

tiveX 控件搭建自己的O PC 客户应用时,可以大幅度地缩

短开发周期,并且不需要了解通常进行O PC 开发时所应当具有的COM ,OL E 等相关知识。由于这些控件通常通

过O PC 服务器的定制接口进行数据访问,因此在效率上也丝毫不弱。但是使用A ctiveX 控件进行O PC 客户应用的开发也有缺点:一方面并不是所有的设备厂商都提供了相应的A ctiveX 控件;另一方面由于这些控件是预制好的软件模块,他们并不一定完全满足客户的需求,所以在开发的灵活性上存在不足。下面给出一个在VB 环境下使用美国的N ati onal Instrum ents 公司提供的CWD ataSocket 控件进行O PC 客户开发的应用示例:

新建一个V

isual Basic 应用程序,按照图1方式进行窗体设计,其中

是N ati onal Instrum ents 公司提

供的CW Graph 和CWD ataSocket 控件。

图1 O PC 客户端用户界面

21

程序功能如下:

(1)连接O PC服务器

用户点击Connect to O PC Server按钮时,连接U RL2 R ead文本框所描述的O PC服务器。

P rivate Sub ConnectB tn_C lick()

C W

D ataSocket11ConnectTo U RL R ead1T ext,c w dsR ead

A utoU pdate

End Sub

(2)数据变化时更新数据

当所连接的O PC服务器上数据发生变化时,CW2 D ataSocket控件会取得新值,我们要做的就是在CW2 D ataSocket的O nD ataU pdated事件中显示数据的变化,本例是用CW Graph控件来显示变化数据的曲线。

P rivate Sub C WD ataSocket1_O nD ataU pdated(ByV al D ata A s C WD SL ib1C WD ata)

C W Graph11ChartY=C W

D ataSocket11D ata1V alue

End Sub

(3)断开与O PC服务器的连接

用户点击D isconnect from O PC Server按钮时,断开与O PC 服务器的连接。

P rivate Sub D isconnectB tn_C lick()

C W

D ataSocket11D isconnect

End Sub

2 使用OPC开发工具进行OPC客户端开发

利用第三方的开发工具包开发O PC客户端具有开发周期短,开发出来的产品效率高功能强大等优点,缺点是这种开发工具包往往价格不菲。采用这类开发工具,可以快速开发出符合O PC规范的O PC客户端程序。只需具备基本的编程知识,无需了解DCOM,A TL,O PC的技术细节,即可迅速开发出符合O PC标准的高质量的O PC应用。这种开发包往往以动态链接库(DLL)的形式将开发所用的A P I函数进行封装,在开发过程中直接调用即可,这使得开发过程省时省力。

下面以林柯科技的KOCRD K(O PC数据存取客户端快速开发工具)开发包为例,简单讲述其使用方法。此开发工具将所有功能都封装在一个标准的W indow s动态连接库(DLL,D ynam ic L ink L ibrary)文件中。支持多种流行的开发工具,包括V isual C++,V isual Basic,Bo rland C++builder,D elph i等。开发人员需要做的事只是简单的调用动态链接库中的函数即可。DLL中所有的函数均以KOC开头。此处以C++语言为例给出具体使用步骤如下:

(1)系统设置和初始化

调用KOC_Init()初始化客户端程序。

(2)连接O PC服务器

①连接O PC服务器

HANDL E hConnect=KOC_Connect(m_strN ode=N am e,m_strServerN am c,m_bV erl)

②设置服务器数据变化的回调函数

KOC_SetD ataChangeP roc(m_hConnect,&

D ataChangeP roc);

其中,D ataChangeP roc为用户程序中定义的回调函数。

(3)添加O PC组

HANDL E hGroup=KOC_A ddGroup(m_hConnect, m_strGroupN am e,&bA ctive,m_dwU pdateR ate,

&lT i m eB ias,m_fD eadBand,&dwL cid);

(4)添加O PC点

HANDL E hT ag=KOC_A ddlterm(m_hConnect,m_ hGroup,strltemN am e);

(5)读写O PC的数据

①读O PC数据

KOC_R ead Item(m_hConnect,m_hGroup,phem->h Item,&V alue,&ftT i m e,&dwQ uality);

②写O PC数据

KOC_W riteltem(m_hConnect,m_hGroup,h ltem, V t,m_bA sync);

(6)关闭O PC客户端

①调用KOC_R emovehem(),从KOCRD K1dll中删除已添加的O PC点;

②调用KOC_R emoveGroup(),从KOCRD K1dll中删除已添加的O PC组;

③如果用户程序使用了new等操作符申请了内存,释放所有这些已分配的内存;

④调用KOC_U ninit()完成O PC客户端程序的退出。3 根据OPC规范进行OPC客户端开发

O PC规范中定义了2种标准接口:自定义接口(cus2 tom interface)和自动化接口(autom ati on interface)。其中自动化接口是对自定义接口的进一步封装。规范中规定O PC服务器必须提供自定义接口,而自动化接口则可以有选择地提供。用C C++等语言编写的O PC客户端程序既可以访问COM自定义接口,也可以直接访问OL E自动化接口。但是用高级语言(如Excel,V isual Basic等)编写的客户端应用只能访问OL E自动化接口。图2表明了O PC接口、O PC服务器及O PC客户应用之间的链接关系

图2 O PC服务器与应用之间的连接

根据O PC规范进行O PC客户端开发就必须了解O PC服务器中的数据组织方式。

一个O PC数据服务器包括3类对象:服务器

121

(server )、组(group )和项(item )。O PC 服务器对象维护

有关服务器的信息并用作O PC 组对象的容器,而O PC 组对象维护组的信息,提供包容O PC 项的机制,每个组中都可以定义一个或多个O PC 项并管理O PC 项。O PC 项代表了与服务器中的数据的链接。客户程序对O PC 项的操作都是通过包容此项的O PC 组来进行的,而不是直接把

O PC 项作为一个对象来操作,如图3所示

图3 O PC 数据访问服务器的数据组织方式

311 使用O PC 定制接口

使用O PC 定制接口进行数据访问具有效率高、速度快、灵活等优点,但是这需要开发者有一定的COM 编程经验。下面给出使用C

++

语言通过O PC 定制接口进行

O PC 数据访问的步骤:

(1)COM 库的初始化

在调用COM 库的任何一个函数之前必须先初始化

COM 库。调用函数Co Initialize ()可以完成此功能:

rl =Co Initialize (NU LL )(2)创建服务器对象

每个COM 服务器都有一个P rog I D ,通过他可以得到一个全球惟一的CL S I D ,用CL S I D F rom P rog I D ()函数可以实现这个转换。P rog I D 用变量sz N am e 进行参数传递。

rl =CL S I D F rom P rog I D (sz N am e ,&clsid );

通过获得的CL S I D 可以创建类实例,CoC reate 2

Instance ()函数用来创建一个类实例:

r 2=Cocreate Instance (clsid ,NULL ,CL SCTX _LOCAL _

SERV ER ,II D _I U nkow n ,

(vo id 33)&pUN K );

这段程序的结果是获得了一个指向服务器对象I U n 2know n 接口的指针变量pU N K 。

从I U nkow n 接口通过Q uery Interface ()方法可以得到其他接口的指针:

HR ESUL T r 3;

r 3=pUN K >Q uery Interface (II D _I O PCServer ,(vo id 33)&m _Popc );

这段程序的结果是得到了一个指向服务器对象

I O PCServer 接口的指针(变量m _Popc )。

(3)添加组

I O PCServer 接口的A ddGroup ()方法可以创建O PC

组:

m _Popc >A ddGroup (sz N am e ,TRU E ,500,1,&T i m eB ias ,

&PercD eadband ,

dwL C I D ,

&m _

GrpServerH andle ,&R evU pR ate ,II D _I O PC ItemM gt ,

(L PU N KNOWN 3)&m _p ItemM gt );

这段程序的执行结果是创建一个有指定名称和属性的组。在返回的参数中有一个指向所需要的组对象接口的指针。即类型为I O PC ItemM gt 的变量m _p ItemM gt

(4)添加项目

I O PC ItemM gt 接口有A dd Item ()方法可创建O PC

项:

r 1=m _p ItemM gt ->A dd Item s (N um Item s ,p Item s ,&m _p ItR esult ,&pE rro rs );

这段程序的结果是根据指定的属性,指定的数量来创

建项目。

(5)读写数据

用于执行所需操作的指针需要通过现有的指向

I O PC ItemM gt 接口的指针得到。如果用户要进行异步通

信就需要获得指向I O PCA sync I O 接口的指针:

r 1=m _p ItemM gt >Q ueryface (II D _I O PCA sync I O ,(vo id 33)&pA sync I O );

通过该接口的R ead ()和W rite ()两个方法可以读写项的数值。

r 2=pA sync I O ->R ead (m _dw Connecti on ,O PC _D S _CA CH E ,dwN um Item s ,phServer ,&m _T ransacti on I D ,&pE rro rs );

这段程序的执行结果是O PC 项的数据被送到客户程序的I A dviseSink 接口。

(6)删除创建的对象

当不再需要访问O PC 服务器时应当删除已创建的各个O PC 对象并且释放内存。

r 1=m _p ItemM gt >R emove Item s (dwN um Item s ,phServ 2

er ,&pE rro rs );

r 1=m _Popc >R emoveGroup (m _GrpServerH andle ,TRU E );

m _p ItemM gt >R elease ();m _Popc >R elease ();

(7)COM 库的卸载

当不再使用COM 库时也应当释放COM 库。调用函数CoU ninitialize ()可以完成此功能。312 使用O PC 自动化接口

自动化技术作为COM 的一种特例或者说是一种应用,他为一些弱类型的高级语言(比如V isual Basic ,VBA 等)提供了另一条程序相互通信的途径,而且这种通信方式非常直观,对双方都很友好。当前典型的自动化控制器是VB 或VBA ,他允许用户编写脚本代码,运行和调试这些脚本代码。通过脚本代码来进行COM 对象的访问。使用O PC 自动化接口进行数据访问具有简单、易于编程、不需要开发者有相应的COM 知识等优点,但是在程序的速度和效率上存在不足。下面分别给出使用V isual Basic 语

2

21

言和Excel 自动化控制器通过O PC 自动化接口进行O PC 数据访问的步骤:

(1)使用VB 编写O PC 客户端

①声明数据对象:

D i m M yOpcServer A s O PCServer

D i m M yGroup s A s O PCGroup s D i m M yGroup A s O PCGroup D i m

M y Item s A s O PC Item s

②连接O PC 服务器:

Set M yOpcServer =N ew O PCServer M yOpcServer 1Connect O bjServer N am e

O bjServer N am e 为O PC 服务器的注册字符串

③添加一个O PC 组:

Set M yGroup s =M yOpcServer 1O PCGroup s

Set m yGroup =M yGroup s 1A dd ("Examp leGrp ")

"Examp leGrp "为要添加的组名

④添加要访问的O PC 标签:

Set M y Item s =M yGroup 1O PC Item s Call M y Item s 1A dd Item s (4,str Item I D s ,lC lientH andles ,lServerH andles ,lE rro rs )

⑤同步数据读写:

M yGroup 1SyncR ead O PCCache ,4,lServerhandles ,R e 2sultO fR eads ,lE rro rs

M yGroup 1Sync W rite 4,lServerhandles ,D ataO f W rites ,lE r 2ro rs

⑥断开O PC 服务器连接释放资源:

M yGroup s 1R emove "Examp leGrp "Set M y Item s N o th ing Set M yGroup N o th ing Set M yGroup s N o th ing M yServer 1D isconnect Set M yServer N o th ing

本段程序释放对象所占的系统资源,断开与O PC 服务器的连接

(2)使用Excel 编写O PC 客户端

Excel 是一个典型的VBA (V isual Basic fo r A pp lica 2ti on )应用,因此简要描述使用Excel 编写O PC 客户端的

方法,其他的VBA 编程方式类似。

首先从Excel 的菜单中选择【工具->宏->V isual

Basic 编辑器】

,然后在显示的V isual Basic 编辑器窗口中录入所需的代码,通常将数据显示在Excel 表中的单元格内。核心代码如下:

①声明数据对象:

P rivate objServer A s O PCServer P rivate objGroup s A s O PCGroup s

②连接O PC 服务器:

Set objServer =N ew O PCServer objServer 1Connect (Server N am e )

③添加一个O PC 组:

Set objGroup s =objServer 1O PCGroup s Set objT estGrp =objGroup s 1A dd ("T est ")

④添加要访问的O PC 标签:

Set objItem s =objT estGrp 1O PC Item s

Call objItem s 1A dd Item s (8,str Item I D s ,lC lientH andles ,lServerH andles ,lE rro rs )

⑤同步数据读写:

objT estGrp 1SyncR ead (O PCCache ,8,lServerH andles ,

ItemV al ,lE rro rs )

objtestgrp 1Sync W rite (N um Item s ,lServerH andles ,ItemV al ,lE rro rs )

⑥断开O PC 服务器连接释放资源:

Set objGroup s =N o th ing Call objServer 1D isconnect Set objServer =N o th ing

4 结 语

开发O PC 客户应用程序的方式灵活多样,用户需要根据自己的实际情况,从经济性、灵活性、开发的难易程度、使用效率等多方面考虑,选择最适合自己的方式。本文的主要目的就是列举出大多数的O PC 客户程序开发方式,能够对O PC 客户开发方式的选择提供帮助。

参 考 文 献

[1]潘爱民1COM 原理与应用[M ]1北京:清华大学出版社,

19991[2]

Steve T eixeira ,Xavier Pacheco 1D elph i 6开发人员指南[M ]1北京:机械工业出版社,20031

[3]O PC Foundati on 1O PC D ata A ccess Custom Interface

Specificati on [EB OL ]1h ttp : www 1m atrikon 1com

,20011

[4]日本O PL 基金会1O PC 应用程序入门[M ]1O PC (中国)

促进委员会译1北京:O PC 中国基金会,20021

[5]阳宪惠1工业数据通信与控制网络[M ]1北京:清华大学

出版社,20031

作者简介 花新峰 男,1971年出生。研究方向为管控一体化。

卫国,男,1961年出生。研究方向为管控一体化

《现代电子技术》

(半月刊) 欢迎刊登广告 029-853933763

21

相关主题