引言
OPC(OLE for Process Control)是工業(yè)自動(dòng)化過程中數(shù)據(jù)交換的一個(gè)標(biāo)準(zhǔn),OPC的出現(xiàn)為基于Windows平臺的組態(tài)軟件和基于現(xiàn)場控制的控制器之間的數(shù)據(jù)交換提供了確實(shí)可行的方法。在OPC出現(xiàn)之前,組態(tài)軟件為了能夠存取現(xiàn)場控制設(shè)備的數(shù)據(jù),組態(tài)軟件必須提供每一種相連控制設(shè)備的通訊驅(qū)動(dòng)程序,由于不同廠家控制設(shè)備使用的通訊協(xié)議不同,組態(tài)軟件必須為每一個(gè)控制設(shè)備開發(fā)專用的通訊DRIVER。目前流行的現(xiàn)場控制設(shè)備種類繁多,且產(chǎn)品不斷升級換代,往往給組態(tài)軟件的開發(fā)帶來了巨大的經(jīng)濟(jì)壓力和工作負(fù)擔(dān)。而不斷開發(fā)通訊DRIVER也不能滿足實(shí)際工作的需要,硬件開發(fā)商和組態(tài)軟件開發(fā)商急切需要一種具有高效性、可靠性、開放性、可互操作性的即插即用的設(shè)備驅(qū)動(dòng)程序。在這樣的大背景下,OPC工業(yè)標(biāo)準(zhǔn)應(yīng)運(yùn)而生,OPC工業(yè)標(biāo)準(zhǔn)的出現(xiàn)把開發(fā)訪問設(shè)備接口的任務(wù)放在硬件開發(fā)商或?qū)iT從事軟件開發(fā)的第三方廠家,以O(shè)PC服務(wù)器的形式提供給,組態(tài)軟件可以按照OPC服務(wù)器提供的接口訪問現(xiàn)場控制設(shè)備的數(shù)據(jù),避免了不停開發(fā)通訊DRIVER的問題,提高了系統(tǒng)的開放性和可互操作性。
1、OPC技術(shù)標(biāo)準(zhǔn)
OPC技術(shù)是以Microsoft公司的OLE/COM/DCOM技術(shù)為基礎(chǔ)的通訊標(biāo)準(zhǔn).OLE/COM是一種客戶/服務(wù)器模式,具有語言無關(guān)性、代碼重用性、易于集成性等優(yōu)點(diǎn).如圖l所示,OPC服務(wù)器中的代碼確定了服務(wù)器所存取的設(shè)備、數(shù)據(jù)和數(shù)據(jù)項(xiàng)的命名規(guī)則和服務(wù)器存取數(shù)據(jù)的細(xì)節(jié),不管現(xiàn)場設(shè)備以何種形式存在,客戶都以統(tǒng)一的方式去訪問服務(wù)器,從而保證軟件對客戶的透明性,客戶應(yīng)用程序僅需使用統(tǒng)一的標(biāo)準(zhǔn)接口和服務(wù)器通信,而并不需要知道底層的實(shí)現(xiàn)細(xì)節(jié)。通過OPC服務(wù)器,OPC客戶既可以直接讀寫現(xiàn)場控制設(shè)備的I/O數(shù)據(jù),也可操作SCADA、DCS等系統(tǒng)的端口變量(只要該系統(tǒng)提供OPC服務(wù))。
任何一個(gè)OPC客戶可連接到由多個(gè)OPC服務(wù)器上,每個(gè)OPC服務(wù)器也為多個(gè)OPC客戶服務(wù)。只要應(yīng)用軟件符合OPC技術(shù)標(biāo)準(zhǔn),不需要做任何修改就能訪問OPC服務(wù)器提供的數(shù)據(jù)。OPC技術(shù)標(biāo)準(zhǔn)包括客戶/服務(wù)器通訊使用的一整套的接口、屬性和方法。OPC技術(shù)支持分布式應(yīng)用和異構(gòu)環(huán)境下軟件的無縫連接和軟件的互操作性,使現(xiàn)場控制設(shè)備層、自動(dòng)化層以及組態(tài)軟件層之間的協(xié)同工作成為了可能.并且提供了工業(yè)自動(dòng)化應(yīng)用領(lǐng)域的統(tǒng)一數(shù)據(jù)傳輸平臺,使異構(gòu)系統(tǒng)之間的數(shù)據(jù)交換更為方便。
2、OPC的對象模型
OPC邏輯對象模型包括3類對象:OPC server對象、OPC group對象、OPC item對象,每類對象都包括一系列接口。
OPC Server對象提供了一種訪問數(shù)據(jù)的方法,它通過Iopcserver 、Opcbrowser、Ipersistfile向客戶提供接口。主要功能為:1)創(chuàng)建和管理OPC Group對象;2)管理服務(wù)器內(nèi)部的狀態(tài)信息;3)將服務(wù)器的錯(cuò)誤代碼翻譯成描述性語句;4)瀏覽OPC服務(wù)器內(nèi)部的數(shù)據(jù)組織結(jié)構(gòu)。從OPC Server對象的功能可以看出,OPC Server對象面向OPC服務(wù)器的技術(shù)細(xì)節(jié),基本獨(dú)立于實(shí)時(shí)數(shù)據(jù)源,可以統(tǒng)一實(shí)現(xiàn),其中數(shù)據(jù)的組織結(jié)構(gòu)與數(shù)據(jù)源屬性與具體數(shù)據(jù)源有關(guān),需要從用戶處獲取信息。OPC Server對象主要實(shí)現(xiàn)IUnknown和IOPC Server接口,OPC客戶通過OPC服務(wù)器的接口與OPC對象進(jìn)行通信.IOPCServer接口為OPC客戶提供了方便有效操作OPC組的方法。
OPC Group對象的主要功能表現(xiàn)為:1)管理OPC Group對象的內(nèi)部狀態(tài)信息;2)創(chuàng)建和管理Items對象。3)OPC服務(wù)器內(nèi)部的實(shí)時(shí)數(shù)據(jù)存取服務(wù)(同步與異步方式)。從OPC Group對象的功能可以看出,該對象面向OPC服務(wù)器中的數(shù)據(jù)存取信息,對實(shí)時(shí)數(shù)據(jù)源的依賴性很強(qiáng),需要從用戶數(shù)據(jù)源處獲取信息。OPC Group提供了客戶程序組織數(shù)據(jù)的手段.每個(gè)組中都可以定義一個(gè)或多個(gè)OPC Item。組有兩種類型:公共組(Public)和局部組(local),公共組可以被多個(gè)客戶共享,而局部組只能被一個(gè)客戶使用。OPC組中有以下幾個(gè)主要屬性:1)Name :組的名字 2)Active:組的激活狀態(tài)標(biāo)志 3)Update Rate OPC:服務(wù)器向客戶程序提交數(shù)據(jù)變化的刷新速率4)Percent Dead band:數(shù)據(jù)死區(qū),即能引起數(shù)據(jù)變化的最小數(shù)值百分比。
OPC ITEM 是非COM對象,在OPC標(biāo)準(zhǔn)中用來描述實(shí)時(shí)數(shù)據(jù),是客戶端不可見的對象。代表了與服務(wù)器中的數(shù)據(jù)的連接,它并不是數(shù)據(jù)源,而僅僅是與數(shù)據(jù)源的連接。每個(gè)項(xiàng)都有以下主要屬性:1) Active項(xiàng)的激活狀態(tài)2)Value項(xiàng)的數(shù)值3)類型為VARIANT;4)Quality項(xiàng)的品質(zhì),5)代表數(shù)值的可信度,類型為SHORT;6)TimeStamp時(shí)間戳,代表數(shù)據(jù)的存取時(shí)間。
OPC技術(shù)基礎(chǔ)包含了兩套接口:客戶化接口(Custom Interface)和自動(dòng)化接口(Automation Interface)??蛻艋涌谑且粋€(gè)OPC服務(wù)器所必須實(shí)現(xiàn)的接口,它描述了OPC組件對象的接口和其中的方法,適合C++和PASCAL語言設(shè)計(jì),并可實(shí)現(xiàn)最佳運(yùn)行性能的客戶應(yīng)用程序??蛻艋涌跊]有項(xiàng)對象,它對項(xiàng)的操作都是通過包容此項(xiàng)的組對象進(jìn)行的。自動(dòng)化接口是可選接口,它提供的是一個(gè)自動(dòng)配置和存取過程控制數(shù)據(jù)。只要是支持C0M對象的編程語言都能進(jìn)行OPC客戶端的開發(fā)。OPC提供了客戶化接口和自動(dòng)化接口,要進(jìn)行客戶端開發(fā)實(shí)際上就是對這兩套接口的聲明和調(diào)用。 自動(dòng)化接口封裝了C0M底層的許多實(shí)現(xiàn),使開發(fā)者能比較輕松的進(jìn)行數(shù)據(jù)訪問。
3、OPC客戶端的工作流程
由于OPC的結(jié)構(gòu)是一個(gè)典型的CLIENT/SERVER結(jié)構(gòu),其技術(shù)基礎(chǔ)是基于COM/DCOM技術(shù)的,所以O(shè)PC客戶端的開發(fā)與COM/DCOM編程大體相同。從OPC的工作機(jī)制可以知道,OPC客戶端的開發(fā)必須按下面的步驟處理。
1. 客戶端程序必須對DCOM進(jìn)行初始化設(shè)置,以保證OPC服務(wù)器端的回調(diào)函數(shù)不會被堵塞。
2.在正確初始化DCOM的基礎(chǔ)上,創(chuàng)建客戶化接口(Custom Interface),自動(dòng)化接口(Automation Interface)一般由已注冊在系統(tǒng)中的OPCProxy.dll文件自動(dòng)處理。完成OPC Server的創(chuàng)建。
3.在正確創(chuàng)建了客戶化接口(Custom Interface)后,客戶端程序可以為OPC Server對象創(chuàng)建一個(gè)OPC組對象(OPC GROUP)。
4.在正確創(chuàng)建了OPC組對象后,客戶端程序可以為OPC GROUP對象創(chuàng)建多個(gè)OPC ITEM對象。
5.為自動(dòng)化接口實(shí)現(xiàn)兩個(gè)方法:OndataChange和Onasync_WriteComplete,在數(shù)據(jù)發(fā)生變化或異步寫操作完成后可被調(diào)用。
6, 可以實(shí)現(xiàn)對OPC ITEM 數(shù)據(jù)的讀寫操作。
7, 在客戶端工作結(jié)束時(shí),清除OPC服務(wù)器對象中的GROUP對象,系統(tǒng)將會自動(dòng)釋放。
4、OPC客戶端開發(fā)工具的實(shí)現(xiàn)
OPC客戶端開發(fā)工具的目的是將開發(fā)OPC客戶端的技術(shù)細(xì)節(jié)封裝起來,使客戶的開發(fā)工作集中在自己特定的數(shù)據(jù)處理任務(wù)上來。目前大多數(shù)小型控制系統(tǒng)的數(shù)據(jù)處理及顯示程序都由用戶自己編寫,而OPC技術(shù)在國際工業(yè)控制領(lǐng)域中的使用已經(jīng)相當(dāng)廣泛,大多數(shù)硬件廠家度提供了OPC數(shù)據(jù)服務(wù)器,部分可以直接使用,而工控組態(tài)軟件雖然支持OPC技術(shù),但這些組態(tài)軟件的價(jià)格十分昂貴,對于小型工控系統(tǒng)的成本過高,如果能提供OPC客戶端開發(fā)工具,小型工控的成本將會大幅下降。所以有必要研究OPC客戶端開發(fā)工具的開發(fā)方法。
OPC客戶端開發(fā)工具通??梢苑忠詢煞N方式存在,一種以源代碼形式存在,另一種以二進(jìn)制的形式存在(動(dòng)態(tài)鏈接庫或組件形式)。以源代碼形式存在的OPC客戶端開發(fā)工具一般包括OPC客戶端實(shí)現(xiàn)的全部源代碼。這種形式使用起來對于程序設(shè)計(jì)來說比較靈活,用戶可以更具自己的需要進(jìn)行開發(fā),但是源代碼往往是某一種語言的源代碼,用戶在開發(fā)OPC客戶端程序時(shí)一般要求使用與源代碼相同的開發(fā)語言,開發(fā)起來對用戶的要求很高,源代碼對于語言級的開發(fā)通用性低。而以二進(jìn)制的形式存在(動(dòng)態(tài)鏈接庫或組件形式)的OPC客戶端開發(fā)工具的通用性強(qiáng),對開發(fā)環(huán)境的要求較小,可以在任意支持動(dòng)態(tài)鏈接庫或組件形式的環(huán)境下使用,開發(fā)者只要使用動(dòng)態(tài)連接庫的輸出函數(shù)或組件的接口函數(shù)即可完成OPC客戶端程序的開發(fā),這種方法使用簡單,缺少靈活性,但通常能夠滿足多數(shù)用戶的開發(fā)需求。
根據(jù)OPC客戶端的工作流程,利用Delphi開發(fā)工具作者開發(fā)了一個(gè)完整的OPC客戶端開發(fā)工具,該工具分別以動(dòng)態(tài)鏈接庫和組件形式存在,以供不同的開發(fā)者使用。不論是以動(dòng)態(tài)鏈接庫形式還是以組件形式存在,它們的接口函數(shù)是一致的。
1)OPC客戶端初始化函數(shù)InitializeServer的功能是在使用開發(fā)工具之前,必須使用初使化函數(shù)對開發(fā)工具進(jìn)行初使化,提供OPC服務(wù)器刷新率、OPC服務(wù)器的程序信息(如CLSID)、服務(wù)器的版本信息等。
2)OPC客戶端添加組對象函數(shù)ServerAddGroup的功能是在初始化函數(shù)成功之后,調(diào)用此函數(shù)完成客戶端在現(xiàn)有OPC服務(wù)器下完成對組對象的添加和命名,以便后面的函數(shù)使用。
3)OPC客戶端添加組內(nèi)ITEM 對象函數(shù)GroupAddItem的功能是在ServerAddGroup函數(shù)執(zhí)行之后在添加的組對象內(nèi)添加ITEM對象,以保證OPC客戶端能利用ReadOPCGroupItemValue函數(shù)和WriteOPCGroupItemValue函數(shù)完成對OPC服務(wù)器端變量的讀寫。
4)OPC客戶端刪除組內(nèi)ITEM 對象函數(shù)GroupRemoveItem的功能是在客戶端不需要對OPC服務(wù)器端的變量進(jìn)行讀寫后,需要利用此函數(shù)刪除組對象的ITEM對象,此函數(shù)的執(zhí)行必須是在GroupAddItem執(zhí)行成功之后才能執(zhí)行。
5)OPC客戶端通過IDATAOBJECT實(shí)現(xiàn)回調(diào)函數(shù)GroupAdviseTime的功能是建立一個(gè)由IDataObject接口實(shí)現(xiàn)的OPC客戶端的組對象建立回調(diào)功能,使OPC服務(wù)器端的數(shù)據(jù)發(fā)生變化時(shí),會自動(dòng)通知OPC客戶端。該功能非常重要,是完成實(shí)時(shí)數(shù)據(jù)交換的保證。
6)OPC客戶端刪除已建立的由IDATAOBJECT接口實(shí)現(xiàn)回調(diào)函數(shù)GroupUnAdvise的功能是結(jié)束由GroupAdviseTime建立的回調(diào)功能。
7)OPC客戶端通過IConnectionPointContainer接口實(shí)現(xiàn)回調(diào)函數(shù)GroupAdvise2的功能是建立一個(gè)由IConnectionPointContainer 接口實(shí)現(xiàn)的的OPC客戶端的組對象建立回調(diào)功能,當(dāng)OPC服務(wù)器端的數(shù)據(jù)發(fā)生變化時(shí),會自動(dòng)通知OPC客戶端。該功能非常重要,是完成實(shí)時(shí)數(shù)據(jù)交換的保證。
8)OPC客戶端刪除已建立的由IConnectionPointContainer接口實(shí)現(xiàn)回調(diào)函數(shù)GroupUnadvise2的功能是結(jié)束由GroupAdvise2函數(shù)建立的回調(diào)功能。
9)OPC客戶端讀取OPC服務(wù)器變量函數(shù)ReadOPCGroupItemValue的功能是從指定的OPC服務(wù)器中讀取指定的ITEM對象值。通過此函數(shù),用戶可以及時(shí)獲得OPC服務(wù)器中的數(shù)據(jù)。
10)OPC客戶端設(shè)定OPC服務(wù)器變量函數(shù)WriteOPCGroupItemValue的功能是將OPC客戶端的數(shù)據(jù)用異步方式寫入到OPC服務(wù)器中去。通過此函數(shù),用戶可以及時(shí)修改OPC服務(wù)器中的數(shù)據(jù)。
11)OPC客戶端工作結(jié)束函數(shù)DestroyServer的功能是將由InitializeServer函數(shù)初始化的服務(wù)器釋放,服務(wù)器與客戶端的連結(jié)便斷開。
5、結(jié)束語
OPC開發(fā)工具的出現(xiàn),方便了工業(yè)控制軟件中的設(shè)計(jì)與集成,縮短了產(chǎn)品的開發(fā)周期。優(yōu)秀的OPC開發(fā)工具將是國內(nèi)工業(yè)控制領(lǐng)域中必不可少的工具軟件。同時(shí)OPC標(biāo)準(zhǔn)的本身也在不斷的改進(jìn),其范圍也越來越廣。OPC基金會現(xiàn)在已經(jīng)頒布了數(shù)據(jù)訪問和報(bào)警事件標(biāo)準(zhǔn),其它的OPC標(biāo)準(zhǔn),如歷史數(shù)據(jù)OPC標(biāo)準(zhǔn),也正在醞釀之中。OPC基金會發(fā)布的與微軟公司BizTalk體系兼容的XML(Extensible Markup Laguage)綱要,將Internet技術(shù)應(yīng)用在工業(yè)控制中。相信在不久的將來,OPC技術(shù)及標(biāo)準(zhǔn)將應(yīng)用于更加廣泛的領(lǐng)域,OPC開發(fā)工具也將向著多元化發(fā)展。OPC技術(shù)必將賦予現(xiàn)代工業(yè)控制軟件更強(qiáng)的生命活力。
(審核編輯: 智匯李)
分享