郭 民,高 強,4,韓紅桂
(1.北京工業(yè)大學信息學部,北京 100124;2.數(shù)字社區(qū)教育部工程研究中心,北京 100124;3.計算智能與智能系統(tǒng)北京市重點實驗室,北京 100124;4.城市軌道交通北京實驗室,北京 100124)
隨著我國經濟迅速發(fā)展,污水排放量逐漸增多,水環(huán)境的保護越來越受到許多監(jiān)管和環(huán)保部門的重視[1-3]?!笆濉币?guī)劃的開局起步期,我國為了加強對水環(huán)境的保護,污染源的監(jiān)管以及污水的治理,開始加快污水處理廠的建設[4-5]。但污水處理廠普遍分布較廣,位置分散,如何搭建監(jiān)控系統(tǒng)對現(xiàn)有的污水處理廠進行統(tǒng)一、有效的監(jiān)管成為越來越關注的問題[6-9]。
傳統(tǒng)的污水處理監(jiān)控系統(tǒng)多是面向水廠個體,它們之間既有共性又有個性,既相對獨立又相互耦合。為了對區(qū)域內的污水處理廠進行集中監(jiān)控,必須設計新的系統(tǒng)架構方案,但是污水處理監(jiān)控系統(tǒng)規(guī)模龐大、結構復雜、目標多樣、影響因素多,一定程度上會帶來系統(tǒng)開發(fā)周期長,效率低,復用性不高,維護難,擴展性差等問題。針對以上問題,文中結合Web Service的特點提出了一種基于Web Service技術的污水處理遠程監(jiān)控系統(tǒng)的設計與開發(fā)方法,結果表明利用Web Service技術開發(fā)的污水處理遠程監(jiān)控系統(tǒng)為軟件開發(fā)提供了標準,增強了軟件及模塊的復用性,提高了軟件開發(fā)效率,方便了系統(tǒng)的維護,并為軟件的擴展帶來了便捷性。
Web Service又名擴展型可標記語言(extensible markup language,XML)Web Service[10]。Web Service是一種可自主編寫的服務程序,任意語言都可以開發(fā),程序體積小,并且在XML文檔的基礎上,可以保證不同的平臺或操作系統(tǒng)之間自由通信。Web Service通常又被定義為一組模塊化的應用程序接口(application programming interface,API),其顯著特點為高獨立性、高復用性、高集成性[11]。
Web Service對象具有低耦合和高獨立性。Web Service所采取的通訊協(xié)議為簡單對象訪問協(xié)議(simple object access protocol,SOAP),SOAP是基于XML和超文本傳輸協(xié)議(hyper text transfer protocol,HTTP)的一種協(xié)議,而HTTP為網絡間交互的最基本的協(xié)議[12]。
Web Service是一種服務型的應用程序,Web Service使用者在調用服務時,只需要了解服務的功能,以及服務接口的輸入和輸出參數(shù),并且不需要考慮服務內部的邏輯實現(xiàn),所以Web Service具有高復用性[13]。
Web Service也具有高集成性。由于Web服務使用了最基本的通用協(xié)議和任何平臺都可解析的XML文檔,完全屏蔽了不同的平臺、不同的組件、不同的軟件、不同語言間的差異,實現(xiàn)了不同環(huán)境下的各個模塊間最高的集成性[14]。
因此,將Web Service技術應用于污水處理遠程監(jiān)控系統(tǒng)中,將充分發(fā)揮Web Service特點,也將有效解決污水處理遠程監(jiān)控系統(tǒng)中軟件及模塊可復用性低的問題。
Web Service 接口的開發(fā)可以分為服務器端開發(fā)和客戶端開發(fā)兩個方面:
(1)服務端開發(fā):主要是開發(fā)者通過分析各個系統(tǒng)的業(yè)務模塊間的相通的部分,對相通的部分的邏輯程序進行編寫,并且規(guī)范輸入與輸出的數(shù)據類型,將輸入與輸出的參數(shù)以及參數(shù)類型寫入WSDL文檔,以便客戶端對服務進行查詢和了解。
(2)客戶端開發(fā):客戶端的開發(fā)更多的集中在對服務的引用中,客戶端根據所需的服務來尋找相應的WSDL文檔。根據WSDL文檔,客戶端會發(fā)送一個包含URL地址的SOAP請求到服務器端,以請求使用該Web Service接口,服務端在接收到SOAP請求消息后,再通過HTTP請求將應答的消息返回客戶端[15]。
污水處理遠程監(jiān)控系統(tǒng)主要負責收集所有污水處理廠水處理工藝的實時數(shù)據,并對數(shù)據進行預處理和展示。污水處理遠程監(jiān)控系統(tǒng)根據對象的不同分為兩大功能:數(shù)據采集與處理;數(shù)據顯示與分析。數(shù)據采集與處理模塊主要包含服務器采集PLC的信號數(shù)據,并對電信號進行數(shù)模轉換。數(shù)據顯示模塊主要包含流程顯示模塊、報警管理模塊、趨勢分析模塊、報表管理模塊、圖表分析模塊、系統(tǒng)管理模塊等,具體功能模塊如圖1所示。
圖1 污水處理遠程監(jiān)控系統(tǒng)功能模塊
報警管理模塊主要是對水質數(shù)據以及采集設備的異常進行報警,設備報警一般包含設備名稱、設備編號、報警開始時間、報警解除時間等屬性,水質報警一般包含工藝名稱、水質參數(shù)名稱、報警開始時間、報警解除時間等屬性。該模塊的總體輸入為設備名稱、設備編號、工藝名稱、參數(shù)名稱等。報警發(fā)生時間、報警解除時間以及報警級別既可以作為報警管理模塊的輸入,同時可以作為輸出。
趨勢分析模塊、報表管理模塊、圖表分析模塊等主要根據不同的條件查詢數(shù)據庫中的數(shù)據,并將數(shù)據以表格或折線的形式展現(xiàn)出來。利用工藝名稱、參數(shù)名稱、時間等參數(shù)可以對數(shù)據庫中的相應的水質數(shù)據進行查詢,并將查詢結果作為返回值返回??偟膩碚f,這些模塊輸入為工藝名稱、參數(shù)名稱、查詢起止時間,輸出為參數(shù)值、采集時間等。
綜上所述,不同的功能模塊具有不同的功能,需要不同的數(shù)據,因此輸入與輸出不可能完全相同,從而導致了模塊的復用性不高。為了增強模塊的復用性,將所有的輸入與輸出進行整合,接口的輸入與輸出參數(shù)如表1、表2所示。
表1 接口輸入參數(shù)
為了提供完整的業(yè)務功能以及需要的系統(tǒng)功能,Web Service需要為所有的功能模塊提供接口,包括污水處理流程顯示模塊、報警管理模塊、趨勢分析模塊、報表管理模塊、圖表分析模塊、系統(tǒng)安全管理模塊等。結合面向功能的思路,污水處理遠程監(jiān)控系統(tǒng)的各個
表2 接口輸出參數(shù)
功能模塊向Web Service服務器發(fā)出請求服務的SOAP協(xié)議指令,UDDI服務器接收請求的信息,接著UDDI服務器再將用戶的請求信息返回給Web Service服務端,Web Service服務端接收該請求,并通過接收到的WSDL文檔中工藝名稱、參數(shù)名稱、時間等參數(shù)調用系統(tǒng)數(shù)據庫中的數(shù)據,并把結果轉化為XML數(shù)據形式發(fā)送到客戶端,通過URL地址便可以觀察到污水處理過程數(shù)據,具體架構如圖2所示。
圖2 Web Service接口軟件架構
根據污水處理監(jiān)控系統(tǒng)的接口需求分析,系統(tǒng)的Web Service接口提供包括獲取水質參數(shù)值、采集時間、報警級別、設備狀態(tài)、報警發(fā)生時間、報警解除時間等接口功能。詳細接口參數(shù)定義如下:
參數(shù)1:獲取某工藝水質參數(shù)值
定義:public String getVal(String strInputXML)
輸入:字符串
輸入:返回水質參數(shù)值字符串
參數(shù)2:獲取水質參數(shù)的采集時間
定義:public String getValtime(String strInput XML)
輸入:字符串
輸出:返回水質參數(shù)的采集時間字符串
接口3:獲取某工藝設備狀態(tài)
定義:public String getState(String strInputXML)
輸入:字符串
輸出:返回工藝設備狀態(tài)布爾變量
參數(shù)4:獲取報警發(fā)生時間
定義:public String getReporterHTime(String str InputXML)
輸入:字符串
輸出:返回報警發(fā)生時間字符串
參數(shù)5:獲取報警解除時間
定義:public String getReportETime(String str InputXML)
輸入:字符串
輸出:返回報警解除時間字符串
參數(shù)6:獲取報警級別
定義:public String getReportLevel(String str InputXML)
輸入:字符串
輸出:返回報警級別字符串
由上述內容可知,系統(tǒng)提供的Web Service服務所提供的參數(shù)大致分為2種:獲取實時數(shù)據;獲取數(shù)據庫中的歷史數(shù)據。獲取數(shù)據庫的實時數(shù)據類型的輸入數(shù)據類型是string,返回值的數(shù)據類型是string,獲取歷史數(shù)據類型的輸入數(shù)據類型是bool、string、time,返回值的數(shù)據類型是string。
根據上述對污水處理遠程監(jiān)控系統(tǒng)的Web Service接口參數(shù)的分析,采用C#語言編寫Web Service服務,使用Visual Studio 2010進行開發(fā),在此以獲取水質參數(shù)溶解氧(dissolved oxygen,DO)為例進行說明,部分實現(xiàn)代碼如下:
public class WebService
{
public string getVal(string getval,Dictionary
{
//通過getval方法獲取DO數(shù)據
byte[]data = getRequestData(getval,DO);
string mSoapAction =″http://tempuri.org/″+ getval;
request.Headers.Add(″SOAPAction″,mSoapAction);
request.ContentLength = data.Length;
Stream rStream = request.GetRequest Stream();
rStream.Write(data,0,data.Length);
rStream.Close();
WebResponse response = request.Get Response();
Stream dataStream = response.Get ResponseStream();
StreamReader reader = new Stream Reader
(dataStream);
string result = reader.ReadToEnd();
dataStream.Close();
response.Close();
return result;
}
}
根據上述編寫的Web Service,定義getval為接口的方法名稱,并將方法對應的URL地址封裝到mSoapAction字符串中,并通過SOAP協(xié)議將字符串發(fā)送給UDDI服務器,尋找到getval方法。對于DO用response實體化以數(shù)據流的形式讀取,在讀取完后,對數(shù)據流和請求進行關閉,避免線程等待,占用CUP。相對應的接口文檔部分如下:
maxOccurs=″1″name=″i″ type=″s:string″/>
以上XML定義該接口的名字為getval,并利用complexType標簽對復雜接口進行描述,內容包含接口中參數(shù)的順序,該部分包含一個元素,通過字符串變量i獲取DO的值,i代表參數(shù)名稱。
對編寫的Web Service接口進行發(fā)布,生成相應的WSDL文檔,根據Web Service文檔中的getval方法中的SOAPAction內容發(fā)送POST請求,以實現(xiàn)數(shù)據的傳遞。
針對污水處理遠程監(jiān)控系統(tǒng)中存在系統(tǒng)開發(fā)周期長、效率低、復用性不高等問題,文中提出了一種基于Web Service技術設計開發(fā)污水處理遠程監(jiān)控系統(tǒng)的方法,增強了軟件及模塊的復用性。對污水處理遠程監(jiān)控系統(tǒng)設計了規(guī)范性的Web Service接口,方便了系統(tǒng)的功能擴展。
該接口的設計和實現(xiàn),立足于污水處理監(jiān)管的需要,它能大幅度減少系統(tǒng)開發(fā)與維護周期,增強軟件和模塊復用性,成倍地提高系統(tǒng)開發(fā)效率,方便系統(tǒng)功能擴展。