任巍曦,梁偉平,李 立
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院,河北 保定 071003)
基于 VB的 OPC服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)
任巍曦,梁偉平,李 立
(華北電力大學(xué)控制與計(jì)算機(jī)工程學(xué)院,河北 保定 071003)
由于源碼級的OPC服務(wù)器開發(fā)過程非常復(fù)雜,為了達(dá)到縮短OPC服務(wù)器開發(fā)周期,采用快速開發(fā)工具GKOPCServer.dll,對 OPC服務(wù)器進(jìn)行了設(shè)計(jì)與實(shí)現(xiàn)。通過測試軟件的測試,得出了 OPC服務(wù)器的正確性。分析了采用開發(fā)工具包開發(fā)OPC服務(wù)器的優(yōu)點(diǎn)以及軟件的結(jié)構(gòu)和主要模塊的功能。結(jié)果表明:快速開發(fā)工具包提高了OPC服務(wù)器的開發(fā)效率,給開發(fā)人員提供了極大的方便。
OPC;開發(fā)工具包;數(shù)據(jù)通信;接口
目前,工控領(lǐng)域的 OPC(OLE for Process Control,用于過程控制的對象鏈接和嵌入)服務(wù)器的開發(fā)一般可分為快速開發(fā)方式和直接開發(fā)方式??焖匍_發(fā)方式就是利用某些軟件開發(fā)商提供的快速開發(fā)工具,把服務(wù)器的對象與接口部分進(jìn)行封裝,使用戶開發(fā) OPC服務(wù)器的工作集中在自己關(guān)注的數(shù)據(jù)采集任務(wù)上來。直接開發(fā)方式即源碼級開發(fā),開發(fā)人員根據(jù) OPC基金會(huì)免費(fèi)提供的規(guī)范在通用開發(fā)環(huán)境中編寫程序代碼來實(shí)現(xiàn) OPC服務(wù)器規(guī)范。這需要開發(fā)人員了解 OPC規(guī)范的許多細(xì)節(jié),難度大、周期長[1]。基于以上分析采用了快速開發(fā)工具 GKOPCServer.dll來開發(fā) OPC服務(wù)器。
GKOPCServer.dll是一個(gè)快速開發(fā)OPC服務(wù)器的工具包,封裝了所有關(guān)于 CO M和 OPC的技術(shù)細(xì)節(jié)。該工具包其實(shí)就是一個(gè)動(dòng)態(tài)鏈接庫 (DLL),支持OPC DA1.0和 OPC DA 2.0數(shù)據(jù)存取規(guī)范定義的所有接口,而且還提供了一些把定制數(shù)據(jù)集成到 OPC服務(wù)器的易于使用的API函數(shù)。
用該工具包開發(fā) OPC服務(wù)器的優(yōu)點(diǎn)在于:它將 Microsoft公司的 OLE,CO M,DCO M技術(shù)和OPC的技術(shù)細(xì)節(jié)隱藏起來,使開發(fā) OPC服務(wù)器的工作集中在特定的數(shù)據(jù)采集任務(wù)上來。開發(fā)人員利用該工具包開發(fā) OPC服務(wù)器時(shí)無需考慮許多涉及到底層接口實(shí)現(xiàn)方面的工作,也不必掌握 ATL,CO M/DCO M及 OPC技術(shù)的細(xì)節(jié),只需具有基本的編程基礎(chǔ)即可。該工具包支持多種開發(fā)工具,如 VC,VB等[2],利用這個(gè)工具包開發(fā)人員也可以很容易的實(shí)現(xiàn)對現(xiàn)有系統(tǒng)的改造。這種開發(fā)方式縮短了 OPC服務(wù)器程序的開發(fā)周期,提高了開發(fā)效率,從而給開發(fā)人員提供了極大的方便,同時(shí)也節(jié)省了投資成本。但快速開發(fā)工具中某些實(shí)現(xiàn)部分是通過動(dòng)態(tài)鏈接庫的形式封裝起來,當(dāng)用戶需要增加某些特定功能時(shí)會(huì)受到一定的限制[3]。
OPC服務(wù)器開發(fā)工具包軟件動(dòng)態(tài)鏈接庫 GKOPCServer.d ll包含一些功能函數(shù)模塊:初始化與注冊函數(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)對DCO M的初始化并且創(chuàng)建OPC服務(wù)器對象。其中 CLSID_Svr是 OPC服務(wù)器的類標(biāo)識 (CLSID),用于 OPC客戶連接服務(wù)器;參數(shù)ServerRate定義了客戶的數(shù)據(jù)刷新速率,其單位是ms。
(2)注冊函數(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注冊函數(shù),用于OPC服務(wù)器的注冊。其中參數(shù) CLSID_Svr是 OPC服務(wù)器的類標(biāo)識;參數(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)鏈接庫里創(chuàng)建過程標(biāo)簽的函數(shù),參數(shù) Name定義了 OPC客戶要訪問的過程標(biāo)簽;參數(shù) Value定義了標(biāo)簽的初始值,為 VARIANT類型;參數(shù) InitialQuality定義了標(biāo)簽的 OPC屬性標(biāo)志;參數(shù) IsWritable定義了標(biāo)簽是否可寫。
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)對過程標(biāo)簽的數(shù)據(jù)刷新。參數(shù) TagHandle是點(diǎn)句柄,通過 CreateTag函數(shù)得到;參數(shù)Value是點(diǎn)的值,就是來自現(xiàn)場硬件的數(shù)據(jù);參數(shù) Quality是點(diǎn)的屬性條件。
Declare Function RemoveTag Lib“GKOPCServer” Alias“_RemoveTag@4” (ByVal TagHand le As Long)As Long:該函數(shù)從 DLL中刪除一個(gè)過程標(biāo)簽。如果在刪除過程標(biāo)簽時(shí)有客戶連接正在訪問這個(gè)標(biāo)簽,則這個(gè)連接仍然有效,但是將沒有新的數(shù)據(jù)來刷新這個(gè)連接。參數(shù) TagHandle是點(diǎn)句柄,通過 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客戶寫一個(gè)已定義的標(biāo)簽時(shí),這個(gè)函數(shù)產(chǎn)生一個(gè)來自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)簽的注冊、添加、刷新及退出等操作。
(3)專用數(shù)據(jù)源通信接口:該模塊是一個(gè)針對具體的數(shù)據(jù)源而開發(fā)的通信程序。本文在 VisualBasic6.0開發(fā)環(huán)境中通過編程實(shí)現(xiàn) OPC服務(wù)器與 Access數(shù)據(jù)庫的通信。
將上述 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)用開發(fā)工具接口函數(shù)的流程圖如圖 2所示。
圖2 調(diào)用開發(fā)工具接口函數(shù)的流程圖Fig.2 Flow chart of call development tool interface function
調(diào)用開發(fā)工具接口函數(shù)的具體步驟如下:
(1)用戶調(diào)用UpdateRegistry實(shí)現(xiàn)服務(wù)器的注冊。
(2)用戶調(diào)用InitGKOPCServer初始化服務(wù)器。
(3)添加 OPC項(xiàng),用戶通過調(diào)用 CreateTag向OPC運(yùn)行庫按實(shí)際需要添加多個(gè)標(biāo)簽。
(4)標(biāo)簽的刷新操作,服務(wù)器運(yùn)行過程中通過調(diào)用 UpdateTag函數(shù)不斷刷新標(biāo)簽。
(5)服務(wù)器退出時(shí),首先調(diào)用 NumbrClientConnections()函數(shù)檢測是否還有客戶連接,如果此時(shí)還有 OPC客戶連接到此服務(wù)器上,則彈出對話框進(jìn)行提示。在客戶斷開連接后,服務(wù)器要?jiǎng)h除所有定義的 OPC標(biāo)簽,通過調(diào)用 RemoveTag()函數(shù)刪除標(biāo)簽。最后調(diào)用UnregisterServer函數(shù)退出服務(wù)器應(yīng)用程序,關(guān)閉連接器 (Sink),退出 CO M庫。
運(yùn)行 OPC服務(wù)器,由服務(wù)器界面可知服務(wù)器添加了 80個(gè)標(biāo)簽,它們表示和 Access數(shù)據(jù)庫對應(yīng)的 I/O點(diǎn),這些數(shù)據(jù)是通過 OPC服務(wù)器中的數(shù)據(jù)源通信接口從 Access數(shù)據(jù)庫里讀取的,同時(shí)得到標(biāo)簽的時(shí)間戳。OPC服務(wù)器能正確地從現(xiàn)場設(shè)備得到數(shù)據(jù)且進(jìn)行實(shí)時(shí)刷新。
服務(wù)器開發(fā)完成后對它的測試十分重要。測試過程是 OPC服務(wù)器將采集到的 Access數(shù)據(jù)庫的數(shù)據(jù)傳送給 OPC測試軟件,并在測試軟件上顯示相應(yīng)的數(shù)據(jù)。
本文介紹了采用 OPC服務(wù)器開發(fā)工具開發(fā)的OPC服務(wù)器的優(yōu)點(diǎn),基于該工具包設(shè)計(jì)了 OPC服務(wù)器,詳細(xì)闡述了 OPC服務(wù)器的設(shè)計(jì)過程,并通過測試軟件測試了 OPC服務(wù)器的正確性。通過快速開發(fā)工具開發(fā)的 OPC服務(wù)器,可以有效縮短開發(fā)周期,減少調(diào)試工作量。在軟件調(diào)試中應(yīng)該注意數(shù)據(jù)類型,采集周期是否正確設(shè)置。
[1]王平,李大慶,王颋.OPC服務(wù)器開發(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]顧國昌,李慶軍,張英輝.基于組件結(jié)構(gòu)的 OPC數(shù)據(jù)訪問服務(wù)器開發(fā)的研究 [J].測控技術(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]向冬,王潤孝,秦現(xiàn)生.OPC服務(wù)器快速開發(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。