摘 要:為克服傳統(tǒng)監(jiān)控系統(tǒng)中存在的系統(tǒng)數(shù)據(jù)實時性不強、有效資源不能共享等缺陷,提出一種基于.NET技術(shù)的遠程監(jiān)控系統(tǒng),該系統(tǒng)采用B/S模式實現(xiàn)與局域網(wǎng)的無縫連接;利用多線程技術(shù)實現(xiàn)數(shù)據(jù)的采集和處理;利用Socket通信技術(shù)保證現(xiàn)場數(shù)據(jù)和操作指令的可靠傳輸;利用先進的GDI+技術(shù)實現(xiàn)動態(tài)圖形的生成和傳送。著重從服務(wù)器端的數(shù)據(jù)采集處理、數(shù)據(jù)通信及客戶端的動態(tài)圖形顯示三個方面對監(jiān)控系統(tǒng)的實現(xiàn)進行論述。該系統(tǒng)不但彌補了傳統(tǒng)監(jiān)控系統(tǒng)的不足,而且提高了系統(tǒng)的實時性和快速性。
關(guān)鍵詞:遠程監(jiān)控; 多線程; Socket; 動態(tài)圖形
中圖分類號:TP311 文獻標(biāo)識碼:A
文章編號:1004-373X(2010)13-0137-03
Design and Realization of Remote Monitoring System Based on .NET Technology
CHEN Chun-e
(College of Physics and Information Technology, Sh
nxi Normal University, Xi’an 710062, China)
Abstract: A remote monitoring system based on .NET technology is proposed for overcoming defects in traditional monitoring system such as weak real-time data and unshared efficient resource. This system adopts B/S mode to connect WAN and LAN seamlessly, uses multithreading technique to realize data acquisition and processing, deploys the Socket technology to ensure a reliable data transmission, uses GDI+ technology to achieve dynamic graphics generation and transmission. The monitoring system is realized by the data acquisition, processing and transmission of server-side and dynamic graphic display of client-side. The system makes up the deficiency of the traditional monitoring system, and improves the speedy and real-time performance.
Keywords: remote monitoring; multithreading; Socket; dynamic figure
遠程監(jiān)控系統(tǒng)指通過局域網(wǎng)、廣域網(wǎng)等計算機網(wǎng)絡(luò),使用TCP/IP技術(shù),遠程實現(xiàn)對工業(yè)生產(chǎn)過程的監(jiān)視及控制,讓管理層或調(diào)度人員看到過去只有操作人員才能看到的生產(chǎn)現(xiàn)場的實時信息,并且能夠?qū)崿F(xiàn)對生產(chǎn)現(xiàn)場的遠程調(diào)度、指揮決策以及遠程對生產(chǎn)設(shè)備的在線配置和故障診斷等功能[1]。傳統(tǒng)的監(jiān)控系統(tǒng)因前臺的人機界面層和后臺的數(shù)據(jù)采集層復(fù)雜程度不同常采用不同的開發(fā)環(huán)境,兩層都是能獨立運行的應(yīng)用程序,在實際使用時系統(tǒng)維護困難、配置復(fù)雜且遠程調(diào)度的靈活性也很差,網(wǎng)絡(luò)技術(shù)和.NET技術(shù)的發(fā)展很好地解決了上述問題,為更好地實現(xiàn)遠程監(jiān)控提供了開發(fā)平臺。本文提出了一種在.NET技術(shù)基礎(chǔ)上構(gòu)建的基于B/S結(jié)構(gòu)的遠程監(jiān)控系統(tǒng),克服了傳統(tǒng)監(jiān)控系統(tǒng)的弊端,并使得系統(tǒng)的實時性和快速性得到了提高。
1 遠程監(jiān)控系統(tǒng)設(shè)計
1.1 系統(tǒng)的總體結(jié)構(gòu)
遠程監(jiān)控系統(tǒng)一般由現(xiàn)場數(shù)據(jù)采集與控制子系統(tǒng)、數(shù)據(jù)存儲與轉(zhuǎn)發(fā)子系統(tǒng)、客戶端接收與命令發(fā)送子系統(tǒng)三部分組成,監(jiān)控系統(tǒng)的網(wǎng)絡(luò)架構(gòu)如圖1所示。在圖1中,現(xiàn)場測控單元負責(zé)采集各個現(xiàn)場控制節(jié)點的運行情況數(shù)據(jù),然后與應(yīng)用服務(wù)器交換數(shù)據(jù)以實現(xiàn)數(shù)據(jù)的通信與顯示;數(shù)據(jù)庫服務(wù)器用于存儲系統(tǒng)實時與歷史運行數(shù)據(jù)以及系統(tǒng)設(shè)備參數(shù)等,采集到的實時參數(shù)保存于實時數(shù)據(jù)庫以便響應(yīng)客戶端的實時數(shù)據(jù)請求,實時數(shù)據(jù)更新后送歷史數(shù)據(jù)庫保存便于統(tǒng)計分析;Web服務(wù)器和應(yīng)用服務(wù)器提供實時監(jiān)控功能以及用戶的查詢分析。
圖1 系統(tǒng)網(wǎng)絡(luò)架構(gòu)
1.2 監(jiān)控系統(tǒng)的軟件模型
該遠程監(jiān)控系統(tǒng)采用基于Internet的TCP/IP協(xié)議,通過B/S[2]方式實現(xiàn)對遠程設(shè)備的實時監(jiān)測和控制,其工作模式如圖2所示。采用B/S結(jié)構(gòu),客戶端獲取數(shù)據(jù)的渠道不止一條,對于非實時數(shù)據(jù)可以直接向Web服務(wù)器發(fā)出數(shù)據(jù)查詢請求,對實時數(shù)據(jù)可通過頁面內(nèi)嵌的ActiveX控件,直接與應(yīng)用服務(wù)器通信。同時B/S模式可實現(xiàn)不同平臺的跨接問題,實現(xiàn)Web網(wǎng)與局域網(wǎng)的無縫連接,使得不管是監(jiān)控中心內(nèi)部管理員還是上級調(diào)度人員以及普通用戶只需要安裝通用的瀏覽器就可以訪問遠程設(shè)備相應(yīng)的運行信息。
圖2 監(jiān)控系統(tǒng)的工作模式
1.3 系統(tǒng)功能模塊
用戶管理模塊:包括新增、修改、刪除用戶和對系統(tǒng)的權(quán)限進行設(shè)置,確保不同的權(quán)限只能執(zhí)行相應(yīng)的操作。
實時數(shù)據(jù)顯示模塊:以圖形、表格的形式顯示出監(jiān)控點的最新數(shù)據(jù)。
實時控制模塊:對遠程設(shè)備的運行參數(shù)進行修改,從而控制其運行狀態(tài)。
數(shù)據(jù)查詢模塊:正常監(jiān)控數(shù)據(jù)查詢或者根據(jù)自定義條件對歷史數(shù)據(jù)進行分析查詢。
統(tǒng)計報表模塊:生成監(jiān)控數(shù)據(jù)報表、綜合運行數(shù)據(jù)報表,并能夠生成日報、月報、半年報和年報等各種報表,報表格式可按照用戶的要求定制,可直接進行預(yù)覽、打印。
2 遠程監(jiān)控系統(tǒng)實現(xiàn)的關(guān)鍵技術(shù)
2.1 基于多線程的數(shù)據(jù)采集和處理[3-5]
遠程監(jiān)控系統(tǒng)既要進行實時數(shù)據(jù)采集處理,又要進行數(shù)據(jù)顯示刷新,還要不斷掃描是否有故障發(fā)生,同時還要接受遠程的控制命令,為了使系統(tǒng)能夠穩(wěn)定、快速的運行在此采用多線程技術(shù)。.NET是一個多線程的環(huán)境,.NET基礎(chǔ)類庫的System.Threading命名空間提供了大量的類和接口支持多線程,它能夠創(chuàng)建并控制線程,設(shè)置其優(yōu)先級并獲取其狀態(tài)。
分析服務(wù)器端程序任務(wù),主要有偵聽、接收客戶端連接請求,數(shù)據(jù)采集,數(shù)據(jù)處理、傳輸和存儲、控制命令的接收與下發(fā)等,因此在程序中使用了四個線程處理上述任務(wù)。分別為:
(1) 主線程:主要進行一系列相關(guān)的系統(tǒng)初始化、輔助線程的創(chuàng)建與管理、數(shù)據(jù)刷新顯示、數(shù)據(jù)交互及報表管理打印等。
(2) 數(shù)據(jù)采集、處理線程:主要輪詢各現(xiàn)場測控單元,接收現(xiàn)場設(shè)備運行數(shù)據(jù),創(chuàng)建數(shù)據(jù)處理線程。
(3) 數(shù)據(jù)處理線程:主要對采集來的現(xiàn)場原始數(shù)據(jù)進行格式識別,打包發(fā)往客戶端;按一定的時間間隔將識別后的數(shù)據(jù)存入歷史數(shù)據(jù)庫,同時在這個過程中對故障報警做出立即響應(yīng)。
(4) 控制命令線程:主要從用戶的操作中獲取控制命令,然后根據(jù)被控對象組織相應(yīng)的報文,并調(diào)用通訊模塊下發(fā)調(diào)控命令。
下面的代碼說明線程的創(chuàng)建過程:
//在代碼段的頂部導(dǎo)入名稱空間
Imports System
Imports System.Threading
//主線程創(chuàng)建和管理輔助線程
Protected Sub main()
Dim object1 as new class1() //創(chuàng)建數(shù)據(jù)采集類Class1的對象
Dim object2 as new class2() //創(chuàng)建數(shù)據(jù)處理類Class2的對象
Dim t1 as Thread=new Thread(Addressof object1.method1)
//創(chuàng)建數(shù)據(jù)采集線程的對象,并通過Addressof操作符找到t1線程要運行方法的地址
Dim t2 as Thread=new Thread(Addressof object2.method2)
//創(chuàng)建數(shù)據(jù)采集線程的對象,并通過Addressof操作符找到t2線程要運行方法的地址
T1.start()//啟動數(shù)據(jù)采集線程
T2.start()//啟動數(shù)據(jù)處理線程
…… //異常處理
End sub
在系統(tǒng)的實現(xiàn)過程中,將數(shù)據(jù)的各種處理方法封裝在類中,為了達到數(shù)據(jù)采集和數(shù)據(jù)處理的同步,使用SyncLock聲明來保證執(zhí)行的多線程不會同時訪問共享數(shù)據(jù)。
2.2 基于Socket技術(shù)實現(xiàn)系統(tǒng)的實時監(jiān)控[6-7]
監(jiān)控系統(tǒng)中客戶端和前置機均支持TCP/IP協(xié)議,同時為了保證采集到的現(xiàn)場設(shè)備運行數(shù)據(jù)通過網(wǎng)絡(luò)傳輸時的可靠性、準(zhǔn)確性和控制命令傳輸?shù)募皶r性,網(wǎng)絡(luò)通信采用基于TCP/IP基礎(chǔ)上的Socket技術(shù)來實現(xiàn),它通過內(nèi)置的流量控制解決數(shù)據(jù)的擁塞,將數(shù)據(jù)當(dāng)作字節(jié)流,應(yīng)用程序可以發(fā)送任意長的數(shù)據(jù),這正符合系統(tǒng)對數(shù)據(jù)的要求,同時客戶端發(fā)出的調(diào)控命令根據(jù)設(shè)備協(xié)議編輯結(jié)果組裝成數(shù)據(jù)包,通過現(xiàn)場測控單元發(fā)送給設(shè)備,實現(xiàn)對設(shè)備的調(diào)控。
在實現(xiàn)的過程中,通過在應(yīng)用服務(wù)器內(nèi)封裝Socket的服務(wù)器端,而在ActiveX控件內(nèi)封裝Socket的客戶端應(yīng)用,并將ActiveX控件嵌入Web頁面實現(xiàn)監(jiān)控界面的顯示。當(dāng)用戶第一次訪問服務(wù)器的網(wǎng)頁時,IE瀏覽器會自動把ActiveX控件下載到本地計算機中,并自動注冊。通過使用ActiveX控件和Socket,客戶端可以直接讀取應(yīng)用服務(wù)器上數(shù)據(jù)采集程序采集的數(shù)據(jù)并實時更新,并不需要通過數(shù)據(jù)庫進行中轉(zhuǎn),這樣用戶就可以對現(xiàn)場設(shè)備進行實時監(jiān)控。查詢歷史數(shù)據(jù)時,用戶通過瀏覽器向Web服務(wù)器提出請求,Web服務(wù)器接受請求后通過ADO.NET訪問數(shù)據(jù)庫,并將查詢結(jié)果以HTML頁面的形式返回到瀏覽器。.NET框架下在System.Net.Socket命名空間內(nèi)可以實現(xiàn)Socket接口的托管。以下的示例顯示如何使用Socket向服務(wù)器發(fā)送數(shù)據(jù)和接收響應(yīng)。
//發(fā)送數(shù)據(jù)
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp)//創(chuàng)建Socket對象并通過TCP發(fā)送數(shù)據(jù)
s.Connect(Ephost) //通過特定端口連接服務(wù)器
s.Send(ByteGet,ByteGet.Length,0) //向服務(wù)器發(fā)送采集到的數(shù)據(jù)
//接受響應(yīng)
Dim bytes As Int32=s.Receive(RecvBytes, RecvBytes.Length, 0)
strRetPage=″Default HTML page on″ server ″:″ ControlChars.CrLf
strRetPage = strRetPage+ASCII.GetString(RecvBytes, 0, bytes)
2.3 基于GDI+技術(shù)的動態(tài)圖形的生成和傳送[8]
對于遠程監(jiān)控系統(tǒng)不僅要求其能夠提供各種數(shù)據(jù)報表,同時還要求提供各種趨勢曲線的分析畫面,給人以形象直觀的印象中。各種設(shè)備對象的運行情況根據(jù)實時數(shù)據(jù)改變狀態(tài),動態(tài)圖形相當(dāng)復(fù)雜,為了將動態(tài)圖形在瀏覽器中顯示,方便監(jiān)控中心的工作人員進行監(jiān)控,在該監(jiān)控系統(tǒng)中采用了.NET提供的GDI+繪圖類庫在服務(wù)器端生成復(fù)雜的動態(tài)圖形,然后根據(jù)瀏覽器的請求將動態(tài)圖形實時發(fā)送到客戶機的方法。.NET生成圖形功能在System.Drawing名稱空間中封裝建立一個普通圖形所要求的邏輯后,構(gòu)造一個圖形對象通過它的Save方法將其保存到磁盤或者將其發(fā)送到.NET輸出流中,在ASPNET中通過ResponseO(jiān)utputStream屬性解釋.NET輸出流,這樣就可以直接將圖形的內(nèi)容發(fā)送到客戶端瀏覽器。具體實現(xiàn)如下:
dim newCharEngine as New ChartEngine
//定義繪圖對象,其中ChartEngine使用.NET提供的GDI+編寫的畫圖類模塊
dim pl as BitMap=newCharEngine.DrawChart(600,400,myChartData)
//使用ChartEngine類,圖形生成后以流的形式發(fā)送到客戶端瀏覽器
pl.Save(Response.OutputStream,ImageFormat.JPEG)
3 結(jié) 語
.NET 是一個開發(fā)和運行軟件的新環(huán)境,便于開發(fā)基于 Web 的服務(wù),擁有豐富的運行庫服務(wù)以支持用多種編程語言編寫的組件,具有跨語言和跨平臺的互操作能力?;?NET的遠程監(jiān)控系統(tǒng)實現(xiàn)了對各種監(jiān)測對象的實時監(jiān)控,并具有實時故障診斷,歷史記錄可查詢、打印,易于升級和擴展等諸多優(yōu)點,目前已經(jīng)在實際中得到了應(yīng)用。
參考文獻
[1]劉建榮,武樺,趙楊.基于.NET的水電廠遠程監(jiān)控系統(tǒng)的研究[ J] .西北水力發(fā)電,2006(1):4-7.
[2]郝曉弘,蘇淵.基于Web的變電站遠程監(jiān)控系統(tǒng)[ J] .電網(wǎng)技術(shù),2003(7):32-35.
[3]張焰林.基于VB.NET的多線程技術(shù)應(yīng)用[ J] .計算機系統(tǒng)應(yīng)用,2009(2):136-138.
[4]馮美霞.多線程應(yīng)用程序的同步技術(shù)[ J] .計算機應(yīng)用,2001(6):24-26.
[5]孫開放,張紅.再談多線程技術(shù)在變電站監(jiān)控系統(tǒng)中的應(yīng)用[ J] .微計算機信息,2006,22(7):60-61.
[6]鄢鋒,桂衛(wèi)華,胡志坤,等.基于Socket的整流裝置遠程監(jiān)控系統(tǒng)[ J] .計算機工程,2008(5):243-245.
[7]李宗寶,陳虹,董航飛,等.基于ASP.NET技術(shù)的遠程監(jiān)控系統(tǒng)實現(xiàn)方法[ J] .電力系統(tǒng)通信,2007,34(2):40-42.
[8]牟罕勇,張禮貴.GDI+和.NET技術(shù)在機艙自動化監(jiān)控系統(tǒng)中的應(yīng)用[ J] .江蘇船舶,2009(4):32-34.
[9]胡士毅,魏豐,曹宇.一種基于.NET技術(shù)的Web遠程監(jiān)控方案[ J] .工業(yè)控制計算機,2003(2):39-40.
[10]王超,張鵬.ASP.NET/XML深入編程技術(shù)[M].北京:希望電子出版社,2002.