, ,
(華北電力大學 控制與計算機工程學院,河北 保定 071003)
基于Qt平臺的OPC服務器的開發(fā)及仿真應用
黎邦騰,梁薇,馬平
(華北電力大學控制與計算機工程學院,河北保定071003)
OPC(OLE for Process Control)技術自1996年被提出,就迅速在自動化領域得到了廣泛的應用;它為工業(yè)控制軟件與硬件之間的交互定義了一個標準的接口,使得工業(yè)軟件及硬件之間的通訊變得非常便利;針對這個特點,提出了一種將OPC服務器作為“中轉站”的仿真方案,即兩個或多個支持OPC客戶端功能的應用程序將OPC服務器作為“中轉站”,實現(xiàn)程序間的相互訪問與控制;采用OPC開發(fā)工具包方式開發(fā)OPC服務器,并且在Qt平臺實現(xiàn);這摒棄了傳統(tǒng)的基于MFC平臺開發(fā)模式,充分利用了Qt在界面設計上的優(yōu)勢;最后利用Matlab建立了兩個Simulink工程作為OPC客戶端進行仿真測試,實現(xiàn)了兩個客戶端之間通過“中轉站”完成信息交互;測試結果控制效果與預期一致,驗證了本方案的可行性。
OPC服務器;OPC開發(fā)工具包;Qt平臺;仿真測試;OPC客戶端
隨著計算機技術和自動機技術的迅猛發(fā)展,越來越多的智能設備應用到了工業(yè)現(xiàn)場中,給我們提供了更多的現(xiàn)場信息。但是,在這種需求下,一個控制系統(tǒng)可能包含幾十種或者更多的來自不同廠商的智能設備,這些設備遵循各自通訊規(guī)范,只能與特定的應用軟件通訊,使得計算機內部應用程序與現(xiàn)場設備之間進行信息溝通和傳遞變得非常困難[1-2]。正是在這種背景下,一個工業(yè)標準 OPC技術規(guī)范被制定了出來[3]。OPC技術在應用程序與設備之間建立起了一道橋梁,使得各工控軟件之間的信息交互非常方便,極大的提高了系統(tǒng)的互操作性和適應性。本文提出了一種將OPC服務器作為“中轉站”的仿真方案,即通過OPC技術實現(xiàn)不同應用程序之間的相互訪問與相互控制。因此,該文首先介紹了一種在OPC開發(fā)工具包WTOPCSvr.DLL的基礎上開發(fā)OPC服務器軟件的方法。
傳統(tǒng)上的OPC服務器或者客戶端主要基于MFC實現(xiàn)。MFC執(zhí)行代碼效率高,并且目前技術也比較成熟,但是它固有的架構使得MFC去實現(xiàn)一個相對美觀靈活的用戶界面就會變得很繁瑣。因此,該軟件采用Qt實現(xiàn),摒棄了傳統(tǒng)的MFC平臺開發(fā)模式,充分的利用了Qt在界面開發(fā)上的優(yōu)勢。最后,利用matlab建立了兩個simulink工程作為OPC客戶端進行仿真測試,驗證了利用OPC服務器作為中轉站,實現(xiàn)不同應用程序之間相互訪問和控制這個方案的可行性。
OPC是一個工業(yè)標準,它采C/S模式,即OPC服務器與硬件通訊由廠商負責,工業(yè)軟件通過OPC客戶端與OPC服務器建立連接,而不再與設備直接通訊,把軟、硬件開發(fā)徹底分開。這樣,一方面硬件開發(fā)商僅僅需要將硬件設備驅動程序和通信程序封裝成獨立的OPC服務器,當硬件升級時只需要更新對應的驅動程序,而不會對OPC接口產生任何影響。另一方面應用程序軟件開發(fā)商不必關心設備與OPC服務器如何通信及通訊接口之間的兼容性問題,他們只需要遵循OPC數(shù)據(jù)協(xié)議,開發(fā)相應OPC客戶端就能從OPC服務器獲取相應的數(shù)據(jù)[4]。圖1所示為采用OPC技術之后工業(yè)控制軟件與硬件設備之間的通訊框架示意圖。
圖1 工業(yè)控制軟件與硬件設備之間的通訊框架
為了滿足多種系統(tǒng)和設備之間的通信需求,OPC定義了一系列規(guī)范,如OPC數(shù)據(jù)存取(data access)規(guī)范、OPC報警與事件(alarm and event)規(guī)范和OPC歷史數(shù)據(jù)存取(historical data access)規(guī)范等。不同類型的服務器和客戶端程序對應不同的規(guī)范,本文主要介紹OPC數(shù)據(jù)存儲規(guī)范和數(shù)據(jù)存取服務器的開發(fā)[5]。
OPC數(shù)據(jù)存取規(guī)范是OPC基金會針對現(xiàn)場設備的在線數(shù)據(jù)存取制定的一個工業(yè)標準,它主要定義了OPC DA Sever (數(shù)據(jù)存取服務器)。OPC DA Server主要由3個對象組成:服務器對象(server object)、組對象(group object)和項對象(item object)[6]。圖2所示為OPC DA Server的組成模型。
圖2 OPC DA Server的組成模型
如圖2所示,OPC服務器對象管理服務器的所有組信息,它是OPC組對象的包容器,能夠完成組對象的添加和釋放。在一個OPC服務器對象中,允許包含一個或者多個OPC組對象。OPC組對象管理本組的所有信息,并提供了組織和管理項的機制,從邏輯上實現(xiàn)對OPC 項對象的管理。OPC組包含Name(組的名字),Active(組的激活狀態(tài)標志),Update Rate(刷新速率)和Percent Deadband (數(shù)據(jù)死區(qū))。客戶端程序可以設置組對象的死區(qū)、刷新頻率和需要組織的項。OPC項對象表示了OPC服務器到數(shù)據(jù)源的連接,它是讀寫數(shù)據(jù)的最小邏輯單位,它包括了值、品質、時間戳3個基本屬性。其中,數(shù)據(jù)值以 Variant 形式表示,品質代表了數(shù)值的可信度,時間戳則代表了數(shù)據(jù)的存取時間[2]。OPC項對象不能直接被訪問,所有對OPC項的操作都需要通過該項隸屬的組來完成。
目前,OPC服務器開發(fā)主要有通過MFC提供的COM支持開發(fā)OPC服務器、通過ATL開發(fā)OPC服務器和通過開發(fā)工具開發(fā)OPC服務器3種方式。
MFC采用面向對象的方式將COM的基本功能封裝在若干的C++類中,能夠深入的掌握 COM 內部技術細節(jié)等特點。但是要從底層開始編寫代碼,工作量大,工程也非常復雜。ATL 同樣需要對 COM 機制有非常深入的理解。因此,不管MFC還是ATL,都會使得整個開發(fā)過程變得異常困難,不易實現(xiàn)。本文采用的是第三種方法,通過工具開發(fā)OPC服務器。它大大簡化了OPC服務器的開發(fā)過程,縮短開發(fā)周期,開發(fā)人員不用了解COM知識和OPC規(guī)范,僅僅需要調用相應的API函數(shù)就能完成OPC服務器的開發(fā)[7]。
軟件基于VS2010+Qt平臺實現(xiàn),摒棄了傳統(tǒng)的MFC開發(fā)模式,充分發(fā)揮了Qt在界面設計上的優(yōu)勢。Qt是一個跨平臺C++圖形用戶界面應用程序開發(fā)框架,建立了信號(SIGNAL)和槽(SLOT)機制。利用SIGNAL可以實現(xiàn)任意參數(shù)的傳遞,這與MFC中紛繁蕪雜的消息相比,Qt對事件的處理更加的自由靈活。在界面處理上,Qt完全從MFC的各種條條框框束縛解放出來,可以靈活地使用視圖和組織控件。
軟件是在WTOPCSvr.DLL工具包的基礎上完成的,WTOPCSvr.DLL是以DLL形式提供的一個OPC服務器快速開發(fā)工具。WTOPCSvr.DLL將COM和OPC處理的所有細節(jié)封裝起來,用戶不用去關心底層接口的實現(xiàn),僅僅通過調用幾個API函數(shù)就能快速地開發(fā)出自己的OPC服務器[8]?;谶@個平臺,使得整個OPC開發(fā)過程就變得非常簡單。整個OPC服務器的系統(tǒng)框架如圖3所示。
圖3 OPC服務器開發(fā)系統(tǒng)框架
因為該軟件側重點是建立一個“中轉站”,實現(xiàn)兩個OPC客戶端之間的通信。因此,并不需要考慮服務器對象接口與設備驅動部分,所有數(shù)據(jù)的交換都是兩個客戶端之間發(fā)起的。當OPC服務器起來完成初始化后,用戶就可以創(chuàng)建相應的標簽,不同的OPC客戶端通過訪問該服務器,就可以實現(xiàn)兩個客戶端之間的信息交互。
2.3.1 OPC服務器核心功能實現(xiàn)
OPC服務器的開發(fā)主要有以下主要步驟:
1) 調用UpdateRegistry注冊OPC服務器。
該函數(shù)的原型是:BOOL WINAPI UpdateRegistry (BYTE *pCLSID_Svr, LPCSTR Name, LPCSTR Descr, LPCSTR ExePath),其中參數(shù)pCLSID_Svr是服務器的類標識,這是唯一的。參數(shù)Name指定了服務器的名稱。參數(shù)Descr是對服務器的描述,而參數(shù)ExePath則定義了可執(zhí)行程序的完整路徑。
2)調用InitWTOPCsvr完成開發(fā)包初始化。
該函數(shù)原型:BOOL WINAPI InitWTOPCsvr (BYTE *pCLSID_Svr, UINT ServerRate),其中參數(shù)pCLSID_Svr含義同上,參數(shù)ServerRate定義了客戶的數(shù)據(jù)刷新速率,單位是毫秒。該函數(shù)實現(xiàn)了對DCOM的初始化和OPC服務器對象的創(chuàng)建。
3)注冊回調函數(shù)。
WTOPCSvr.DLL為用戶提供了很多回調函數(shù),方便服務器與客戶端之間的事件處理。當特定的事件或者調解發(fā)生時,服務器及時響應客戶端的操作,這是非常方便的。以函數(shù)EnableWriteNotification為例。
該函數(shù)原型: BOOL WINAPI EnableWriteNotification (WRITENOTIFYPROC lpCallback, BOOL ConvertToNativeType)。這個函數(shù)定義了當OPC客戶端些一個已定義的標簽時,函數(shù)會產生一個來自DLL的調用返回。展開類型WRITENOTIFYPROC的定義:typedef VOID (CALLBACK* WRITENOTIFYPROC)(HANDLE, VARIANT*, DWORD*)。它實際定義了一個函數(shù)指針,用戶調用EnableWriteNotification函數(shù)傳入對應函數(shù)的指針,當客戶端修改標簽時,會立即響應該函數(shù),服務器可以對事件進行處理。
4)創(chuàng)建標簽和移除標簽。
完成相應的準備工作后,就可以調用CreateTag函數(shù)創(chuàng)建標簽了。
該函數(shù)原型:HANDLE WINAPI CreateTag (LPCSTR Name, VARIANT Value, WORD InitialQuality, BOOL IsWritable)。其中參數(shù)Name指定了創(chuàng)建的點名,它可以是任何文本字符串,也可以使用分層名字,中間用“.”分隔,如group.item。前者屬于扁平結構,后者屬于多層結構。參數(shù)Value定義了標簽的初始值,參數(shù)InitialQuality則定義了標簽的屬性,參數(shù)IsWritable指定了標簽是否可寫。標簽一旦被創(chuàng)建,它就能夠在任何一個客戶端中參數(shù)列表中被檢索到。
與CreateTag相對應的就有RemoveTag函數(shù),它用于標簽的移除。其函數(shù)原型:BOOL WINAPI RemoveTag (HANDLE TagHandle),參數(shù)TagHandle是一個句柄,即調用CreateTag創(chuàng)建標簽時返回的句柄。值得注意的是,標簽被移除后,該標簽就不能夠在客戶端的參數(shù)列表中檢索到了,但是已連接的這個標簽仍然有效,只不過沒有新的數(shù)據(jù)來刷新該標簽了。對于標簽操作比較重要的API函數(shù)還有UpdateTag、UpdateTag-WithTimeStamp等,這里就不再一一介紹。
5)注銷及關閉服務器。
服務器注銷需要調用輔助函數(shù)NumbrClientConnections獲得當前連接到服務器的客戶數(shù),在有客戶端連接的情況下,服務器應該不允許被注銷。只有在服務器需要關閉時,程序才會調用RequestDisconnect函數(shù)請求所有客戶端斷開連接。最終服務器調用函數(shù)UnregisterServer 完成注銷。該函數(shù)原型:BOOL WINAPI UnregisterServer (BYTE *pCLSID_Svr, LPCSTR Name),其中參數(shù)pCLSID_Svr、Name均與UpdateRegistry函數(shù)中的pCLSID_Svr、Name一致。在關閉服務器時還需要調用UninitWTOPCsvr函數(shù),完成資源的釋放。
2.3.2 OPC服務器界面實現(xiàn)
OPC服務器界采用Qt實現(xiàn)。Qt引入了模型/視圖框架完成數(shù)據(jù)與表現(xiàn)的分離,這來源與經典的MVC三層結構。M即模型(Model),表示數(shù)據(jù);V即視圖(View),表示用戶界面;C即控制(Controller),定義了用戶在界面上的操作。通過使用MVC模式,有效地分離了數(shù)據(jù)和用戶界面,使得設計更加的靈活。而在Qt中,應該叫“MVD”模式了。在Qt中沒有Controller的說法,而是使用了代理(delegate)概念。通過使用代理,能夠自定義數(shù)據(jù)條目的顯示和編輯方式。其結構如圖4所示[9]。
圖4 “MVD”模式結構
這種模式使得用戶對數(shù)據(jù)的處理變得非常方便。用戶可以自己定義模型,對數(shù)據(jù)進行靈活的處理,當?shù)讓訑?shù)據(jù)源發(fā)生改變,只需要處理Model就可以了。
該軟件界面正是基于此種模式完成。用戶進行添加、修改、刪除對應標簽后,程序通知Model數(shù)據(jù)發(fā)生變化,從而迅速更新內部數(shù)據(jù)存儲,然后發(fā)出信號通知View數(shù)據(jù)改變。在模型中的條目有不同的角色,這樣可以在不同的情況下提供不同的數(shù)據(jù)。該軟件中視圖中行顏色交替的變化正是修改了Qt::BackgroundRole角色。如圖5所示是該軟件的最終顯示界面。
圖5 軟件界面
圖6 PID控制組
圖7 控制對象組
程序首先使用QLocalSocket了保證在一臺機器上只允許運行一個實例。然后啟動定時器,實時刷新數(shù)據(jù)列表,更新當前客戶端的連接狀態(tài)。最后通過API注冊了相應的回調函數(shù),積極響應客戶端的操作,及時更新服務器界面狀態(tài)。當用戶操作或者客戶端的操作引起數(shù)據(jù)變化時,Model會立即通知View更新視圖狀態(tài)。
基于此界面,用戶能夠實現(xiàn)服務器注冊、服務器注銷、添加參數(shù)、修改參數(shù)和刪除參數(shù)等功能,非常便利。
為了驗證本OPC服務器的功能,我們選取了某300 MW熱電機組主汽溫控制系統(tǒng)進行測試[9]。系統(tǒng)導前氣溫控制對象為:
主汽溫控制對象為:
采用串級控制系統(tǒng),主、副控制器均使用PI控制。分別取δ1=1.51,Ti=202,δ2=0.55,Ti=48.6,利用simulink搭建仿真平臺如圖6、圖7所示。
其中圖6為PID控制組,圖7為控制對象組,PID控制器與控制對象的交互通過OPC服務器完成。整個測試步驟如下:
1)啟動OPC服務器,分別添加浮點型標簽Group0.e1,Group0.e2,Group0.u1和Group0.u2作為兩個PID控制器的輸入輸出。
2)在PID控制器組添加OPC讀寫模塊,并且分別設定PID控制器1的輸入讀取的是標簽Group0.e1的值,輸出寫入到標簽Group0.u1中;PID控制器2的輸入讀取的是標簽Group0.e2的值,輸出寫入到標簽Group0.u2中。同時設定兩個OPC讀取模塊的采樣時間和simulink仿真步距均為3 s,保證仿真的實時性。
3)同理,往控制對象組添加OPC讀寫模塊,并與對應的標簽綁定。
4)設定仿真時間為1 500 s,運行仿真程序。
如圖8所示可以看到,當前OPC服務器狀態(tài)欄顯示有2個客戶端連接,即PID控制器組和控制對象組,消息對話框準確地打印我們的操作記錄。
圖8 服務器界面
等待1 500 s,程序運行結束,最終仿真結果如圖9所示。
圖9 仿真結果
可以看到,在PID控制作用下,導前氣溫與主汽溫在1 100 s左右趨于穩(wěn)定,主汽溫達到了期望值。這與實際情形相符,驗證了本方案的可行性。
OPC技術為設備集成提供了一個新的解決方案,它把硬件供應商和應用軟件開發(fā)者分離開了,大大簡化了設備之間的復雜通訊過程。本文簡單介紹了OPC技術,詳細的分析了基于WTOPCSvr.DLL 工具包開發(fā)OPC服務器的過程,并結合Qt在界面設計上的優(yōu)勢,開發(fā)了一款用戶界面友好的OPC服務器,提出了一個將OPC服務器作為中轉站,實現(xiàn)OPC客戶端之間的通訊方案。本文最后給出了該OPC服務器在仿真上的應用,驗證了方案的可行性。同樣,在完成相應的COM配置后,利用OPC的遠程訪問功能,就可以實現(xiàn)兩臺計算機中任意支持OPC客戶端服務的應用軟件之間的相互通訊。接下來,為OPC服務器完善更多的功能,如實現(xiàn)歷史數(shù)據(jù)查詢,歷史或實時曲線查看及支持參數(shù)越限報警等諸多功能將是下一步研究的方向。相信隨著OPC 技術的推廣和應用, OPC技術必將會被應用到更加廣泛的領域。
[1] 朱耀春, 陸會明, 張永慶. OPC數(shù)據(jù)服務器的開發(fā)與測試[J]. 現(xiàn)代電力, 2003, 20(6): 63-66.
[2] 鄒云濤, 吳重光. OPC技術初探及國內應用現(xiàn)狀[J]. 石油化工自動化, 2003(6): 1-5.
[3] 戚中奎, 林果園, 孫統(tǒng)風. OPC數(shù)據(jù)訪問服務器的研究與實現(xiàn)[J]. 計算機工程與設計, 2011, 32(4): 1517-1520.
[4] 紀強君, 唐秀昆, 曹長修. 基于Visual C++的OPC客戶端實現(xiàn)[J]. 計算機應用, 2007, 26(4): 70-73.
[5] 凌志浩, 陳偉彬, 馬 欣,等. 基于OPC數(shù)據(jù)存取規(guī)范的服務器研究與實現(xiàn)[J]. 華東理工大學學報, 2004, 30(3): 318-321.
[6] 張慶軍. OPC及OPC服務器的設計與實現(xiàn)[A]. 智能檢測控制技術及儀表裝置發(fā)展研討會論文集[C]. 上海: 上海自動化儀表股份有限公司技術中心, 2007.
[7] 王 平, 李大慶, 王 颋. OPC服務器開發(fā)工具包軟件的設計與實現(xiàn)[J]. 計算機工程, 2009, 35(22): 275-277.
[8] 陳丹丹, 錢 美, 夏 立, 等. OPC服務器開發(fā)的幾種方法[J]. 微計算機信息, 2006,22(6): 28-29.
[9] 蔡志明, 盧傳富, 李立夏,等. 精通Qt 4編程[M]. 北京:電子工業(yè)出版社, 2008.
[10] 韓 璞, 董 澤, 王東風,等.智能控制理論與應用[M]. 北京:中國電力出版社, 2012.
[11] 劉暾東, 余齊齊, 柳小鵬. OPC服務器軟件開發(fā)及在DCS中的應用[J]. 化工自動化及儀表, 2007, 34(1): 46-48.
[12] 喬加新. OPC客戶端與OPC服務器的交互方式的研究[J]. 信息技術, 2005(8): 122-124.
[13] 張 河, 魯五一. OPC客戶端與實時數(shù)據(jù)庫通信的實現(xiàn)[J]. 計算機工程與科學, 2008, 30(5): 81-83.
[14] 王 杰, 高昆侖, 朱曉東. OPC通訊技術在可視化界面監(jiān)控系統(tǒng)中的應用研究[J]. 計算機測量與控制, 2012, 20(1): 74-77.
[15] 李安伏, 崔亞量.基于OPC的Matlab與組態(tài)王的數(shù)據(jù)通信[J]. 電力自動化設備, 2007, 27(7): 113-115.
[16] 胡開明, 傅志堅, 葛遠香. 基于OPC與組態(tài)技術的自動控制實驗教學仿真平臺開發(fā)[J]. 實驗技術與管理, 2013, 30(6): 50-53.
[17] 李二超, 李 煒, 李戰(zhàn)明,等. 基于OPC技術的網絡控制系統(tǒng)仿真平臺設計[J]. 實驗技術與管理, 2012, 29(6): 90-93.
DevelopmentandSimulationApplicationofOPCServerBasedonQtPlatform
Li Bangteng, Liang Wei, Ma Ping
(School of Control and Computer Engineering, North China Electric Power University, Baoding 071003,China)
OPC(OLE for Process Control) technology has been widely used in the field of automation since it was put forward in 1996. It defines a standard interface for the interaction between industrial control software and hardware, which makes the communication very convenient. For this feature, a scheme of OPC server as “transfer station” is proposed, that is, two or more applications that support OPC client functionality consider the OPC server as a “transfer station” to implement mutual access and control between programs. The development of OPC server uses the way of OPC development toolkit, and it is implemented on Qt platform. It makes full use of the advantages of Qt in the interface design, abandoning the traditional MFC platform development mode. Finally, in order to demonstrate the function of two clients completing the information interaction through the “transfer station”, we use matlab to build a two simulink project as an OPC client for simulation testing. The test results are consistent with the expected results, which verify the feasibility of the program.
OPC servers; OPC development kit; Qt platform; simulation testing; OPC client
2017-04-18;
2017-05-23。
黎邦騰(1991-),男,湖南郴州人,碩士研究生,主要計算機應用方向的研究。
馬 平(1961-),女,湖南長沙人,教授,碩士研究生導師,主要從事計算機原理及應用方向的研究。
1671-4598(2017)11-0154-05
10.16526/j.cnki.11-4762/tp.2017.11.039
TP311
A