胡浩民,王澤杰
HU Hao-min,WANG Ze-jie
(上海工程技術(shù)大學(xué) 電子電氣工程學(xué)院,上海 201620)
SCADA(Supervisory Control And Data Acquisition,監(jiān)控與數(shù)據(jù)采集)系統(tǒng)是以計(jì)算機(jī)為基礎(chǔ)的生產(chǎn)過(guò)程控制與調(diào)度自動(dòng)化系統(tǒng),它可以對(duì)現(xiàn)場(chǎng)的運(yùn)行設(shè)備進(jìn)行監(jiān)視和控制,以實(shí)現(xiàn)數(shù)據(jù)采集、設(shè)備控制、測(cè)量、參數(shù)調(diào)節(jié)以及各類(lèi)信號(hào)報(bào)警等各項(xiàng)功能[1]。系統(tǒng)具有實(shí)時(shí)、多任務(wù)、開(kāi)放式體系結(jié)構(gòu)以及分布式功能設(shè)計(jì)等特點(diǎn),已在電力系統(tǒng)、樓宇自動(dòng)化、生產(chǎn)線管理等領(lǐng)域使用。SCADA包含三個(gè)部分:分布式的數(shù)據(jù)采集系統(tǒng)(下位機(jī));過(guò)程監(jiān)控與管理系統(tǒng)(上位機(jī));以及數(shù)據(jù)通信網(wǎng)絡(luò)。可編程控制器PLC是廣泛采用的下位機(jī)設(shè)備;組態(tài)軟件則是上位機(jī)的核心組成部分。
由于上位機(jī)采集數(shù)據(jù)具有全面性和完整性,監(jiān)控中心的控制管理也具有全局性,能更好地實(shí)現(xiàn)整個(gè)系統(tǒng)的合理、優(yōu)化運(yùn)行[2]。但是在某些應(yīng)用領(lǐng)域,通過(guò)組態(tài)軟件把PLC獲取的數(shù)據(jù)采集到中央控制室往往并不能滿足需求。例如,希望將設(shè)備運(yùn)作狀態(tài)發(fā)送到定制的LED、數(shù)碼管等顯示設(shè)備,這就需要把數(shù)據(jù)根據(jù)特定協(xié)議重新組成數(shù)據(jù)包進(jìn)行發(fā)送。針對(duì)這些特殊的應(yīng)用,目前已有不少解決方案,本文將比較這些方案的不足之處,并提出多通道協(xié)同模型以提高通信性能。
1.1 系統(tǒng)結(jié)構(gòu)
SCADA系統(tǒng)中,組態(tài)應(yīng)用作為數(shù)據(jù)采集、處理、轉(zhuǎn)發(fā)中心,在上位機(jī)中處于核心位置;它與各種控制、檢測(cè)設(shè)備(如現(xiàn)場(chǎng)總線上的PLC、智能儀表等)共同構(gòu)成快速響應(yīng)控制中心(如圖1所示)。通過(guò)組態(tài)應(yīng)用,操作人員可以完成如現(xiàn)場(chǎng)數(shù)據(jù)及流程畫(huà)面的查看;歷史生產(chǎn)報(bào)表的打印;過(guò)程報(bào)警的獲得,以及生產(chǎn)過(guò)程參數(shù)和狀態(tài)的修改等任務(wù)。但有時(shí)需要對(duì)組態(tài)應(yīng)用中的數(shù)據(jù)進(jìn)行二次利用,如前所述,把數(shù)據(jù)實(shí)時(shí)地組成數(shù)據(jù)包發(fā)送到定制的專(zhuān)用監(jiān)控設(shè)備,這就需要有相應(yīng)的應(yīng)用程序從組態(tài)應(yīng)用取得數(shù)據(jù)。
組態(tài)軟件提供了相應(yīng)的通信接口,但選擇何種通信方法,以及采用怎樣的通信模型與算法,將會(huì)在很大程度上影響應(yīng)用的實(shí)時(shí)性。

圖1 系統(tǒng)結(jié)構(gòu)
1.2 通信方法與存在問(wèn)題
與組態(tài)軟件通信方法常用有:歸檔數(shù)據(jù)庫(kù)訪問(wèn)、腳本通信、動(dòng)態(tài)數(shù)據(jù)交換(Dynamic Data Exchange,DDE)、以及OPC(OLE for Process Control)接口通信等。
歸檔數(shù)據(jù)庫(kù)是組態(tài)軟件將采集的數(shù)據(jù)作為歷史記錄進(jìn)行周期性地存儲(chǔ)。由于采集周期和歸檔周期可以不同,且歸檔周期是采集周期的整數(shù)倍,因此數(shù)個(gè)過(guò)程值才產(chǎn)生一個(gè)歸檔值[3]。這會(huì)影響過(guò)程值的真實(shí)性,所以歸檔數(shù)據(jù)庫(kù)常用于為報(bào)表系統(tǒng)提供數(shù)據(jù)源,而對(duì)于轉(zhuǎn)發(fā)到專(zhuān)用監(jiān)控設(shè)備的特殊應(yīng)用,則難以滿足實(shí)時(shí)性需求。
腳本語(yǔ)言是很多組態(tài)軟件提供的功能。在組態(tài)系統(tǒng)中,通過(guò)腳本編程讀取過(guò)程值,并周期性地寫(xiě)到共享文件;應(yīng)用程序?qū)蚕砦募M(jìn)行周期性地讀操作。這種通過(guò)共享文件的讀寫(xiě)實(shí)現(xiàn)數(shù)據(jù)交互的通信方式過(guò)于頻繁地訪問(wèn)外存,效率比較低,而且不利于設(shè)備的穩(wěn)定。
動(dòng)態(tài)數(shù)據(jù)交換DDE是一種基于Windows消息傳遞而建立的進(jìn)程間通信技術(shù),DDE客戶端通過(guò)服務(wù)名和主題名,建立起與DDE服務(wù)器的連接,從而形成雙向的數(shù)據(jù)連接通道。但是這種方式通信效率不高,一般適合于少量數(shù)據(jù)的傳輸。DDE技術(shù)已趨于淘汰,實(shí)現(xiàn)大批量數(shù)據(jù)的通信不僅造成資源消耗大,而且效率很低[4]。
OPC規(guī)范以組件對(duì)象模型和分布式組件對(duì)象模型(COM/DCOM)技術(shù)為基礎(chǔ),采用客戶、服務(wù)器模式,定義了一組COM對(duì)象及其接口規(guī)范[5]。這種客戶/服務(wù)器模式與前三種通信方法相比,具有更好的可靠性和更高的穩(wěn)定性。但即使采用OPC技術(shù),如果采用的通信模型不同,效率也會(huì)有很大差異。比如單線程輪詢方式簡(jiǎn)單易實(shí)現(xiàn),但效率低下,實(shí)時(shí)性難以保證;多通道協(xié)同通信模型就是為提高通信效率,又合理利用系統(tǒng)資源而設(shè)計(jì)的一種通信方法。

圖2 模型原理
2.1 設(shè)計(jì)原理
在自動(dòng)化控制領(lǐng)域,采集上百個(gè)點(diǎn)的過(guò)程數(shù)據(jù)是比較常見(jiàn)的。如果以輪詢方式采集數(shù)據(jù),即使使用可靠性與穩(wěn)定性比較好的OPC技術(shù),也會(huì)使得系統(tǒng)效率低下。以圖1所示的監(jiān)控系統(tǒng)結(jié)構(gòu)為例,以輪詢方式從組態(tài)應(yīng)用逐項(xiàng)獲取每個(gè)標(biāo)簽值,然后組成數(shù)據(jù)包進(jìn)行發(fā)送,這樣會(huì)嚴(yán)重影響實(shí)時(shí)性。尤其當(dāng)采集的標(biāo)簽量比較多的情況,刷新的周期會(huì)相當(dāng)長(zhǎng)。如果采用簡(jiǎn)單的并發(fā)模式,為每個(gè)標(biāo)簽創(chuàng)建一個(gè)組態(tài)服務(wù)的OPC連接,又會(huì)極大地浪費(fèi)系統(tǒng)資源。
針對(duì)以上情況,設(shè)計(jì)了多通道協(xié)同通信模型(如圖2所示)。模型首先建立若干個(gè)與組態(tài)系統(tǒng)OPC服務(wù)器建立連接的通道,并將要通信的標(biāo)簽分配到通道中。每個(gè)通道只為其中的標(biāo)簽服務(wù),通過(guò)訪問(wèn)通道獲取標(biāo)簽對(duì)應(yīng)的過(guò)程值。
在具體實(shí)現(xiàn)上,每個(gè)通道可以由一個(gè)工作者進(jìn)程/線程進(jìn)行維護(hù)(以下稱(chēng)“通道維護(hù)者”)。通道維護(hù)者從通道讀取標(biāo)簽值,對(duì)比上一次讀取的數(shù)據(jù),如果發(fā)生變化,說(shuō)明監(jiān)控儀表設(shè)備的數(shù)據(jù)需要刷新,通道維護(hù)者根據(jù)相應(yīng)協(xié)議組成數(shù)據(jù)包,并通過(guò)映射關(guān)系放到緩沖列表,同時(shí)置發(fā)送標(biāo)記為“需要發(fā)送”狀態(tài)。通道之間由于沒(méi)有競(jìng)爭(zhēng)的資源,可以完全并發(fā)處理。這樣有利于提高數(shù)據(jù)采集的實(shí)時(shí)性。
“數(shù)據(jù)發(fā)送者”也可以由工作者進(jìn)程/線程實(shí)現(xiàn),用于訪問(wèn)緩沖列表中的每個(gè)數(shù)據(jù)項(xiàng)。通過(guò)判斷數(shù)據(jù)包發(fā)送標(biāo)記是否為“需要發(fā)送”狀態(tài),決定是否發(fā)送數(shù)據(jù)。如果需要發(fā)送,則發(fā)送數(shù)據(jù)包,并重置發(fā)送標(biāo)記為“已發(fā)送”狀態(tài)。因此“發(fā)送標(biāo)記”成為了通道維護(hù)者和數(shù)據(jù)發(fā)送者的臨界資源,可以使用信號(hào)量來(lái)實(shí)現(xiàn)對(duì)臨界資源的互斥操作。
2.2 算法描述
OPC技術(shù)的實(shí)現(xiàn)由OPC服務(wù)器和OPC客戶端應(yīng)用兩部分完成。其中,服務(wù)器實(shí)現(xiàn)現(xiàn)場(chǎng)設(shè)備的數(shù)據(jù)采集,并通過(guò)標(biāo)準(zhǔn)的OPC接口供OPC客戶端訪問(wèn)。OPC服務(wù)器對(duì)象被分為3層結(jié)構(gòu):服務(wù)器對(duì)象(Sever)、組(Group)和項(xiàng)(Item)[6]。
通道維護(hù)者和數(shù)據(jù)發(fā)送者對(duì)臨界資源(發(fā)送標(biāo)記)的互斥訪問(wèn)由信號(hào)量和PV原語(yǔ)操作來(lái)完成。OPC標(biāo)簽項(xiàng)的所有操作封裝成COpcTagItem類(lèi);通道維護(hù)者封裝成CChannelWorker類(lèi);數(shù)據(jù)發(fā)送者封裝成CSendWorker類(lèi)。對(duì)圖2所示的模型用類(lèi)C++描述如下:
緩沖列表BufferList中的每個(gè)對(duì)象為COpcTagItem類(lèi)型,其中包含了模型中提到的標(biāo)簽ID、名稱(chēng)、采集的數(shù)據(jù)、數(shù)據(jù)包、發(fā)送標(biāo)記等信息:

除以上成員變量之外,該類(lèi)還有如連接通道的方法ConnectChannel();從通道獲取標(biāo)簽值的方法GetTagItemValue()等。信號(hào)量對(duì)象Smph的初值為1。
通道維護(hù)者類(lèi)CChannelWorker繼承了線程類(lèi)TThread[7],包含了ChannelID(通道ID)、OpcChannel(Opc通道指針,指針指向?qū)崿F(xiàn)OPC通信功能的COpcComm類(lèi)對(duì)象)等數(shù)據(jù)成員。以及用于啟用通道的方法Startup();關(guān)閉通道的方法Shutdown();為通道分配標(biāo)簽的方法AssignTags()。Execute()完成通道維護(hù)的主要功能,其中的算法描述如下:


從算法可知,通道維護(hù)者和數(shù)據(jù)發(fā)送者通過(guò)對(duì)緩沖列表中每個(gè)OPC標(biāo)簽項(xiàng)的信號(hào)量成員Smph進(jìn)行PV操作,實(shí)現(xiàn)兩者之間的協(xié)同。同時(shí),多個(gè)通道維護(hù)者之間又是一種可以完全并行處理的協(xié)同關(guān)系,這將有效提高數(shù)據(jù)的采集與發(fā)送的通信效率。
已將OPC多通道協(xié)同通信模型,應(yīng)用到污水處理、輪胎熱裂解、變電站、造船基地給排水等自動(dòng)化監(jiān)控領(lǐng)域。圖3所示是某污水處理廠流程模擬圖(部分)。以氧化溝系統(tǒng)為例,需要監(jiān)控點(diǎn)就有28處(包括曝氣機(jī)、攪拌機(jī)、推進(jìn)器狀態(tài),污泥濃度計(jì)MLSS30X、溶解氧探頭DO30X值等)。整個(gè)污水處理系統(tǒng)還包括了:污水提升泵站、旋流沉砂池、離子除臭系統(tǒng)、污泥脫水間、除磷劑投加系統(tǒng)、二沉池、污泥泵房、清水池及貯泥池等若干部分,要監(jiān)控的設(shè)備多達(dá)上百個(gè)。
確保所有設(shè)備監(jiān)控?cái)?shù)據(jù)的準(zhǔn)確性與實(shí)時(shí)性是自動(dòng)化控制的重要組成部分。實(shí)踐表明,采用1.2所述的“歸檔數(shù)據(jù)庫(kù)訪問(wèn)”、“腳本通信”、“動(dòng)態(tài)數(shù)據(jù)交換”這幾種通信方法,效果不理想,使用“OPC接口通信”,效率高于前三者,而在此基礎(chǔ)上采用多通道協(xié)同通信模型,通信效率得到了明顯提高。

圖3 污水處理流程(部分)
多通道協(xié)同通信模型是對(duì)通信因子負(fù)載平衡的一種抽象。通過(guò)多通道,使得對(duì)組態(tài)OPC服務(wù)的連接數(shù)量維持合理的水平,起到既實(shí)現(xiàn)并發(fā)處理,提高速度;又合理使用資源的作用。根據(jù)該模型設(shè)計(jì)的算法與實(shí)現(xiàn)的程序已應(yīng)用于污水處理、橡膠熱裂解、變配電所等自動(dòng)化控制領(lǐng)域。實(shí)踐應(yīng)用表明,該模型有效地提高了與組態(tài)軟件的通信速度,能滿足工業(yè)的實(shí)時(shí)性需求。
[1]王振明.SCADA監(jiān)控與數(shù)據(jù)采集軟件系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)[M].北京:機(jī)械工業(yè)出版社,2009:1-2.
[2]王華忠.監(jiān)控與數(shù)據(jù)采集(SCADA)系統(tǒng)及其應(yīng)用[M].北京:電子工業(yè)出版社,2010:5-7.
[3]西門(mén)子(中國(guó))有限公司自動(dòng)化與驅(qū)動(dòng)集團(tuán).深入淺出--西門(mén)子WinCC V6(第2版)[M].北京:北京航空航天大學(xué)出版社,2005:69-70.
[4]董超.OPC技術(shù)在異構(gòu)控制網(wǎng)絡(luò)互聯(lián)中的研究與應(yīng)用[J].自動(dòng)化儀表,2009,30(12).
[5]王小輝.OPC在智能樓宇系統(tǒng)應(yīng)用中的研究[D].湖北:武漢理工大學(xué),2007.
[6]劉克勤.基于OPC的動(dòng)態(tài)數(shù)據(jù)交換技術(shù)在工控系統(tǒng)集成中的應(yīng)用研究[J].重慶工學(xué)院學(xué)報(bào),2006,20,(2):106-109.
[7]Borland/Inprise公司.C++ Builder 5 開(kāi)發(fā)人員指南[M].北京:機(jī)械工業(yè)出版社,2000:105-111.