基于Internet的電廠實時監(jiān)控圖形顯示技術(shù)應(yīng)用
摘要:基于B/S體系結(jié)構(gòu)開發(fā)Internet應(yīng)用程序是當(dāng)前的流行趨勢。介紹了基于Internet的電廠實時監(jiān)控圖形顯示技術(shù)的實現(xiàn)方法。采用目前工業(yè)監(jiān)控環(huán)境中的圖形動態(tài)交互技術(shù),針對圖形刷新閃爍現(xiàn)象這一關(guān)鍵問題提出了不同的解決方法。最后介紹了基于ActiveX控件技術(shù)的動態(tài)圖形顯示技術(shù)的應(yīng)用實例。
關(guān)鍵詞:Internet;B/S;實時監(jiān)控;圖形動態(tài)顯示;ActiveX控件
0 前言
隨著Internet技術(shù)的迅速發(fā)展和Web技術(shù)的日趨成熟,許多企業(yè)都建立了基于網(wǎng)絡(luò)平臺的工業(yè)過程監(jiān)控系統(tǒng),實現(xiàn)企業(yè)信息資源的共享。特別在電力系統(tǒng),隨著電廠廠級實時監(jiān)控系統(tǒng)的日趨完善,建立基于Internet的遠(yuǎn)程實時監(jiān)控系統(tǒng)將成為電廠綜合自動化技術(shù)發(fā)展的必然趨勢,通過把電廠的生產(chǎn)數(shù)據(jù)信息以Web形式網(wǎng)上發(fā)布,實現(xiàn)對分散在各地的電廠實時遠(yuǎn)程監(jiān)控、管理和數(shù)據(jù)信息共享,優(yōu)化生產(chǎn),提高經(jīng)濟(jì)效益等。
但目前基于Internet的圖形顯示技術(shù)存在著許多問題,主要在三個方面:①圖形動態(tài)顯示的實時性。在監(jiān)控系統(tǒng)中,最關(guān)鍵的是現(xiàn)場設(shè)備、服務(wù)器和用戶之間的圖形數(shù)據(jù)交互,而實時數(shù)據(jù)的傳輸延遲要控制在幾秒內(nèi),否則將出現(xiàn)畫面滯后;②圖形顯示過程出現(xiàn)刷新閃爍現(xiàn)象,這是動態(tài)顯示中需要解決的關(guān)鍵問題;③由于電廠安全性要求很高,因此如何保障圖形數(shù)據(jù)傳輸?shù)陌踩?,也是基于網(wǎng)絡(luò)圖形顯示技術(shù)的難點。
為克服這些問題,在對目前的圖形交互技術(shù)進(jìn)行詳細(xì)分析的基礎(chǔ)上,本文提出了一種基于ActiveX/DCOM技術(shù)的B/S體系結(jié)構(gòu),實現(xiàn)電廠遠(yuǎn)程監(jiān)控圖形動態(tài)顯示。并針對圖形顯示的關(guān)鍵問題——刷新閃爍現(xiàn)象,提出解決方法;然后通過實例介紹基于ActiveX控件的監(jiān)控圖形顯示技術(shù)。
1 圖形動態(tài)顯示技術(shù)
目前實現(xiàn)交互式動態(tài)網(wǎng)頁顯示的技術(shù)有很多,從最初的CGI到現(xiàn)在的PHP、Java Applet、ASP和JSP等,它們作用各有利弊。
1.1 Java Applet技術(shù)
Java Applet技術(shù),是用Java語言編寫的應(yīng)用程序,通過將嵌入在網(wǎng)頁中的Java小程序下載到客戶端直接操作。這種處理方式分散系統(tǒng)尤其是Web服務(wù)器的處理負(fù)擔(dān),提高了系統(tǒng)效率,增強(qiáng)了交互的實時性。但由于Applet要在瀏覽器端運行,增加了本地開銷,不符合Web開發(fā)中“瘦客戶”的要求。
1.2 ASP(Active Server Pages)技術(shù)
ASP技術(shù)是Web服務(wù)器和數(shù)據(jù)庫服務(wù)器的集成技術(shù),是微軟公司推出的服務(wù)器腳本編寫環(huán)境,結(jié)合HTML網(wǎng)頁、Script語言和ActiveX控件,與數(shù)據(jù)庫綁定,創(chuàng)建動態(tài)、交互的服務(wù)器應(yīng)用程序[1]。ASP最大的優(yōu)點是所有的程序都在服務(wù)器端執(zhí)行,包括所有嵌在HTML網(wǎng)頁中的腳本程序,服務(wù)器僅將執(zhí)行的結(jié)果返回給客戶,這樣就減輕了客戶端瀏覽器的負(fù)擔(dān),大大提高了交互的速度。但ASP的不足是它只能在Windows系列的環(huán)境下運行。圖1為ASP的動態(tài)顯示模型。
圖1 基于ASP的動態(tài)顯示模型
1.3 JSP(Java Server Pages)技術(shù)
JSP技術(shù)是基于Java Servlet以及整個Java體系的Web開發(fā)技術(shù)[2]??梢杂肵ML標(biāo)識來設(shè)計和格式化最終頁面,生成內(nèi)容的邏輯被封裝在標(biāo)識tag和Java Beans組件中,與腳本程序綁定,然后將JSP編譯成Java Servlet在服務(wù)器端運行來實現(xiàn)動態(tài)顯示。JSP的優(yōu)點是所有腳本均在服務(wù)器端執(zhí)行,實現(xiàn)內(nèi)容的生成和顯示分離;可重用且跨平臺的組件JavaBeans或EJB;而且JSP的腳本在首次執(zhí)行時被編譯成為Servlet,并有Java虛擬機(jī)執(zhí)行,以后執(zhí)行都不需編譯,執(zhí)行效率高。但JSP只能通過JDBC或JDBC-ODBC橋接訪問數(shù)據(jù)庫,效率低。
通過以上圖形顯示技術(shù)的對比,可以得出這幾種圖形顯示技術(shù)的比較結(jié)果,如表1所示。
表1 幾種圖形顯示技術(shù)比較
2 基于Internet的圖形顯示系統(tǒng)結(jié)構(gòu)
通過以上圖形顯示技術(shù)的分析比較,采用ASP技術(shù),利用其ActiveX/DCOM組件技術(shù)支持,可以很好的實現(xiàn)電廠遠(yuǎn)程實時監(jiān)控圖形動態(tài)顯示的要求。在B/S體系結(jié)構(gòu)的基礎(chǔ)上[3],我們設(shè)計了一種新型B/S模式的基于Internet的遠(yuǎn)程監(jiān)控圖形動態(tài)顯系統(tǒng),如圖2所示。
客戶通過瀏覽器登錄到Web服務(wù)器,Web服務(wù)器對用戶身份驗證后,根據(jù)客戶權(quán)限把客戶可以瀏覽的網(wǎng)頁顯示在客戶端,并把網(wǎng)頁中嵌入的ActiveX控件下載并注冊到客戶端;嵌套的組件根據(jù)網(wǎng)頁參數(shù)設(shè)置通過代理機(jī)向應(yīng)用服務(wù)器提出數(shù)據(jù)請求,應(yīng)用服務(wù)器接受用戶請求,通過SQL等方式向數(shù)據(jù)庫服務(wù)器提出數(shù)據(jù)處理請求;數(shù)據(jù)庫接受應(yīng)用服務(wù)器的請求,實現(xiàn)對數(shù)據(jù)庫的操作,并把實時數(shù)據(jù)或圖形結(jié)果提交客戶端。
這種體系結(jié)構(gòu)的優(yōu)點在于:①充分發(fā)揮B/S 模式的優(yōu)勢,保持瘦客戶端的優(yōu)點;②將服務(wù)器劃分為Web服務(wù)器和應(yīng)用服務(wù)器兩部分。應(yīng)用服務(wù)器采用Active/DCOM組件技術(shù)實現(xiàn)B/S結(jié)構(gòu)中的應(yīng)用邏輯部分,解決了動態(tài)顯示的實時性問題,同時達(dá)到封裝源代碼、保護(hù)知識產(chǎn)權(quán)的目的;③通過代理機(jī)實現(xiàn)圖形數(shù)據(jù)的中轉(zhuǎn)傳輸,保障應(yīng)用服務(wù)器的安全性。代理機(jī)位于防火墻與應(yīng)用服務(wù)器之間,當(dāng)用戶請求數(shù)據(jù)時,代理機(jī)接受請求,并休眠與外網(wǎng)連接線程,然后把請求傳給內(nèi)網(wǎng)應(yīng)用服務(wù)器;當(dāng)數(shù)據(jù)結(jié)果返回時,關(guān)閉與內(nèi)網(wǎng)連接,啟動傳輸線程,把數(shù)據(jù)結(jié)果傳給用戶。在傳輸過程中,電廠內(nèi)外網(wǎng)不直接通信,保障了電廠網(wǎng)絡(luò)系統(tǒng)的安全。
3 圖形顯示自動刷新技術(shù)
在連續(xù)動態(tài)顯示過程中, 當(dāng)屏幕由一個場景變化為另一個場景時, 須首先將原先的背景擦除, 然后將新的圖形繪制到屏幕上, 但顯示背景不斷擦除以及繪制圖形所用時間較長, 導(dǎo)致屏幕出現(xiàn)不連續(xù)[4],即刷新閃爍現(xiàn)象。為此我們在此提出幾種解決途徑。
3.1 Web網(wǎng)頁自動刷新技術(shù)
在Web網(wǎng)頁中自動更新顯示,可在Web網(wǎng)頁設(shè)計中使用META語句來實現(xiàn)。META語句放置在HTML或ASP代碼的頭部,如網(wǎng)頁每隔5秒刷新一次,可以通過以下META語句來實現(xiàn):
<HEAD><META HTTP-EQUIV=“REFRESH” CONTENT=“5” URL=http://202.206.210.146/Trendshow1.ocx> </HEAD>
刷新一次,整個文件重新執(zhí)行一次到數(shù)據(jù)庫的連接,把數(shù)據(jù)庫中相應(yīng)的圖形數(shù)據(jù)的變動反映給客戶端。這種方法簡單,適用于以只讀方式向客戶端提供數(shù)據(jù),其刷新頻率不宜過快,否則當(dāng)相應(yīng)的數(shù)據(jù)變化較快或比較多時可能出現(xiàn)屏幕顯示不連續(xù),即閃爍現(xiàn)象,不利于數(shù)據(jù)的監(jiān)測。因此,本方法適用于數(shù)據(jù)實時性不強(qiáng)或變化比較緩慢的條件下實現(xiàn)數(shù)據(jù)的實時顯示。
3.2 基于Java程序的更新數(shù)據(jù)
監(jiān)控電廠生產(chǎn)過程的相關(guān)數(shù)據(jù),要將實時數(shù)據(jù)和實時趨勢曲線顯示在監(jiān)控畫面上??梢圆捎肑ava Applet小程序直接與Web服務(wù)器相連獲取實時數(shù)據(jù)庫中實時數(shù)據(jù),然后利用Java程序自身的多線程和繪圖優(yōu)勢來實現(xiàn)圖形數(shù)據(jù)的自動刷新。為了將背景畫面和與實時數(shù)據(jù)相關(guān)的圖形、數(shù)字區(qū)分開,通常采用雙緩存技術(shù)把背景畫面載入,在Java小程序的Paint()函數(shù)中編寫與實時數(shù)據(jù)相關(guān)的圖形、數(shù)據(jù)的顯示代碼。在Java小程序的線程Run()函數(shù)中利用DAO等實現(xiàn)對數(shù)據(jù)庫的查詢,Java小程序線程的休眠時間由Sleep()函數(shù)決定。每次線程運行時,對數(shù)據(jù)庫重新查詢得到新的數(shù)據(jù),并使得小程序重畫,這樣就把動態(tài)的圖形數(shù)據(jù)反映給客戶。Java小程序執(zhí)行速度快,刷新頻率較快,適合實時圖形數(shù)據(jù)的讀取和顯示。
3.3 圖形畫面刷新無閃爍
利用ActiveX組件技術(shù)實現(xiàn)遠(yuǎn)程監(jiān)控的圖形動態(tài)顯示,可以徹底解決動態(tài)顯示時自動刷新出現(xiàn)的閃爍現(xiàn)象。一般來說,解決刷新閃爍現(xiàn)象的方法有兩個方面:一是避免反復(fù)設(shè)置背景監(jiān)控畫面和清屏;二是避免直接在屏幕上重畫。
為此,采用雙緩沖技術(shù)來解決刷新閃爍,即利用ActiveX控件在客戶端建立內(nèi)存緩沖區(qū),把原來直接在屏幕上的繪圖操作全部改在緩沖區(qū)里繪制,最后再將緩存區(qū)中繪制好的圖形一次性畫到屏幕上。對于一般實時性不強(qiáng)的畫面,刷新周期設(shè)置低點,可以解決刷新閃爍現(xiàn)象;對于實時性較強(qiáng)的圖形數(shù)據(jù),通過這種方法也基本能消除刷新閃爍。
首先利用組態(tài)軟件把監(jiān)控背景畫面和各種圖元繪制好,存放在應(yīng)用服務(wù)器中;其次,通過ActiveX控件中的CDataPathProperty類異步下載圖形元件,緩存到客戶端中,供控件調(diào)用。ActiveX控件中實現(xiàn)繪圖的部分代碼如下:
{……
//將位圖句柄調(diào)入緩沖區(qū)
CBitmap*pOldBitmap=m_pdcMemory->SelectObject(m_pBitmap);
m_pdcMemory-> SelectClipRgn(NULL);
m_pdcMemory->IntersectClipRect(&rectUpdate);
……
//用位圖填充指定的圖形區(qū)域
m_pdcMemory->PatBlt(rectUpdate.left,rectUpdate.top, rectUpdate.Width(), rectUpdate. Height(),PATCOPY);
//將指向緩沖區(qū)的指針傳遞給繪圖函數(shù)
OnDraw (m_pdcMemory);
//將緩沖區(qū)中的繪好的圖形復(fù)制到屏幕上
dc.BitBlt(rectUpdate.left,rectUpdate.top,rectUpdate.Width(),rectUpdate.Height(),m_pdcMemory,rectUpdate.left,rectUpdate.top,SRCCOPY); ……}
4 應(yīng)用實例
對于電廠遠(yuǎn)程監(jiān)控系統(tǒng),不僅要訪問實時數(shù)據(jù)信息,而且還要將實時數(shù)據(jù)直觀地顯示在客戶端屏幕上。為此,我們采用Visio 2000來進(jìn)行畫面組態(tài),把組態(tài)的畫面供ActiveX控件調(diào)用,其中用Visual C++來設(shè)計ActiveX控件[5]。
下面是系統(tǒng)中的機(jī)組運行分析曲線控件"Trendlineshow1.ocx",其屬性如下所示:Host:運行服務(wù)代理的主機(jī)名或IP地址;Graphics:圖形文件的URL;AutoRefresh:是否自動刷新;RefreshTime:刷新周期,缺省為5s;AutoSize:決定是否根據(jù)圖形大小自動改變控件大小,缺省為真。
控件的工作過程如下:(1)利用CDataPathProperty類異步下載圖形文件,自動緩存在本地機(jī)器中,需要時則直接從緩沖區(qū)中讀取,加快了執(zhí)行速度;(2)利用CSocket類與服務(wù)代理建立TCP連接;(3)根據(jù)刷新周期啟動定時器;(4)處理定時器消息(WM-TIMER),根據(jù)圖形文件中實時元件的定義向服務(wù)代理請求數(shù)據(jù),并刷新圖形數(shù)據(jù)顯示。
其ASP網(wǎng)頁部分代碼如下:
<H2 align=center>#4機(jī)組運行分析趨勢曲線</H2>
<OBJECT id=trendlineshow1 style="Z-INDEX:100;LEFT:-2px;POSITION:absolute;TOP:45px" codeBase=http://10.1.32.222/ocx/show1.ocx classid="clsid:1A2D46F5-434C-42A1-1A9E7B9A2B8B">
<PARAM NAME="_ExtentX" VALUE="2312"> <PARAM NAME="_ExtentY" VALUE="1132">
<PARAM NAME="SQLServerName" VALUE="websvr"> <PARAM NAME="UID"VALUE="RMDSUser">
<PARAM NAME="PWD" VALUE=""> <PARAMNAME="DataBaseName" VALUE="rmdsdb"></OBJECT>
這里,網(wǎng)頁代碼中提供了OCX的ClassID和文件的URL??蛻舳藶g覽時,會在本地注冊表中查詢該OCX的ClassID,如果本地沒有該的控件,或其版本不是最新時,瀏覽器會自動按照CodeBase指定的路徑從服務(wù)器下載控件并安裝注冊到本地機(jī)器上??蛻舳擞肐E瀏覽時,其安全級別設(shè)置為擁有合法代碼簽名的ActiveX控件下載。
5 結(jié)論
基于Internet的電廠遠(yuǎn)程實時監(jiān)控系統(tǒng),采用B/S體系結(jié)構(gòu),利用ASP技術(shù)的ActiveX/DCOM組件支持,很好地實現(xiàn)了系統(tǒng)遠(yuǎn)程監(jiān)控和圖形數(shù)據(jù)的動態(tài)顯示和自動刷新。而且ActiveX技術(shù)對于實現(xiàn)業(yè)務(wù)邏輯封裝、提高軟件的可重用性和可維護(hù)性、開發(fā)高效和安全的圖形顯示系統(tǒng)具有積極的意義,是現(xiàn)代電廠遠(yuǎn)程監(jiān)控技術(shù)的發(fā)展方向。
參考文獻(xiàn):
[1] 陳冠宇,熊偉.基于ASP的圖形動態(tài)顯示技術(shù)[J].微機(jī)發(fā)展,2004.07,49-51.
[2] 孫文波,盧建軍.基于Web的遠(yuǎn)程監(jiān)控技術(shù)及比較[J].西安科技大學(xué)學(xué)報.2002.02.
[3] 李玉奇,劉旺開.基于B/S結(jié)構(gòu)下分布式控制系統(tǒng)的實時監(jiān)控[J].微計算機(jī)信息,2004,20(2),53-55.
[4] 周震,虞鶴松.工業(yè)監(jiān)控環(huán)境下Web頁面實時數(shù)據(jù)的自動更新[J].計算機(jī)應(yīng)用.2001.11.
[5] 宇鵬,王曉峰等.Visual C++實踐與提高-ActiveX篇[M].北京: 中國鐵道出版社.2001.