任巍曦,梁伟平,李 立
(华北电力大学控制与计算机工程学院,河北 保定 071003)
基于 VB的 OPC服务器的设计与实现
任巍曦,梁伟平,李 立
(华北电力大学控制与计算机工程学院,河北 保定 071003)
由于源码级的OPC服务器开发过程非常复杂,为了达到缩短OPC服务器开发周期,采用快速开发工具GKOPCServer.dll,对 OPC服务器进行了设计与实现。通过测试软件的测试,得出了 OPC服务器的正确性。分析了采用开发工具包开发OPC服务器的优点以及软件的结构和主要模块的功能。结果表明:快速开发工具包提高了OPC服务器的开发效率,给开发人员提供了极大的方便。
OPC;开发工具包;数据通信;接口
目前,工控领域的 OPC(OLE for Process Control,用于过程控制的对象链接和嵌入)服务器的开发一般可分为快速开发方式和直接开发方式。快速开发方式就是利用某些软件开发商提供的快速开发工具,把服务器的对象与接口部分进行封装,使用户开发 OPC服务器的工作集中在自己关注的数据采集任务上来。直接开发方式即源码级开发,开发人员根据 OPC基金会免费提供的规范在通用开发环境中编写程序代码来实现 OPC服务器规范。这需要开发人员了解 OPC规范的许多细节,难度大、周期长[1]。基于以上分析采用了快速开发工具 GKOPCServer.dll来开发 OPC服务器。
GKOPCServer.dll是一个快速开发OPC服务器的工具包,封装了所有关于 CO M和 OPC的技术细节。该工具包其实就是一个动态链接库 (DLL),支持OPC DA1.0和 OPC DA 2.0数据存取规范定义的所有接口,而且还提供了一些把定制数据集成到 OPC服务器的易于使用的API函数。
用该工具包开发 OPC服务器的优点在于:它将 Microsoft公司的 OLE,CO M,DCO M技术和OPC的技术细节隐藏起来,使开发 OPC服务器的工作集中在特定的数据采集任务上来。开发人员利用该工具包开发 OPC服务器时无需考虑许多涉及到底层接口实现方面的工作,也不必掌握 ATL,CO M/DCO M及 OPC技术的细节,只需具有基本的编程基础即可。该工具包支持多种开发工具,如 VC,VB等[2],利用这个工具包开发人员也可以很容易的实现对现有系统的改造。这种开发方式缩短了 OPC服务器程序的开发周期,提高了开发效率,从而给开发人员提供了极大的方便,同时也节省了投资成本。但快速开发工具中某些实现部分是通过动态链接库的形式封装起来,当用户需要增加某些特定功能时会受到一定的限制[3]。
OPC服务器开发工具包软件动态链接库 GKOPCServer.d ll包含一些功能函数模块:初始化与注册函数、OPC项函数、辅助功能函数、调用返回定义,其设计如下:
(1)初始化函数。Declare Function InitGKOPCsvr Lib“GKOPCServer”Alias“_InitGKOPCsvr@8” (By-Ref CLSID_Svr As Byte,ByVal ServerRate As Long)As Long:这个函数实现对DCO M的初始化并且创建OPC服务器对象。其中 CLSID_Svr是 OPC服务器的类标识 (CLSID),用于 OPC客户连接服务器;参数ServerRate定义了客户的数据刷新速率,其单位是ms。
(2)注册函数。Declare Function UpdateRegistry Lib“GKOPCServer” Alias“_UpdateRegistry@16”(ByRef CLSID_Svr As Byte,ByRef Name As Byte,ByRef Descr As Byte,ByRef ExePath As Byte)As Long:这个函数封装了 Windows注册函数,用于OPC服务器的注册。其中参数 CLSID_Svr是 OPC服务器的类标识;参数 Name定义了服务器的名字;参数 Descr可以是任何描述服务器的字符串;参数ExePath定义了可执行程序的完整的 windows路径。
(3)OPC项函数。Declare Function CreateTag Lib“GKOPCServer” Alias“_CreateTag@28” (ByRef Name As Byte,ByVal Value As Variant,ByVal InitialQuality As Integer,ByVal IsWritable As Long)As Long:这是一个在动态链接库里创建过程标签的函数,参数 Name定义了 OPC客户要访问的过程标签;参数 Value定义了标签的初始值,为 VARIANT类型;参数 InitialQuality定义了标签的 OPC属性标志;参数 IsWritable定义了标签是否可写。
Declare Function UpdateTag Lib“GKOPCServer”Alias“_UpdateTag@24” (ByVal TagHandle As Long,ByVal Value As Variant,ByVal Quality As Integer)As Long:这个函数的调用可以实现对过程标签的数据刷新。参数 TagHandle是点句柄,通过 CreateTag函数得到;参数Value是点的值,就是来自现场硬件的数据;参数 Quality是点的属性条件。
Declare Function RemoveTag Lib“GKOPCServer” Alias“_RemoveTag@4” (ByVal TagHand le As Long)As Long:该函数从 DLL中删除一个过程标签。如果在删除过程标签时有客户连接正在访问这个标签,则这个连接仍然有效,但是将没有新的数据来刷新这个连接。参数 TagHandle是点句柄,通过 CreateTag函数得到。
(4)辅助功能函数。Declare Function Reset-ServerRate Lib“GKOPCServer” Alias“_Reset-ServerRate@4”(ByVal ServerRate As Long)As Long:该函数用于改变服务器应用的数据刷新率。
Declare Function SetGKVendorInfo Lib“GKOPCServer” Alias“_SetGKVendorInfo@4”(ByRef VendorInfo As Byte)As Long:该函数设置一些服务器的版本信息。
(5)调用返回定义。明确地定义了 DLL用于返回给服务器程序的调用返回的具体含义,以实现客户应用与服务器应用之间的数据交换。
Declare Function EnableWriteNotificatio n Lib“GKOPCServer” Alias“_EnableWrite Notification@8”(ByVal Callback As Long,ByVal ConvertToNative As Long)As Long:当 OPC客户写一个已定义的标签时,这个函数产生一个来自DLL的调用返回。
OPC服务器主要由 3部分组成:即 OPC标准接口、服务器界面和专用数据源通信接口[4]。功能如下:
(1)OPC标准接口:实现 OPC数据存取规范规定的功能。本文将通用接口做成 DLL的形式,用户可以很方便地调用该模块。
(2)服务器界面:主要完成各标签的注册、添加、刷新及退出等操作。
(3)专用数据源通信接口:该模块是一个针对具体的数据源而开发的通信程序。本文在 VisualBasic6.0开发环境中通过编程实现 OPC服务器与 Access数据库的通信。
将上述 3部分集成到一个应用程序中,设计OPC服务器的总体结构如图 1所示[5]。
图1 OPC服务器的总体结构Fig.1 General structure of OPC server
调用开发工具接口函数的流程图如图 2所示。
图2 调用开发工具接口函数的流程图Fig.2 Flow chart of call development tool interface function
调用开发工具接口函数的具体步骤如下:
(1)用户调用UpdateRegistry实现服务器的注册。
(2)用户调用InitGKOPCServer初始化服务器。
(3)添加 OPC项,用户通过调用 CreateTag向OPC运行库按实际需要添加多个标签。
(4)标签的刷新操作,服务器运行过程中通过调用 UpdateTag函数不断刷新标签。
(5)服务器退出时,首先调用 NumbrClientConnections()函数检测是否还有客户连接,如果此时还有 OPC客户连接到此服务器上,则弹出对话框进行提示。在客户断开连接后,服务器要删除所有定义的 OPC标签,通过调用 RemoveTag()函数删除标签。最后调用UnregisterServer函数退出服务器应用程序,关闭连接器 (Sink),退出 CO M库。
运行 OPC服务器,由服务器界面可知服务器添加了 80个标签,它们表示和 Access数据库对应的 I/O点,这些数据是通过 OPC服务器中的数据源通信接口从 Access数据库里读取的,同时得到标签的时间戳。OPC服务器能正确地从现场设备得到数据且进行实时刷新。
服务器开发完成后对它的测试十分重要。测试过程是 OPC服务器将采集到的 Access数据库的数据传送给 OPC测试软件,并在测试软件上显示相应的数据。
本文介绍了采用 OPC服务器开发工具开发的OPC服务器的优点,基于该工具包设计了 OPC服务器,详细阐述了 OPC服务器的设计过程,并通过测试软件测试了 OPC服务器的正确性。通过快速开发工具开发的 OPC服务器,可以有效缩短开发周期,减少调试工作量。在软件调试中应该注意数据类型,采集周期是否正确设置。
[1]王平,李大庆,王颋.OPC服务器开发工具包软件的设计与实现 [J].计算机程序,2009,35(22):275-277.
Wang Ping,Li Daqing,Wang Ting.Design and implementation of OPC server toolkit software[J].Computer Engineering,2009,35(22):275-277.
[2]顾国昌,李庆军,张英辉.基于组件结构的 OPC数据访问服务器开发的研究 [J].测控技术,2004,23(7):56-58.
Gu Guochang,Li Qingjun,Zhang Yinghui.Research on Component-Based Architecture of OPC data access server[J]. Measurement and Control Technology,2004,23(7):56-58.
[3]Liu Quan,Xu De.How to use factorysoft OPC server toolkit to design an OPC data access server[J].Control and Automation,2004,(4):17-98
[4]SuiYongqiang,Guo Jianming.Developmentand application of OPC DA clientbased on VB and ActiveXtechnology[J].Journal of Wuhan University of Technology(Transportation Science&Engineering),2007,31(3):506-509.
[5]向冬,王润孝,秦现生.OPC服务器快速开发工具的研究与设计 [J].组合机床与自动化加工技术,2003,(7):50-51.
Xiang Dong,Wang Runxiao,Qin Xiansheng.Research and design of OPC server toolkit[J]. Modular Machine Tool and Autornatic Manufacturing,2003, (7):50-51.
Design and Realization of OPC Server Based on VB
Ren Weixi,Liang Weiping,Li Li
(School of Control and Computer Engineering,North China Electric Power University,Baoding 071003,China)
As the exploitation of source OPC server is too complex,to reach the purpose ofshortening the period of developing OPC server,using OPC server development tool-GKOPCServer.d ll,design and realize of OPC server.And the functional correctness ofOPC server was tested by test software.The advantages ofOPC server developed by development toolkitand the software structureand themain function ofmoduleswere analyzed.The results illustrate that the developmentefficiency of OPC server is improved as using the development toolkit,and it can give convenience to developers.
OPC;development toolkit;data communication;interface
TP319
A
2010-05-15。
任巍曦 (1984-),男,硕士研究生,研究方向为网络控制系统,E-mail:renweixi2008@163.com。