任巍曦,梁偉平,李 立
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院,河北 保定 071003)
基于 VB的 OPC服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
任巍曦,梁偉平,李 立
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院,河北 保定 071003)
由于源碼級(jí)的OPC服務(wù)器開(kāi)發(fā)過(guò)程非常復(fù)雜,為了達(dá)到縮短O(píng)PC服務(wù)器開(kāi)發(fā)周期,采用快速開(kāi)發(fā)工具GKOPCServer.dll,對(duì) OPC服務(wù)器進(jìn)行了設(shè)計(jì)與實(shí)現(xiàn)。通過(guò)測(cè)試軟件的測(cè)試,得出了 OPC服務(wù)器的正確性。分析了采用開(kāi)發(fā)工具包開(kāi)發(fā)OPC服務(wù)器的優(yōu)點(diǎn)以及軟件的結(jié)構(gòu)和主要模塊的功能。結(jié)果表明:快速開(kāi)發(fā)工具包提高了OPC服務(wù)器的開(kāi)發(fā)效率,給開(kāi)發(fā)人員提供了極大的方便。
OPC;開(kāi)發(fā)工具包;數(shù)據(jù)通信;接口
目前,工控領(lǐng)域的 OPC(OLE for Process Control,用于過(guò)程控制的對(duì)象鏈接和嵌入)服務(wù)器的開(kāi)發(fā)一般可分為快速開(kāi)發(fā)方式和直接開(kāi)發(fā)方式??焖匍_(kāi)發(fā)方式就是利用某些軟件開(kāi)發(fā)商提供的快速開(kāi)發(fā)工具,把服務(wù)器的對(duì)象與接口部分進(jìn)行封裝,使用戶開(kāi)發(fā) OPC服務(wù)器的工作集中在自己關(guān)注的數(shù)據(jù)采集任務(wù)上來(lái)。直接開(kāi)發(fā)方式即源碼級(jí)開(kāi)發(fā),開(kāi)發(fā)人員根據(jù) OPC基金會(huì)免費(fèi)提供的規(guī)范在通用開(kāi)發(fā)環(huán)境中編寫(xiě)程序代碼來(lái)實(shí)現(xiàn) OPC服務(wù)器規(guī)范。這需要開(kāi)發(fā)人員了解 OPC規(guī)范的許多細(xì)節(jié),難度大、周期長(zhǎng)[1]?;谝陨戏治霾捎昧丝焖匍_(kāi)發(fā)工具 GKOPCServer.dll來(lái)開(kāi)發(fā) OPC服務(wù)器。
GKOPCServer.dll是一個(gè)快速開(kāi)發(fā)OPC服務(wù)器的工具包,封裝了所有關(guān)于 CO M和 OPC的技術(shù)細(xì)節(jié)。該工具包其實(shí)就是一個(gè)動(dòng)態(tài)鏈接庫(kù) (DLL),支持OPC DA1.0和 OPC DA 2.0數(shù)據(jù)存取規(guī)范定義的所有接口,而且還提供了一些把定制數(shù)據(jù)集成到 OPC服務(wù)器的易于使用的API函數(shù)。
用該工具包開(kāi)發(fā) OPC服務(wù)器的優(yōu)點(diǎn)在于:它將 Microsoft公司的 OLE,CO M,DCO M技術(shù)和OPC的技術(shù)細(xì)節(jié)隱藏起來(lái),使開(kāi)發(fā) OPC服務(wù)器的工作集中在特定的數(shù)據(jù)采集任務(wù)上來(lái)。開(kāi)發(fā)人員利用該工具包開(kāi)發(fā) OPC服務(wù)器時(shí)無(wú)需考慮許多涉及到底層接口實(shí)現(xiàn)方面的工作,也不必掌握 ATL,CO M/DCO M及 OPC技術(shù)的細(xì)節(jié),只需具有基本的編程基礎(chǔ)即可。該工具包支持多種開(kāi)發(fā)工具,如 VC,VB等[2],利用這個(gè)工具包開(kāi)發(fā)人員也可以很容易的實(shí)現(xiàn)對(duì)現(xiàn)有系統(tǒng)的改造。這種開(kāi)發(fā)方式縮短了 OPC服務(wù)器程序的開(kāi)發(fā)周期,提高了開(kāi)發(fā)效率,從而給開(kāi)發(fā)人員提供了極大的方便,同時(shí)也節(jié)省了投資成本。但快速開(kāi)發(fā)工具中某些實(shí)現(xiàn)部分是通過(guò)動(dòng)態(tài)鏈接庫(kù)的形式封裝起來(lái),當(dāng)用戶需要增加某些特定功能時(shí)會(huì)受到一定的限制[3]。
OPC服務(wù)器開(kāi)發(fā)工具包軟件動(dòng)態(tài)鏈接庫(kù) GKOPCServer.d ll包含一些功能函數(shù)模塊:初始化與注冊(cè)函數(shù)、OPC項(xiàng)函數(shù)、輔助功能函數(shù)、調(diào)用返回定義,其設(shè)計(jì)如下:
(1)初始化函數(shù)。Declare Function InitGKOPCsvr Lib“GKOPCServer”Alias“_InitGKOPCsvr@8” (By-Ref CLSID_Svr As Byte,ByVal ServerRate As Long)As Long:這個(gè)函數(shù)實(shí)現(xiàn)對(duì)DCO M的初始化并且創(chuàng)建OPC服務(wù)器對(duì)象。其中 CLSID_Svr是 OPC服務(wù)器的類標(biāo)識(shí) (CLSID),用于 OPC客戶連接服務(wù)器;參數(shù)ServerRate定義了客戶的數(shù)據(jù)刷新速率,其單位是ms。
(2)注冊(cè)函數(shù)。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:這個(gè)函數(shù)封裝了 Windows注冊(cè)函數(shù),用于OPC服務(wù)器的注冊(cè)。其中參數(shù) CLSID_Svr是 OPC服務(wù)器的類標(biāo)識(shí);參數(shù) Name定義了服務(wù)器的名字;參數(shù) Descr可以是任何描述服務(wù)器的字符串;參數(shù)ExePath定義了可執(zhí)行程序的完整的 windows路徑。
(3)OPC項(xiàng)函數(shù)。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:這是一個(gè)在動(dòng)態(tài)鏈接庫(kù)里創(chuàng)建過(guò)程標(biāo)簽的函數(shù),參數(shù) Name定義了 OPC客戶要訪問(wèn)的過(guò)程標(biāo)簽;參數(shù) Value定義了標(biāo)簽的初始值,為 VARIANT類型;參數(shù) InitialQuality定義了標(biāo)簽的 OPC屬性標(biāo)志;參數(shù) IsWritable定義了標(biāo)簽是否可寫(xiě)。
Declare Function UpdateTag Lib“GKOPCServer”Alias“_UpdateTag@24” (ByVal TagHandle As Long,ByVal Value As Variant,ByVal Quality As Integer)As Long:這個(gè)函數(shù)的調(diào)用可以實(shí)現(xiàn)對(duì)過(guò)程標(biāo)簽的數(shù)據(jù)刷新。參數(shù) TagHandle是點(diǎn)句柄,通過(guò) CreateTag函數(shù)得到;參數(shù)Value是點(diǎn)的值,就是來(lái)自現(xiàn)場(chǎng)硬件的數(shù)據(jù);參數(shù) Quality是點(diǎn)的屬性條件。
Declare Function RemoveTag Lib“GKOPCServer” Alias“_RemoveTag@4” (ByVal TagHand le As Long)As Long:該函數(shù)從 DLL中刪除一個(gè)過(guò)程標(biāo)簽。如果在刪除過(guò)程標(biāo)簽時(shí)有客戶連接正在訪問(wèn)這個(gè)標(biāo)簽,則這個(gè)連接仍然有效,但是將沒(méi)有新的數(shù)據(jù)來(lái)刷新這個(gè)連接。參數(shù) TagHandle是點(diǎn)句柄,通過(guò) CreateTag函數(shù)得到。
(4)輔助功能函數(shù)。Declare Function Reset-ServerRate Lib“GKOPCServer” Alias“_Reset-ServerRate@4”(ByVal ServerRate As Long)As Long:該函數(shù)用于改變服務(wù)器應(yīng)用的數(shù)據(jù)刷新率。
Declare Function SetGKVendorInfo Lib“GKOPCServer” Alias“_SetGKVendorInfo@4”(ByRef VendorInfo As Byte)As Long:該函數(shù)設(shè)置一些服務(wù)器的版本信息。
(5)調(diào)用返回定義。明確地定義了 DLL用于返回給服務(wù)器程序的調(diào)用返回的具體含義,以實(shí)現(xiàn)客戶應(yīng)用與服務(wù)器應(yīng)用之間的數(shù)據(jù)交換。
Declare Function EnableWriteNotificatio n Lib“GKOPCServer” Alias“_EnableWrite Notification@8”(ByVal Callback As Long,ByVal ConvertToNative As Long)As Long:當(dāng) OPC客戶寫(xiě)一個(gè)已定義的標(biāo)簽時(shí),這個(gè)函數(shù)產(chǎn)生一個(gè)來(lái)自DLL的調(diào)用返回。
OPC服務(wù)器主要由 3部分組成:即 OPC標(biāo)準(zhǔn)接口、服務(wù)器界面和專用數(shù)據(jù)源通信接口[4]。功能如下:
(1)OPC標(biāo)準(zhǔn)接口:實(shí)現(xiàn) OPC數(shù)據(jù)存取規(guī)范規(guī)定的功能。本文將通用接口做成 DLL的形式,用戶可以很方便地調(diào)用該模塊。
(2)服務(wù)器界面:主要完成各標(biāo)簽的注冊(cè)、添加、刷新及退出等操作。
(3)專用數(shù)據(jù)源通信接口:該模塊是一個(gè)針對(duì)具體的數(shù)據(jù)源而開(kāi)發(fā)的通信程序。本文在 VisualBasic6.0開(kāi)發(fā)環(huán)境中通過(guò)編程實(shí)現(xiàn) OPC服務(wù)器與 Access數(shù)據(jù)庫(kù)的通信。
將上述 3部分集成到一個(gè)應(yīng)用程序中,設(shè)計(jì)OPC服務(wù)器的總體結(jié)構(gòu)如圖 1所示[5]。

圖1 OPC服務(wù)器的總體結(jié)構(gòu)Fig.1 General structure of OPC server
調(diào)用開(kāi)發(fā)工具接口函數(shù)的流程圖如圖 2所示。

圖2 調(diào)用開(kāi)發(fā)工具接口函數(shù)的流程圖Fig.2 Flow chart of call development tool interface function
調(diào)用開(kāi)發(fā)工具接口函數(shù)的具體步驟如下:
(1)用戶調(diào)用UpdateRegistry實(shí)現(xiàn)服務(wù)器的注冊(cè)。
(2)用戶調(diào)用InitGKOPCServer初始化服務(wù)器。
(3)添加 OPC項(xiàng),用戶通過(guò)調(diào)用 CreateTag向OPC運(yùn)行庫(kù)按實(shí)際需要添加多個(gè)標(biāo)簽。
(4)標(biāo)簽的刷新操作,服務(wù)器運(yùn)行過(guò)程中通過(guò)調(diào)用 UpdateTag函數(shù)不斷刷新標(biāo)簽。
(5)服務(wù)器退出時(shí),首先調(diào)用 NumbrClientConnections()函數(shù)檢測(cè)是否還有客戶連接,如果此時(shí)還有 OPC客戶連接到此服務(wù)器上,則彈出對(duì)話框進(jìn)行提示。在客戶斷開(kāi)連接后,服務(wù)器要?jiǎng)h除所有定義的 OPC標(biāo)簽,通過(guò)調(diào)用 RemoveTag()函數(shù)刪除標(biāo)簽。最后調(diào)用UnregisterServer函數(shù)退出服務(wù)器應(yīng)用程序,關(guān)閉連接器 (Sink),退出 CO M庫(kù)。
運(yùn)行 OPC服務(wù)器,由服務(wù)器界面可知服務(wù)器添加了 80個(gè)標(biāo)簽,它們表示和 Access數(shù)據(jù)庫(kù)對(duì)應(yīng)的 I/O點(diǎn),這些數(shù)據(jù)是通過(guò) OPC服務(wù)器中的數(shù)據(jù)源通信接口從 Access數(shù)據(jù)庫(kù)里讀取的,同時(shí)得到標(biāo)簽的時(shí)間戳。OPC服務(wù)器能正確地從現(xiàn)場(chǎng)設(shè)備得到數(shù)據(jù)且進(jìn)行實(shí)時(shí)刷新。
服務(wù)器開(kāi)發(fā)完成后對(duì)它的測(cè)試十分重要。測(cè)試過(guò)程是 OPC服務(wù)器將采集到的 Access數(shù)據(jù)庫(kù)的數(shù)據(jù)傳送給 OPC測(cè)試軟件,并在測(cè)試軟件上顯示相應(yīng)的數(shù)據(jù)。
本文介紹了采用 OPC服務(wù)器開(kāi)發(fā)工具開(kāi)發(fā)的OPC服務(wù)器的優(yōu)點(diǎn),基于該工具包設(shè)計(jì)了 OPC服務(wù)器,詳細(xì)闡述了 OPC服務(wù)器的設(shè)計(jì)過(guò)程,并通過(guò)測(cè)試軟件測(cè)試了 OPC服務(wù)器的正確性。通過(guò)快速開(kāi)發(fā)工具開(kāi)發(fā)的 OPC服務(wù)器,可以有效縮短開(kāi)發(fā)周期,減少調(diào)試工作量。在軟件調(diào)試中應(yīng)該注意數(shù)據(jù)類型,采集周期是否正確設(shè)置。
[1]王平,李大慶,王颋.OPC服務(wù)器開(kāi)發(fā)工具包軟件的設(shè)計(jì)與實(shí)現(xiàn) [J].計(jì)算機(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]顧國(guó)昌,李慶軍,張英輝.基于組件結(jié)構(gòu)的 OPC數(shù)據(jù)訪問(wèn)服務(wù)器開(kāi)發(fā)的研究 [J].測(cè)控技術(shù),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]向冬,王潤(rùn)孝,秦現(xiàn)生.OPC服務(wù)器快速開(kāi)發(fā)工具的研究與設(shè)計(jì) [J].組合機(jī)床與自動(dòng)化加工技術(shù),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-),男,碩士研究生,研究方向?yàn)榫W(wǎng)絡(luò)控制系統(tǒng),E-mail:renweixi2008@163.com。