肖又發(fā)
(中海網(wǎng)絡(luò)科技股份有限公司,上海200135)
公路隧道屬于整個(gè)路段中的特殊構(gòu)造段,因?yàn)槠鋬?nèi)部空間小、密閉性強(qiáng),一旦發(fā)生火災(zāi)、交通事故、交通擁堵,環(huán)境會(huì)發(fā)生急劇惡化,將直接影響司乘人員的健康和生命安全。因此,建立功能完善、運(yùn)行可靠的監(jiān)控系統(tǒng)非常重要。當(dāng)前的隧道監(jiān)控軟件主要是基于成熟的組態(tài)軟件或用于過程控制的OLE(OLE f or Pr ocess Control,OPC)開發(fā)的。但采用OPC自動(dòng)化接口進(jìn)行開發(fā)的程序存在嚴(yán)重不足,當(dāng)監(jiān)控點(diǎn)數(shù)達(dá)到一定數(shù)量后,軟件響應(yīng)速度將急劇下降。為此,提出采用分布式系統(tǒng)架構(gòu)及數(shù)據(jù)訂閱的方式獲取反饋數(shù)據(jù),使基于OPC開發(fā)的隧道監(jiān)控軟件盡量不受監(jiān)控點(diǎn)數(shù)的限制,從而適用于長大隧道及隧道群的實(shí)時(shí)性監(jiān)控需求。
OPC是一個(gè)工業(yè)標(biāo)準(zhǔn)。它采用客戶/服務(wù)器體系,基于微軟的COM/DCOM的接口技術(shù),為硬件廠商和應(yīng)用軟件開發(fā)者提供一套標(biāo)準(zhǔn)。OPC規(guī)范包括OPC服務(wù)器和OPC客戶端兩部分,其實(shí)質(zhì)是在硬件供應(yīng)商和軟件開發(fā)商之間建立一套完整的“規(guī)則”。只要遵循這套規(guī)則,對兩者來說數(shù)據(jù)交互都是透明的,硬件供應(yīng)商無需考慮應(yīng)用程序的需求和傳輸協(xié)議,軟件開發(fā)商也無需了解硬件的實(shí)質(zhì)和操作過程。應(yīng)用程序作為OPC客戶端 ,硬件驅(qū)動(dòng)程序作為OPC接口中的OPC服務(wù)器端,OPC的訪問關(guān)系見圖1。
OPC規(guī)范中定義了2種標(biāo)準(zhǔn)接口:自定義接口(custo m interface)和自動(dòng)化接口(auto mation interface)。其中,自動(dòng)化接口是對自定義接口的進(jìn)一步封裝。使用OPC定制接口進(jìn)行數(shù)據(jù)訪問具有效率高、速度快、靈活等優(yōu)點(diǎn),但是基于定制接口的客戶端的開發(fā)使用的是C/C++語言,要求程序員掌握較深的COM/DCOM知識(shí),開發(fā)難度較大,同時(shí)開發(fā)時(shí)間也會(huì)較長。自動(dòng)化技術(shù)作為COM的一種特例或者說是一種應(yīng)用,為一些弱類型的高級語言(比如Visual Basic,VBA等)提供了另一條使程序間相互通信的途徑,而且這種通信方式非常直觀,對雙方都很友好。使用OPC自動(dòng)化接口進(jìn)行數(shù)據(jù)訪問具有簡單、易于編程、不需要開發(fā)者有相應(yīng)的COM知識(shí)等優(yōu)點(diǎn),但是在程序的效率上存在不足。
圖1 OPC架構(gòu)圖
在架構(gòu)上,OPC服務(wù)器共分為3層:OPC Server(服務(wù)器對象),OPC Gr oup(組對象),OPC Item(數(shù)據(jù)項(xiàng))。OPC Server擁有服務(wù)器的所有信息,同時(shí)也是OPC Group的容器;OPC Group為OPC客戶程序提供了一種用來組織數(shù)據(jù)的方法;OPC Item是服務(wù)器端定義的對象,通常指向設(shè)備的一個(gè)寄存器單元,OPC客戶程序可以加入多個(gè)OPC Item到OPC Group。
OPC客戶程序?qū)υO(shè)備寄存器的操作都是通過其數(shù)據(jù)項(xiàng)來完成的,通過OPC Item可以盡可能地隱藏設(shè)備的特殊信息,使OPC Server的通用性大大增強(qiáng)。OPC Item并不提供對外接口,客戶不能直接對之進(jìn)行操作,所有的操作都是通過OPC Group進(jìn)行的。每個(gè)OPC Item的數(shù)據(jù)結(jié)構(gòu)包含3個(gè)成員變量:數(shù)據(jù)值、數(shù)據(jù)質(zhì)量和時(shí)間戳。
測試環(huán)境為:PLC采用菲尼克斯的ILC 171 ET H 2TX,自動(dòng)化接口封裝庫采用OPCDa Auto.dll,OPC Server采用菲尼克斯的AX OPC SERVER,該OPC服務(wù)器支持OPC標(biāo)準(zhǔn)功能和所有可選接口(符合OPC DA 1.0a和DA 2.04/2.05規(guī)范),可同時(shí)支持多個(gè)控制器,支持多種數(shù)據(jù)類型,開發(fā)語言選用C#。
1)測試方案:在PLC連續(xù)地址上建立10 000個(gè)數(shù)據(jù)項(xiàng),同時(shí)對10個(gè)數(shù)據(jù)項(xiàng)進(jìn)行累加操作,PLC不進(jìn)行其他數(shù)據(jù)采集及運(yùn)算工作,盡量避免由于PLC性能原因?qū)y試結(jié)果造成不利影響。使用Microsoft Visual St udio.NET 2012簡體中文專業(yè)版開發(fā)一個(gè)簡單的OPC Ite m讀寫操作程序,程序不進(jìn)行其他操作。
2)測試結(jié)果:程序添加OPC Item到不同的OPC Group,當(dāng)添加到約1 500個(gè)時(shí),加入速度已明顯變慢,加入每個(gè)標(biāo)簽的時(shí)間由開始的不到1 ms達(dá)到2 s。當(dāng)數(shù)據(jù)項(xiàng)到達(dá)2 000時(shí),加入每個(gè)標(biāo)簽的時(shí)間超過5 s。且隨著數(shù)量的增加,時(shí)間越來越長,程序?qū)⒆兊煤茈y響應(yīng)其他操作命令。此時(shí)查看OPC Server上監(jiān)視的10個(gè)累加數(shù)據(jù)項(xiàng),發(fā)現(xiàn)數(shù)據(jù)依然在按PLC里邊設(shè)定的頻率變化,表明OPC Ser ver本身運(yùn)行正常。
通過該測試可以確定,通過自動(dòng)化接口,每個(gè)OPC客戶端可正常監(jiān)控的數(shù)據(jù)項(xiàng)有很大限制。
對于一個(gè)約2 000 m的長隧道,控制及反饋數(shù)據(jù)項(xiàng)大約為1 000條;對于隧道群或特長隧道來說,數(shù)據(jù)項(xiàng)基本上都會(huì)超過2 000條,如果不進(jìn)行優(yōu)化,使用OPC自動(dòng)化接口將很難正常監(jiān)控。為解決這個(gè)問題,在開發(fā)隧道監(jiān)控軟件時(shí),從系統(tǒng)架構(gòu)、軟件內(nèi)部實(shí)現(xiàn)兩方面入手進(jìn)行優(yōu)化。
系統(tǒng)采用以服務(wù)總線為核心的分層架構(gòu),實(shí)現(xiàn)服務(wù)的注冊、數(shù)據(jù)的訂閱與分發(fā)等功能。其中客戶端軟件為用戶提供界面以監(jiān)視系統(tǒng)運(yùn)行狀況,同時(shí)提供外場設(shè)備控制、運(yùn)營管理和應(yīng)急處置的功能。服務(wù)總線軟件是系統(tǒng)的核心,接收并處理數(shù)據(jù)訂閱、服務(wù)注冊命令,同時(shí)負(fù)責(zé)接收、匯集、轉(zhuǎn)發(fā)系統(tǒng)實(shí)時(shí)數(shù)據(jù)、控制命令等。用OPC通信軟件與OPC Server進(jìn)行通信,采集設(shè)備數(shù)據(jù)并進(jìn)行處理,隨后發(fā)送給服務(wù)總線;同時(shí),接收服務(wù)總線轉(zhuǎn)發(fā)的控制命令,將該控制命令發(fā)送給OPC Server并返回控制結(jié)果。監(jiān)控系統(tǒng)總體架構(gòu)見圖2。
3.1.1 分布式 OPC通信
系統(tǒng)采用分布式的OPC通信架構(gòu),根據(jù)不同設(shè)備的功能運(yùn)用不同、用戶要求不同、速率快慢要求不同、監(jiān)控設(shè)備所處區(qū)域不同等情況,將單一的OPC應(yīng)用程序拆分成多個(gè)OPC通信軟件,每一個(gè)OPC通信軟件掌管一種或幾種設(shè)備的數(shù)據(jù)交換。OPC通信軟件可以根據(jù)現(xiàn)場要求安裝在不同的應(yīng)用服務(wù)器上或同一臺(tái)應(yīng)用服務(wù)器上,采用多進(jìn)程的運(yùn)行模式,從而保證一種設(shè)備或一個(gè)區(qū)域的通信操作不會(huì)對其他設(shè)備或其他區(qū)域的通信產(chǎn)生影響,開發(fā)難度和維護(hù)難度大大降低。
在數(shù)據(jù)處理方面,傳統(tǒng)的OPC應(yīng)用程序往往是集原始數(shù)據(jù)獲取、數(shù)據(jù)分析及界面展示功能于一體,這樣雖然減少了中間環(huán)節(jié)出錯(cuò)的概率,但同時(shí)也加重了OPC應(yīng)用程序的數(shù)據(jù)分析和處理的負(fù)擔(dān);而采用分布式處理方式,每個(gè)軟件僅負(fù)責(zé)系統(tǒng)中的部分功能,所以更能夠勝任數(shù)據(jù)的預(yù)處理和最終處理。
3.1.2 數(shù)據(jù)訂閱
在服務(wù)總線軟件內(nèi)部建立所需數(shù)據(jù)的動(dòng)態(tài)緩存,當(dāng)數(shù)據(jù)發(fā)生變化時(shí)對動(dòng)態(tài)緩存進(jìn)行刷新,并發(fā)送給訂閱了這些數(shù)據(jù)的客戶端。這使得網(wǎng)絡(luò)上的請求包數(shù)大大減少,并有效降低了對服務(wù)器的重復(fù)訪問次數(shù)。在數(shù)據(jù)點(diǎn)很多的情況下,這種通信方式的優(yōu)勢更能凸現(xiàn)出來。此外,客戶端還可通過數(shù)據(jù)訂閱功能實(shí)現(xiàn)只訂閱當(dāng)前界面顯示的數(shù)據(jù),能夠大大降低數(shù)據(jù)處理數(shù)量,提高界面響應(yīng)速度。
3.1.3 服務(wù)注冊
OPC通信軟件根據(jù)加載的設(shè)備生成服務(wù)注冊命令,通知服務(wù)總線自己管理哪些設(shè)備。注冊成功后,當(dāng)總線收到客戶端軟件發(fā)送的控制命令并查詢服務(wù)注冊表后,將命令發(fā)送給指定的OPC通信軟件,由具體的OPC通信軟件完成設(shè)備控制。
圖2 監(jiān)控系統(tǒng)總體架構(gòu)
主要針對OPC數(shù)據(jù)訪問及隧道監(jiān)控設(shè)備的特點(diǎn),對OPC通信軟件進(jìn)行性能方面的優(yōu)化。
3.2.1 OPC數(shù)據(jù)訪問分析
OPC的數(shù)據(jù)訪問方法有同步訪問、異步訪問和訂閱式數(shù)據(jù)采集三種。
3.2.1.1 同步方式
OPC應(yīng)用程序向OPC服務(wù)程序發(fā)出數(shù)據(jù)讀取或?qū)懭胝埱蠛?,在結(jié)果被返回之前必須處于等待狀態(tài)。同步訪問的特點(diǎn)為:讀取指定OPC標(biāo)簽對應(yīng)的過程數(shù)據(jù)時(shí),應(yīng)用程序要一直等到數(shù)據(jù)被讀取完。寫入指定OPC標(biāo)簽對應(yīng)的過程數(shù)據(jù)時(shí),應(yīng)用程序要一直等待,直到數(shù)據(jù)被寫入完成為止。當(dāng)客戶數(shù)據(jù)較少且同服務(wù)器交互的數(shù)據(jù)量比較少時(shí)可以采用這種方式,但是當(dāng)網(wǎng)絡(luò)堵塞或大量客戶訪問時(shí)會(huì)造成系統(tǒng)的性能、效率下降。
3.2.1.2 異步方式
OPC Server將讀、寫操作排隊(duì)進(jìn)行,使客戶方的調(diào)用函數(shù)可立刻返回。當(dāng)服務(wù)器讀寫操作完成后,主動(dòng)觸發(fā)OPC應(yīng)用程序的異步訪問完成事件,將數(shù)據(jù)訪問結(jié)果傳送給OPC應(yīng)用程序。OPC應(yīng)用程序在其事件處理程序中接收從OPC Server傳來的數(shù)據(jù)。其特點(diǎn)為:異步方式不會(huì)阻塞OPC應(yīng)用程序的執(zhí)行,可提高OPC應(yīng)用程序的效率。
3.2.1.3 訂閱式數(shù)據(jù)的獲取
OPC客戶應(yīng)用程序向OPC Server訂閱相關(guān)數(shù)據(jù)后,Ser ver周期性地掃描緩沖區(qū)的數(shù)據(jù),如果發(fā)現(xiàn)數(shù)據(jù)變化超過OPC應(yīng)用程序設(shè)置的幅度,更新數(shù)據(jù)緩沖器,并通知OPC應(yīng)用程序。訂閱式數(shù)據(jù)采集方式實(shí)際上也屬于異步讀取方式的一種。OPC Ser ver支持不敏感帶(Dead Band),當(dāng)OPC標(biāo)簽的數(shù)據(jù)類型是模擬量時(shí),只有變化幅度超過設(shè)置的限度才更新緩沖器數(shù)據(jù),并通知OPC應(yīng)用程序。由此可以忽略模擬值的微小變化,減輕OPC Server和OPC應(yīng)用程序的負(fù)荷。其特點(diǎn)為:Server用一定的周期檢查過程數(shù)據(jù),當(dāng)發(fā)現(xiàn)數(shù)字?jǐn)?shù)據(jù)變化或模擬數(shù)據(jù)的變化范圍超過設(shè)定值時(shí),立刻通知客戶程序,傳遞相應(yīng)信息。該方式可有效降低對服務(wù)器的重復(fù)訪問次數(shù),同時(shí)也可提高OPC客戶應(yīng)用程序的響應(yīng)速度。
3.2.2 軟件實(shí)現(xiàn)
通過對OPC數(shù)據(jù)獲取方式進(jìn)行分析可知,隧道監(jiān)控實(shí)時(shí)性要求高,數(shù)據(jù)獲取應(yīng)盡量采用數(shù)據(jù)訂閱的方式,這樣可以降低OPC客戶應(yīng)用程序?qū)PC Ser ver的訪問次數(shù),避免過多的數(shù)據(jù)訪問對OPC Ser ver性能產(chǎn)生影響,同時(shí)也可以提高OPC客戶應(yīng)用程序的性能。隧道監(jiān)控系統(tǒng)中,大部分設(shè)備的控制信號(hào)和反饋信號(hào)是分開的,如風(fēng)機(jī)、車道指示燈、交通信號(hào)燈等,每一個(gè)信號(hào)都對應(yīng)一個(gè)OPC Item。當(dāng)需要控制某個(gè)設(shè)備時(shí),可通過將值寫入控制信號(hào)對應(yīng)的OPC Item來實(shí)現(xiàn),是否控制成功及當(dāng)前設(shè)備所處的運(yùn)行狀態(tài)如何,則通過讀取反饋信號(hào)對應(yīng)的OPC Item的值來確定。同時(shí),由于多客戶控制問題,OPC客戶應(yīng)用程序不知道設(shè)備的運(yùn)行狀態(tài)何時(shí)發(fā)生變化。因此,將設(shè)備控制信號(hào)與反饋信號(hào)對應(yīng)的OPC Item放入不同的OPC Group中,反饋信號(hào)所在的OPC Gr oup采用訂閱方式獲取數(shù)據(jù)(OPC Gr oup的Is Subscribed屬性置為Tr ue)。
根據(jù)分析,采用OPC異步方式寫入數(shù)據(jù)不會(huì)防礙OPC客戶應(yīng)用程序的執(zhí)行,但對于自動(dòng)化接口,如果采用異步方式讀取、寫入指定OPC Item數(shù)據(jù),OPC Item所在OPC Gr oup的Is Subscribed必須置為Tr ue,也就是說必須采用訂閱方式。如果這樣,當(dāng)控制變量發(fā)生變化時(shí),會(huì)觸發(fā)對委托函數(shù)的調(diào)用,在隧道監(jiān)控系統(tǒng)中這根本是沒有必要的,反而會(huì)大大降低程序的性能。因此,OPC客戶應(yīng)用程序采用多線程同步方式發(fā)送控制命令。這樣在同一個(gè)過程中就可以得知控制命令是否成功寫入OPC服務(wù)器。
使用OPC自動(dòng)化接口進(jìn)行數(shù)據(jù)訪問具有簡單、易于編程、不需要開發(fā)者有相應(yīng)的COM知識(shí)等優(yōu)點(diǎn),但是傳統(tǒng)系統(tǒng)架構(gòu)在程序效率上存在嚴(yán)重不足。測試顯示,當(dāng)數(shù)據(jù)項(xiàng)達(dá)到2 000條時(shí),監(jiān)控效率將大大降低,數(shù)據(jù)項(xiàng)越多,效率越低。為解決這個(gè)問題,提出了分布式的軟件系統(tǒng)架構(gòu),避免單個(gè)OPC應(yīng)用程序監(jiān)控?cái)?shù)據(jù)項(xiàng)過多的問題。同時(shí),針對隧道監(jiān)控的特點(diǎn),盡量采用訂閱方式訪問OPC Server,避免多個(gè)OPC應(yīng)用程序定時(shí)訪問OPC Ser ver對OPC Server的性能產(chǎn)生影響。優(yōu)化后的軟件在昆明繞城高速公路西北段隧道群監(jiān)控系統(tǒng)(數(shù)據(jù)項(xiàng)大約5 000條)中得到了應(yīng)用,控制車道指示器等設(shè)備的反饋時(shí)間約為1 s,取得了良好的優(yōu)化效果。
[1] 趙鍵.樓宇監(jiān)控系統(tǒng)中的OPC客戶端與服務(wù)器應(yīng)用程序設(shè)計(jì)[D].電子科技大學(xué),2009.
[2] 毛曉羽.OPC技術(shù)在數(shù)據(jù)采集與智能監(jiān)控系統(tǒng)中的研究與應(yīng)用[D].武漢理工大學(xué),2012.
[3] OPC Task Force.OPC Co mmon Definitions and Interfaces(Vcrsion 1.0)[S].Opc Co mn.doc,1998.
[4] OPC Foundation.Data Access Custo m Interface Standard Specification 2.O[s],1998.
[5] OPC Foundation.Data Access Auto mation Interface Standar d(Version 2.02)[S].Opcda20_auto mdoc,1999.