摘 要:為克服傳統監控系統中存在的系統數據實時性不強、有效資源不能共享等缺陷,提出一種基于.NET技術的遠程監控系統,該系統采用B/S模式實現與局域網的無縫連接;利用多線程技術實現數據的采集和處理;利用Socket通信技術保證現場數據和操作指令的可靠傳輸;利用先進的GDI+技術實現動態圖形的生成和傳送。著重從服務器端的數據采集處理、數據通信及客戶端的動態圖形顯示三個方面對監控系統的實現進行論述。該系統不但彌補了傳統監控系統的不足,而且提高了系統的實時性和快速性。
關鍵詞:遠程監控; 多線程; Socket; 動態圖形
中圖分類號:TP311 文獻標識碼: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
遠程監控系統指通過局域網、廣域網等計算機網絡,使用TCP/IP技術,遠程實現對工業生產過程的監視及控制,讓管理層或調度人員看到過去只有操作人員才能看到的生產現場的實時信息,并且能夠實現對生產現場的遠程調度、指揮決策以及遠程對生產設備的在線配置和故障診斷等功能[1]。傳統的監控系統因前臺的人機界面層和后臺的數據采集層復雜程度不同常采用不同的開發環境,兩層都是能獨立運行的應用程序,在實際使用時系統維護困難、配置復雜且遠程調度的靈活性也很差,網絡技術和.NET技術的發展很好地解決了上述問題,為更好地實現遠程監控提供了開發平臺。本文提出了一種在.NET技術基礎上構建的基于B/S結構的遠程監控系統,克服了傳統監控系統的弊端,并使得系統的實時性和快速性得到了提高。
1 遠程監控系統設計
1.1 系統的總體結構
遠程監控系統一般由現場數據采集與控制子系統、數據存儲與轉發子系統、客戶端接收與命令發送子系統三部分組成,監控系統的網絡架構如圖1所示。在圖1中,現場測控單元負責采集各個現場控制節點的運行情況數據,然后與應用服務器交換數據以實現數據的通信與顯示;數據庫服務器用于存儲系統實時與歷史運行數據以及系統設備參數等,采集到的實時參數保存于實時數據庫以便響應客戶端的實時數據請求,實時數據更新后送歷史數據庫保存便于統計分析;Web服務器和應用服務器提供實時監控功能以及用戶的查詢分析。
圖1 系統網絡架構
1.2 監控系統的軟件模型
該遠程監控系統采用基于Internet的TCP/IP協議,通過B/S[2]方式實現對遠程設備的實時監測和控制,其工作模式如圖2所示。采用B/S結構,客戶端獲取數據的渠道不止一條,對于非實時數據可以直接向Web服務器發出數據查詢請求,對實時數據可通過頁面內嵌的ActiveX控件,直接與應用服務器通信。同時B/S模式可實現不同平臺的跨接問題,實現Web網與局域網的無縫連接,使得不管是監控中心內部管理員還是上級調度人員以及普通用戶只需要安裝通用的瀏覽器就可以訪問遠程設備相應的運行信息。
圖2 監控系統的工作模式
1.3 系統功能模塊
用戶管理模塊:包括新增、修改、刪除用戶和對系統的權限進行設置,確保不同的權限只能執行相應的操作。
實時數據顯示模塊:以圖形、表格的形式顯示出監控點的最新數據。
實時控制模塊:對遠程設備的運行參數進行修改,從而控制其運行狀態。
數據查詢模塊:正常監控數據查詢或者根據自定義條件對歷史數據進行分析查詢。
統計報表模塊:生成監控數據報表、綜合運行數據報表,并能夠生成日報、月報、半年報和年報等各種報表,報表格式可按照用戶的要求定制,可直接進行預覽、打印。
2 遠程監控系統實現的關鍵技術
2.1 基于多線程的數據采集和處理[3-5]
遠程監控系統既要進行實時數據采集處理,又要進行數據顯示刷新,還要不斷掃描是否有故障發生,同時還要接受遠程的控制命令,為了使系統能夠穩定、快速的運行在此采用多線程技術。.NET是一個多線程的環境,.NET基礎類庫的System.Threading命名空間提供了大量的類和接口支持多線程,它能夠創建并控制線程,設置其優先級并獲取其狀態。
分析服務器端程序任務,主要有偵聽、接收客戶端連接請求,數據采集,數據處理、傳輸和存儲、控制命令的接收與下發等,因此在程序中使用了四個線程處理上述任務。分別為:
(1) 主線程:主要進行一系列相關的系統初始化、輔助線程的創建與管理、數據刷新顯示、數據交互及報表管理打印等。
(2) 數據采集、處理線程:主要輪詢各現場測控單元,接收現場設備運行數據,創建數據處理線程。
(3) 數據處理線程:主要對采集來的現場原始數據進行格式識別,打包發往客戶端;按一定的時間間隔將識別后的數據存入歷史數據庫,同時在這個過程中對故障報警做出立即響應。
(4) 控制命令線程:主要從用戶的操作中獲取控制命令,然后根據被控對象組織相應的報文,并調用通訊模塊下發調控命令。
下面的代碼說明線程的創建過程:
//在代碼段的頂部導入名稱空間
Imports System
Imports System.Threading
//主線程創建和管理輔助線程
Protected Sub main()
Dim object1 as new class1() //創建數據采集類Class1的對象
Dim object2 as new class2() //創建數據處理類Class2的對象
Dim t1 as Thread=new Thread(Addressof object1.method1)
//創建數據采集線程的對象,并通過Addressof操作符找到t1線程要運行方法的地址
Dim t2 as Thread=new Thread(Addressof object2.method2)
//創建數據采集線程的對象,并通過Addressof操作符找到t2線程要運行方法的地址
T1.start()//啟動數據采集線程
T2.start()//啟動數據處理線程
…… //異常處理
End sub
在系統的實現過程中,將數據的各種處理方法封裝在類中,為了達到數據采集和數據處理的同步,使用SyncLock聲明來保證執行的多線程不會同時訪問共享數據。
2.2 基于Socket技術實現系統的實時監控[6-7]
監控系統中客戶端和前置機均支持TCP/IP協議,同時為了保證采集到的現場設備運行數據通過網絡傳輸時的可靠性、準確性和控制命令傳輸的及時性,網絡通信采用基于TCP/IP基礎上的Socket技術來實現,它通過內置的流量控制解決數據的擁塞,將數據當作字節流,應用程序可以發送任意長的數據,這正符合系統對數據的要求,同時客戶端發出的調控命令根據設備協議編輯結果組裝成數據包,通過現場測控單元發送給設備,實現對設備的調控。
在實現的過程中,通過在應用服務器內封裝Socket的服務器端,而在ActiveX控件內封裝Socket的客戶端應用,并將ActiveX控件嵌入Web頁面實現監控界面的顯示。當用戶第一次訪問服務器的網頁時,IE瀏覽器會自動把ActiveX控件下載到本地計算機中,并自動注冊。通過使用ActiveX控件和Socket,客戶端可以直接讀取應用服務器上數據采集程序采集的數據并實時更新,并不需要通過數據庫進行中轉,這樣用戶就可以對現場設備進行實時監控。查詢歷史數據時,用戶通過瀏覽器向Web服務器提出請求,Web服務器接受請求后通過ADO.NET訪問數據庫,并將查詢結果以HTML頁面的形式返回到瀏覽器。.NET框架下在System.Net.Socket命名空間內可以實現Socket接口的托管。以下的示例顯示如何使用Socket向服務器發送數據和接收響應。
//發送數據
Dim s As New Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp)//創建Socket對象并通過TCP發送數據
s.Connect(Ephost) //通過特定端口連接服務器
s.Send(ByteGet,ByteGet.Length,0) //向服務器發送采集到的數據
//接受響應
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+技術的動態圖形的生成和傳送[8]
對于遠程監控系統不僅要求其能夠提供各種數據報表,同時還要求提供各種趨勢曲線的分析畫面,給人以形象直觀的印象中。各種設備對象的運行情況根據實時數據改變狀態,動態圖形相當復雜,為了將動態圖形在瀏覽器中顯示,方便監控中心的工作人員進行監控,在該監控系統中采用了.NET提供的GDI+繪圖類庫在服務器端生成復雜的動態圖形,然后根據瀏覽器的請求將動態圖形實時發送到客戶機的方法。.NET生成圖形功能在System.Drawing名稱空間中封裝建立一個普通圖形所要求的邏輯后,構造一個圖形對象通過它的Save方法將其保存到磁盤或者將其發送到.NET輸出流中,在ASPNET中通過ResponseOutputStream屬性解釋.NET輸出流,這樣就可以直接將圖形的內容發送到客戶端瀏覽器。具體實現如下:
dim newCharEngine as New ChartEngine
//定義繪圖對象,其中ChartEngine使用.NET提供的GDI+編寫的畫圖類模塊
dim pl as BitMap=newCharEngine.DrawChart(600,400,myChartData)
//使用ChartEngine類,圖形生成后以流的形式發送到客戶端瀏覽器
pl.Save(Response.OutputStream,ImageFormat.JPEG)
3 結 語
.NET 是一個開發和運行軟件的新環境,便于開發基于 Web 的服務,擁有豐富的運行庫服務以支持用多種編程語言編寫的組件,具有跨語言和跨平臺的互操作能力。基于.NET的遠程監控系統實現了對各種監測對象的實時監控,并具有實時故障診斷,歷史記錄可查詢、打印,易于升級和擴展等諸多優點,目前已經在實際中得到了應用。
參考文獻
[1]劉建榮,武樺,趙楊.基于.NET的水電廠遠程監控系統的研究[ J] .西北水力發電,2006(1):4-7.
[2]郝曉弘,蘇淵.基于Web的變電站遠程監控系統[ J] .電網技術,2003(7):32-35.
[3]張焰林.基于VB.NET的多線程技術應用[ J] .計算機系統應用,2009(2):136-138.
[4]馮美霞.多線程應用程序的同步技術[ J] .計算機應用,2001(6):24-26.
[5]孫開放,張紅.再談多線程技術在變電站監控系統中的應用[ J] .微計算機信息,2006,22(7):60-61.
[6]鄢鋒,桂衛華,胡志坤,等.基于Socket的整流裝置遠程監控系統[ J] .計算機工程,2008(5):243-245.
[7]李宗寶,陳虹,董航飛,等.基于ASP.NET技術的遠程監控系統實現方法[ J] .電力系統通信,2007,34(2):40-42.
[8]牟罕勇,張禮貴.GDI+和.NET技術在機艙自動化監控系統中的應用[ J] .江蘇船舶,2009(4):32-34.
[9]胡士毅,魏豐,曹宇.一種基于.NET技術的Web遠程監控方案[ J] .工業控制計算機,2003(2):39-40.
[10]王超,張鵬.ASP.NET/XML深入編程技術[M].北京:希望電子出版社,2002.