??? 摘 要:在研究OPC技術(shù)規(guī)范的基礎(chǔ)上,利用OPC服務(wù)器快速開發(fā)工具KOSRDK設(shè)計(jì)了OPC服務(wù)器程序,采用工控組態(tài)軟件組態(tài)王開發(fā)了OPC客戶端應(yīng)用程序,設(shè)計(jì)構(gòu)建了具有開放接口功能的DCS監(jiān)控系統(tǒng)。
??? 關(guān)鍵詞:OPC;集散控制系統(tǒng);監(jiān)控系統(tǒng);組態(tài)王
?
??? 在工業(yè)控制領(lǐng)域,隨著生產(chǎn)規(guī)模的擴(kuò)大和系統(tǒng)復(fù)雜程度的提高,需要把種類豐富、數(shù)量眾多的軟件與硬件設(shè)備集成于系統(tǒng)之中。過去,為了實(shí)現(xiàn)不同生產(chǎn)裝置的集散控制系統(tǒng)DCS(Distributed Control System,)和數(shù)據(jù)采集接口之間的數(shù)據(jù)通信,需要花費(fèi)很多時(shí)間開發(fā)專用的通信接口程序,而OPC標(biāo)準(zhǔn)的出現(xiàn)解決了這一難題。
??? 基于OPC技術(shù)規(guī)范,設(shè)計(jì)構(gòu)建了具有開放接口功能的DCS監(jiān)控系統(tǒng)。利用OPC服務(wù)器快速開發(fā)工具KOSRDK在Visual C++ 6.0中設(shè)計(jì)了OPC服務(wù)器程序,實(shí)現(xiàn)了DCS監(jiān)控級(jí)設(shè)備對(duì)現(xiàn)場(chǎng)數(shù)據(jù)的實(shí)時(shí)采集。采用工控組態(tài)軟件組態(tài)王開發(fā)了OPC客戶端應(yīng)用程序,完成DCS操作員站的監(jiān)控畫面設(shè)計(jì)。
1 OPC規(guī)范
??? OPC(OLE(Object Linking and Embedding)for Process Control),是以O(shè)LE/COM/DCOM 機(jī)制作為應(yīng)用程序級(jí)的通信標(biāo)準(zhǔn),采用Client/Server模式,把開發(fā)訪問接口的任務(wù)放在硬件生產(chǎn)廠家或第三方廠家,以O(shè)PC服務(wù)器的形式提供給用戶,解決了軟、硬件廠商的矛盾,提高了系統(tǒng)的開放性和可互操作性[1]。OPC為工業(yè)控制設(shè)備與應(yīng)用軟件之間建立了統(tǒng)一的數(shù)據(jù)存取規(guī)范,這個(gè)接口規(guī)范不但能夠應(yīng)用于獨(dú)立計(jì)算機(jī),而且可以支持網(wǎng)絡(luò)上不同應(yīng)用程序之間的通信,以及不同平臺(tái)上應(yīng)用程序之間的通信[2],具有語言無關(guān)性、代碼重用性、易于集成性等優(yōu)點(diǎn)。OPC規(guī)范了接口函數(shù),不管現(xiàn)場(chǎng)設(shè)備以何種形式存在,客戶都可以統(tǒng)一的方式訪問,從而保證軟件對(duì)客戶的透明性,使得用戶完全從低層的開發(fā)中脫離出來[3]。
??? OPC基金會(huì)已經(jīng)推出了OPC數(shù)據(jù)訪問、報(bào)警與事件、歷史數(shù)據(jù)訪問、批量過程、數(shù)據(jù)交換、安全規(guī)范和XML-DA規(guī)范[4],本文主要應(yīng)用OPC數(shù)據(jù)訪問規(guī)范進(jìn)行DCS監(jiān)控系統(tǒng)的設(shè)計(jì)。
??? OPC數(shù)據(jù)訪問規(guī)范主要解決服務(wù)器和客戶端之間實(shí)時(shí)數(shù)據(jù)存取問題。在傳統(tǒng)監(jiān)控系統(tǒng)的基礎(chǔ)上,應(yīng)用OPC技術(shù)規(guī)范數(shù)據(jù)存取機(jī)制,可以實(shí)現(xiàn)數(shù)據(jù)共享,提升監(jiān)控系統(tǒng)的開放性和設(shè)備兼容性。當(dāng)各應(yīng)用軟件都采用OPC的接口規(guī)范時(shí),它們便可通過OPC接口方便地實(shí)現(xiàn)連接,從而增強(qiáng)軟件間的數(shù)據(jù)交換效率。
2 DCS監(jiān)控系統(tǒng)的設(shè)計(jì)
2.1 DCS的總體構(gòu)成
??? 面向中小型用戶的需求進(jìn)行集成開發(fā)的集散控制系統(tǒng)主要由現(xiàn)場(chǎng)控制級(jí)和監(jiān)控級(jí)構(gòu)成。
??? 現(xiàn)場(chǎng)控制級(jí)硬件裝置采用臺(tái)灣研華公司MIC-2000系列的機(jī)箱、核心控制器和I/O 板卡。控制機(jī)箱為MIC-2000/11,自帶電源,共有11個(gè)插槽,ISA總線為機(jī)箱內(nèi)部印刷電路板,把控制器和 I/O 板卡連接在一起。核心控制器采用一體化集成網(wǎng)絡(luò)功能的MIC-2352模塊板,提供了一個(gè)小尺寸、全功能、低費(fèi)用、在有限空間內(nèi)支持網(wǎng)絡(luò)和顯示器的全方位的板上解決方案。本系統(tǒng)中,將嵌入式實(shí)時(shí)操作系統(tǒng) Windows CE.NET和基于Embedded VC開發(fā)的應(yīng)用程序固化在一張256MB電子盤上。I/O 板卡主要有模擬量輸入模塊(AI)MIC-2718、模擬量輸出模塊(AO)MIC-2728、數(shù)字量輸入模塊(DI)MIC-2732、數(shù)字量輸出模塊(DO)MIC-2752和符合RS-485總線協(xié)議的遠(yuǎn)程采集ADAM4000系列模塊[5]。
??? 為解決傳統(tǒng)系統(tǒng)開放性差和互操作性不強(qiáng)的問題,基于OPC技術(shù)構(gòu)建了監(jiān)控系統(tǒng)。選用高性能PC機(jī),Windows XP操作系統(tǒng),其軟件結(jié)構(gòu)如圖1所示。
?

??? 基于OPC技術(shù)的監(jiān)控系統(tǒng)開發(fā)劃分為3層進(jìn)行:(1)OPC數(shù)據(jù)源層;(2)OPC服務(wù)器層;(3)OPC客戶層。實(shí)現(xiàn)了各廠商間的大量設(shè)備互聯(lián)和過程數(shù)據(jù)共享,構(gòu)成完全意義上的全開放系統(tǒng),解決了產(chǎn)品兼容性問題。
2.2 OPC數(shù)據(jù)源層設(shè)計(jì)
??? 數(shù)據(jù)源層的硬件設(shè)備是控制站機(jī)柜,通過各種I/O板卡(MIC2000系列)對(duì)現(xiàn)場(chǎng)設(shè)備進(jìn)行連接,作為數(shù)據(jù)源,通信協(xié)議符合TCP/IP標(biāo)準(zhǔn)。控制站機(jī)柜通過KOSRDK.DLL的接口函數(shù)將數(shù)據(jù)傳到數(shù)據(jù)緩沖區(qū),形成本地列表,并經(jīng)過OPC服務(wù)器的驅(qū)動(dòng)將數(shù)據(jù)進(jìn)行傳遞,生成OPC服務(wù)器列表,供客戶層的組態(tài)軟件使用。
2.3 OPC服務(wù)器層設(shè)計(jì)
??? OPC服務(wù)器屏蔽了現(xiàn)場(chǎng)數(shù)據(jù)源層的設(shè)備驅(qū)動(dòng)程序,應(yīng)用程序開發(fā)人員看到的只是OPC服務(wù)器提供的統(tǒng)一接口,不必關(guān)心現(xiàn)場(chǎng)設(shè)備的驅(qū)動(dòng)程序。利用OPC服務(wù)器快速開發(fā)工具包KOSRDK進(jìn)行OPC服務(wù)器的開發(fā)。KOSRDK工具使用面向?qū)ο蟮募夹g(shù),并將OPC規(guī)范所定義的COM接口實(shí)現(xiàn)封裝動(dòng)態(tài)鏈接,定義了Callback基類、Browser基類和Tag基類,這些類中定義了構(gòu)建數(shù)據(jù)路徑、訪問數(shù)據(jù)和提交數(shù)據(jù)的虛函數(shù)接口,開發(fā)者通過類的派生以及重載這些虛函數(shù)對(duì)數(shù)據(jù)的訪問和提交進(jìn)行定制,簡化了OPC服務(wù)器的開發(fā)過程。
??? OPC數(shù)據(jù)訪問規(guī)范規(guī)定OPC服務(wù)器包含3種對(duì)象:(1)Server對(duì)象;(2)Group對(duì)象;(3)Item對(duì)象。Server對(duì)象包含了OPC Server的相關(guān)信息,可以對(duì)Group對(duì)象進(jìn)行添加和刪除,是Group對(duì)象的容器。Group對(duì)象包含了這個(gè)組的相關(guān)信息,并提供邏輯上包含組織Item對(duì)象的機(jī)制。Item對(duì)象與數(shù)據(jù)項(xiàng)關(guān)聯(lián),每個(gè)數(shù)據(jù)項(xiàng)須具備Value、Quality和Timestamp 3個(gè)屬性[6]。
??? 利用KOSRDK工具開發(fā)了OPC服務(wù)器程序,通過標(biāo)準(zhǔn)接口向客戶層提供數(shù)據(jù)訪問服務(wù)。同時(shí),OPC客戶端通過OPC服務(wù)器對(duì)設(shè)備進(jìn)行驅(qū)動(dòng)訪問,從而實(shí)現(xiàn)了OPC服務(wù)器對(duì)上、對(duì)下的數(shù)據(jù)傳輸過程。主要實(shí)現(xiàn)過程及其相關(guān)的函數(shù)如下:
??? (1)服務(wù)器初始化:調(diào)用KOS_Init( )函數(shù)。
??? (2)設(shè)置CALLBACK回調(diào)函數(shù)。
??? 實(shí)現(xiàn)客戶程序和OPC Server DLL之間的數(shù)據(jù)通信,主要調(diào)用如下函數(shù):
??? (1)客戶端寫數(shù)據(jù)ClientWrite Proc
??? 當(dāng)連接到服務(wù)器的客戶端發(fā)出寫請(qǐng)求時(shí),OPC Server DLL將會(huì)調(diào)用此回調(diào)函數(shù),寫數(shù)據(jù)請(qǐng)求的參數(shù)作為該函數(shù)的參數(shù):KOS_SetCIientWriteProc(&ClientWriteProc)。
??? 客戶端的ClientWriteProc定義:
??? Void CALLBACK EXPORT ClientWriteProc(HANDLE Handle,VARIANT*pVar)
??? (2)客戶端關(guān)閉ClientShutdownProc
??? 當(dāng)連接到服務(wù)器的客戶端從服務(wù)器斷開時(shí),OPC Server DLL將調(diào)用下面函數(shù):
??? KOS-SetClientShutdownProc(&ClientShutdownProc);
??? 客戶端的ClientShutdownProc定義:
??? Void CALLBACK EXPORT ClientShutdownProc(UINT wClientCount)
??? wClientCount為剩余客戶端數(shù)目,為0時(shí)表示可以停止掃描、關(guān)閉服務(wù)器。
??? (3)注冊(cè)和反注冊(cè)
??? OPC服務(wù)器必須在系統(tǒng)中注冊(cè)后才能被OPC客戶程序檢索,注冊(cè)和反注冊(cè)將使用CLSID、服務(wù)器名稱等參數(shù):
??? KOS_Register(CLSID_Svr,m_strSvrName,m_strSvrDesc,strFile);
??? KOS_UnRegister(CLSID_Svr,m_strSvrName);
??? (4)添加OPC項(xiàng)
??? 服務(wù)器的初始化完成后需要添加項(xiàng)OPC Server DLL中,客戶才能檢索和使用OPC項(xiàng)。
??? HANDLE WINAPI KOS_AddItem(Cstring Name,VARIANT Value,WORDInitialQuality,BOOL IsWritable);
??? (5)更新OPC項(xiàng)的值
??? BOOL WINAPI KOS_UpdateItem(HANDLE ItemHandle,VARIANT Value,WORD Quality);
??? (6)關(guān)閉服務(wù)器
??? ① 如果有客戶連接,發(fā)出斷開連接請(qǐng)求。
??? ② 如果用戶使用了new等操作符,釋放所有這些已分配內(nèi)存。
??? ③ 調(diào)用KOS_RemoveItem( )從OPC服務(wù)器中刪除己添加OPC項(xiàng)。
??? ④ 調(diào)用KOS_UnInit()完成OPC服務(wù)器的退出。
??? 編譯運(yùn)行OPC DA服務(wù)器程序后,進(jìn)行注冊(cè),在服務(wù)器主界面中可顯示Item的名稱、數(shù)據(jù)類型、數(shù)據(jù)值、時(shí)間戳和數(shù)據(jù)質(zhì)量。
2.4 OPC客戶層的設(shè)計(jì)
??? 客戶端采用北京亞控自動(dòng)化軟件科技有限公司開發(fā)的工控組態(tài)軟件——組態(tài)王,訪問由OPC服務(wù)器層提供的數(shù)據(jù)。組態(tài)王支持OPC規(guī)范,并提供強(qiáng)大、高效的組態(tài)功能和網(wǎng)絡(luò)應(yīng)用。客戶層使用組態(tài)王軟件完成DCS監(jiān)控系統(tǒng)的畫面組態(tài)、歸檔、報(bào)警、報(bào)表等功能,為工廠管理信息系統(tǒng)提供數(shù)據(jù)。現(xiàn)場(chǎng)操作員和工程師可以方便地在客戶監(jiān)控界面上監(jiān)視生產(chǎn)流程,控制設(shè)備運(yùn)行和調(diào)整工藝配方等。
??? 采用組態(tài)王做OPC客戶端,實(shí)現(xiàn)與OPC服務(wù)器的數(shù)據(jù)鏈接,主要通過3個(gè)步驟實(shí)現(xiàn):
??? (1)在組態(tài)王中建立OPC服務(wù)器設(shè)備
??? 當(dāng)組態(tài)王作為OPC客戶端使用時(shí),OPC服務(wù)器就作為組態(tài)王的一個(gè)設(shè)備。需要在組態(tài)王工程瀏覽器的“設(shè)備”項(xiàng)目中將“OPC服務(wù)器”加入。
??? (2)在數(shù)據(jù)庫中定義變量
??? 在DCS監(jiān)控系統(tǒng)中通常由數(shù)據(jù)庫來管理大量的數(shù)據(jù),組態(tài)王中數(shù)據(jù)庫變量的集合稱為“數(shù)據(jù)詞典”,為了實(shí)現(xiàn)OPC服務(wù)器端與客戶端的數(shù)據(jù)交換,需在組態(tài)王的數(shù)據(jù)字典中定義變量,OPC服務(wù)器作為連接設(shè)備提供數(shù)據(jù)。
??? 在組態(tài)王的數(shù)據(jù)詞典中,選擇I/O類型變量,連接設(shè)備選擇OPC服務(wù)器。寄存器下拉式菜單中列出了在OPC服務(wù)器中定義過的所有項(xiàng)目名及數(shù)據(jù)項(xiàng),選擇對(duì)應(yīng)的數(shù)據(jù)項(xiàng)和各自的數(shù)據(jù)類型和讀寫屬性后,就將OPC服務(wù)器中的Item加入到了客戶端數(shù)據(jù)詞典中,完成了各變量的連接,如圖2所示。
?

??? (3)OPC服務(wù)器與客戶端的連接測(cè)試
??? 完成OPC服務(wù)器程序和客戶端組態(tài)王工程后,先對(duì)OPC服務(wù)器進(jìn)行注冊(cè)操作,再進(jìn)行連接測(cè)試,檢驗(yàn)OPC服務(wù)器是否能把它從設(shè)備端讀到的數(shù)據(jù)正確傳給OPC客戶端;同時(shí)檢驗(yàn)OPC客戶端是否能對(duì)設(shè)備操作值進(jìn)行改寫,是否完成數(shù)據(jù)的雙向傳送。
??? 圖3所示為OPC服務(wù)器與客戶端連接成功的測(cè)試實(shí)例。客戶端的“主汽溫度”和“閥門開度”,對(duì)應(yīng)服務(wù)器的Item項(xiàng)是“a.a.f”和“a.a.c”。“主汽溫度”是由服務(wù)器傳給客戶端的現(xiàn)場(chǎng)實(shí)時(shí)采集數(shù)據(jù),“閥門開度”是客戶端發(fā)送給服務(wù)器的操作員指令。可見,OPC服務(wù)器中Item的時(shí)間戳(Timestamp)同客戶端的顯示時(shí)間一致,品質(zhì)(Quality)為“OPC_QUALITY_GOOD”,Item的值(Value)與客戶端監(jiān)控畫面顯示一致,由此實(shí)現(xiàn)了數(shù)據(jù)的雙向傳送。
?

??? OPC技術(shù)規(guī)范是新興的工業(yè)控制領(lǐng)域標(biāo)準(zhǔn),把硬件供應(yīng)商和應(yīng)用軟件開發(fā)者分離開,使得雙方的工作效率都有了很大提高。OPC標(biāo)準(zhǔn)的制訂,使所有的通信連接問題變得簡單,對(duì)開發(fā)DCS全開放性的監(jiān)控系統(tǒng)起到了重要作用,實(shí)現(xiàn)了各廠商之間的大量設(shè)備互聯(lián)和過程數(shù)據(jù)共享,解決了產(chǎn)品兼容性問題。本文遵循OPC標(biāo)準(zhǔn),利用KOSRDK工具包和組態(tài)王軟件,構(gòu)建了DCS監(jiān)控系統(tǒng),實(shí)現(xiàn)方法效率高,周期短。
參考文獻(xiàn)
[1] 何楊歡. OPC技術(shù)在DCS數(shù)據(jù)采集系統(tǒng)中的應(yīng)用[J]. 化工進(jìn)展,2006,25(12):1496-1498.
[2] 胡海江,金朝暉,楊新照,等. 基于OPC技術(shù)的FF總線遠(yuǎn)程監(jiān)控[J]. 微計(jì)算機(jī)信息,2006(1-1) :4-5.
[3] 李京,宋真君.工控軟件互操作規(guī)范OPC技術(shù)講座:第一講[J]. 自動(dòng)化儀表,2002,4(23):68-70.
[4] 周江建,周運(yùn)森.中間件OPC技術(shù)在工業(yè)控制系統(tǒng)中的應(yīng)用.計(jì)算機(jī)工程,2004(12): 43-45.
[5] 姜萍.基于Windows CE.NET 4.2的分散控制系統(tǒng)開發(fā)[J].微電子計(jì)算機(jī),2007,24(6):218-235.
[6] 張勝. 如何用Knight OPC server rapid development kit實(shí)現(xiàn)OPC數(shù)據(jù)訪問服務(wù)器[J]. 國外建材科技,2006,27(2):218-235.
