用Delphi开发OPC客户端工具的方法研究
用Delphi開發OPC客戶端工具的方法研究[1]<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
王海瑞 鐘家玉
(昆明理工大學信息及自動化學院,昆明650093)
摘要: 本文通過介紹OPC技術的工作原理,結合OPC客戶端的工作機制,給出OPC客戶端的開發方法及在的Delphi的具體實現,提出了OPC客戶端開發工具的設計方案,并實現了OPC客戶端開發工具的接口函數,可以使OPC客戶端開發者可以輕松的開發OPC客戶程序。
關鍵詞: OPC、OPC客戶端、開發工具、COM組件
Abstract: This article provides the way of exploring OPC data access server and its fulfillment in Delphi via the introduction of the working principles of OPC technology combined with the working mechanism of OPC data access server. In addition, it sets forth its designing scheme and the interface functions of OPC toolkit at the same time in order to facilitate the developers of OPC data access server.
Key Words: OPC、OPC Client、Develop Toolkit Component object Model
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服務)。
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
任何一個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對象,系統將會自動釋放。
4、OPC客戶端開發工具的實現
OPC客戶端開發工具的目的是將開發OPC客戶端的技術細節封裝起來,使客戶的開發工作集中在自己特定的數據處理任務上來。目前大多數小型控制系統的數據處理及顯示程序都由用戶自己編寫,而OPC技術在國際工業控制領域中的使用已經相當廣泛,大多數硬件廠家度提供了OPC數據服務器,部分可以直接使用,而工控組態軟件雖然支持OPC技術,但這些組態軟件的價格十分昂貴,對于小型工控系統的成本過高,如果能提供OPC客戶端開發工具,小型工控的成本將會大幅下降。所以有必要研究OPC客戶端開發工具的開發方法。
OPC客戶端開發工具通常可以分以兩種方式存在,一種以源代碼形式存在,另一種以二進制的形式存在(動態鏈接庫或組件形式)。以源代碼形式存在的OPC客戶端開發工具一般包括OPC客戶端實現的全部源代碼。這種形式使用起來對于程序設計來說比較靈活,用戶可以更具自己的需要進行開發,但是源代碼往往是某一種語言的源代碼,用戶在開發OPC客戶端程序時一般要求使用與源代碼相同的開發語言,開發起來對用戶的要求很高,源代碼對于語言級的開發通用性低。而以二進制的形式存在(動態鏈接庫或組件形式)的OPC客戶端開發工具的通用性強,對開發環境的要求較小,可以在任意支持動態鏈接庫或組件形式的環境下使用,開發者只要使用動態連接庫的輸出函數或組件的接口函數即可完成OPC客戶端程序的開發,這種方法使用簡單,缺少靈活性,但通常能夠滿足多數用戶的開發需求。
根據OPC客戶端的工作流程,利用Delphi開發工具作者開發了一個完整的OPC客戶端開發工具,該工具分別以動態鏈接庫和組件形式存在,以供不同的開發者使用。不論是以動態鏈接庫形式還是以組件形式存在,它們的接口函數是一致的。
1)?? OPC客戶端初始化函數InitializeServer的功能是在使用開發工具之前,必須使用初使化函數對開發工具進行初使化,提供OPC服務器刷新率、OPC服務器的程序信息(如CLSID)、服務器的版本信息等。
2)?? OPC客戶端添加組對象函數ServerAddGroup的功能是在初始化函數成功之后,調用此函數完成客戶端在現有OPC服務器下完成對組對象的添加和命名,以便后面的函數使用。
3)?? OPC客戶端添加組內ITEM 對象函數GroupAddItem的功能是在ServerAddGroup函數執行之后在添加的組對象內添加ITEM對象,以保證OPC客戶端能利用ReadOPCGroupItemValue函數和WriteOPCGroupItemValue函數完成對OPC服務器端變量的讀寫。
4)?? OPC客戶端刪除組內ITEM 對象函數GroupRemoveItem的功能是在客戶端不需要對OPC服務器端的變量進行讀寫后,需要利用此函數刪除組對象的ITEM對象,此函數的執行必須是在GroupAddItem執行成功之后才能執行。
5)?? OPC客戶端通過IDATAOBJECT實現回調函數GroupAdviseTime的功能是建立一個由IDataObject接口實現的OPC客戶端的組對象建立回調功能,使OPC服務器端的數據發生變化時,會自動通知OPC客戶端。該功能非常重要,是完成實時數據交換的保證。
6)?? OPC客戶端刪除已建立的由IDATAOBJECT接口實現回調函數GroupUnAdvise的功能是結束由GroupAdviseTime建立的回調功能。
7)?? OPC客戶端通過IConnectionPointContainer接口實現回調函數GroupAdvise2的功能是建立一個由IConnectionPointContainer 接口實現的的OPC客戶端的組對象建立回調功能,當OPC服務器端的數據發生變化時,會自動通知OPC客戶端。該功能非常重要,是完成實時數據交換的保證。
8)?? OPC客戶端刪除已建立的由IConnectionPointContainer接口實現回調函數GroupUnadvise2的功能是結束由GroupAdvise2函數建立的回調功能。
9)?? OPC客戶端讀取OPC服務器變量函數ReadOPCGroupItemValue的功能是從指定的OPC服務器中讀取指定的ITEM對象值。通過此函數,用戶可以及時獲得OPC服務器中的數據。
10)OPC客戶端設定OPC服務器變量函數WriteOPCGroupItemValue的功能是將OPC客戶端的數據用異步方式寫入到OPC服務器中去。通過此函數,用戶可以及時修改OPC服務器中的數據。
11)OPC客戶端工作結束函數DestroyServer的功能是將由InitializeServer函數初始化的服務器釋放,服務器與客戶端的連結便斷開。
5、結束語
OPC開發工具的出現,方便了工業控制軟件中的設計與集成,縮短了產品的開發周期。優秀的OPC開發工具將是國內工業控制領域中必不可少的工具軟件。同時OPC標準的本身也在不斷的改進,其范圍也越來越廣。OPC基金會現在已經頒布了數據訪問和報警事件標準,其它的OPC標準,如歷史數據OPC標準,也正在醞釀之中。OPC基金會發布的與微軟公司BizTalk體系兼容的XML(Extensible Markup Laguage)綱要,將Internet技術應用在工業控制中。相信在不久的將來,OPC技術及標準將應用于更加廣泛的領域,OPC開發工具也將向著多元化發展。OPC技術必將賦予現代工業控制軟件更強的生命活力。
參考文獻
1 Al Chisholm, A Technical Overview of the OPC Data Access Interface, ISA EXPO 98
2 OPC Foundation,OPC Data Access Custom Interface Standard ,Version 2.0。
3 OPC Foundation,OPC Data Access Automation Interface Standard ,Version 2.0。
4 OPC Foundation, Overview, Version 1.0
?
The research and method of OPC client development tool using <?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />DELPHI
(KunmingUniversity of Science and Technology,Kunming 650093)
WangHairui Zhong Jiayu
?
王海瑞 男 1969年8月生于山西省和順縣,副教授,在讀博士,主要從事計算機控制技術的研究和垃圾焚燒爐模糊神經控制的研究與應用。
聯系電話: 13888385529 或 0871-5115891
聯系地址:昆明理工大學信息自動化學院計算機系
聯系人 :王海瑞
郵政編碼:650093
Email:hrwang88@public.km.yn.cn
?????
[1] 云南省自然科學基金資助項目(項目編號:2001F0025M)
總結
以上是生活随笔為你收集整理的用Delphi开发OPC客户端工具的方法研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 内核
- 下一篇: Java Web Start入门基础教程