馬 慧,張 永
(許昌學院 信息工程學院,河南 許昌 461000)
基于C/ S架構(gòu)的水文監(jiān)測數(shù)據(jù)處理子系統(tǒng)設(shè)計
馬 慧,張 永
(許昌學院 信息工程學院,河南 許昌 461000)
針對在線水文監(jiān)控的實際需求,設(shè)計開發(fā)了基于C/S架構(gòu)的水文數(shù)據(jù)處理系統(tǒng)。該系統(tǒng)通過短信模塊接收水文數(shù)據(jù),在服務(wù)器端進行處理后,按要求格式存儲在數(shù)據(jù)庫中。用戶使用客戶端即可查詢相關(guān)水文數(shù)據(jù),并通過圖表等形式展示一段時間內(nèi)水位、流量等信息變化情況。該系統(tǒng)極大地提高了水文監(jiān)控系統(tǒng)水文數(shù)據(jù)的精度,方便工作人員及時、準確地掌握流域水文情況,為防汛決策提供可靠資料及依據(jù)。
C/S架構(gòu);水文監(jiān)測;水文數(shù)據(jù)處理;信息查詢
隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,在線水文監(jiān)測系統(tǒng)實現(xiàn)了水文信息的自動化處理,極大地提高了水文監(jiān)測與防汛能力[1]。但是流量監(jiān)測一直沒有實現(xiàn)在線遙測,是水文監(jiān)測應(yīng)用技術(shù)發(fā)展中的一個薄弱環(huán)節(jié)。調(diào)研結(jié)果顯示,河南省大部分中小型河流水文站現(xiàn)在仍采用傳統(tǒng)的監(jiān)測儀器加人工的方式對水文信息進行監(jiān)測、處理、統(tǒng)計,工作效率極低。
系統(tǒng)在完成水文數(shù)據(jù)采集、傳輸?shù)幕A(chǔ)上,開發(fā)了基于C/S架構(gòu)的水文數(shù)據(jù)處理系統(tǒng)。該系統(tǒng)主要完成數(shù)據(jù)的接收、處理、計算、查詢等功能,以便為站點工作人員提供及時、準確的水文數(shù)據(jù),提高水文監(jiān)測效率。
本系統(tǒng)包括服務(wù)器端和客戶端兩部分。服務(wù)器主要完成數(shù)據(jù)接收、客戶端通信、原始水文數(shù)據(jù)處理以及各站點信息維護等工作;客戶端主要負責為用戶提供站點信息查詢與成果表導出的功能,包括水位、流量、流速、電壓、誤差等信息的查詢和日平均水位、流量等成果數(shù)據(jù)的Excel導出等。
1.1 系統(tǒng)架構(gòu)
水文實時監(jiān)測系統(tǒng)采用C/S架構(gòu)實現(xiàn),系統(tǒng)底層采用MINA2網(wǎng)絡(luò)應(yīng)用框架,主要解決客戶端與服務(wù)器端之間的通信問題。MINA2網(wǎng)絡(luò)應(yīng)用框架采用了Java中的NIO技術(shù)[2],基于TCP、UDP等協(xié)議通信進行了大量封裝,為用戶提供基于各種網(wǎng)絡(luò)事件驅(qū)動的API。MINA網(wǎng)絡(luò)應(yīng)用框架主要分為三層,分別是I/O服務(wù)層、I/O過濾器層和I/O處理器層。I/O 服務(wù)層主要實現(xiàn)服務(wù)器與客戶端之間連接的建立與收發(fā)消息;I/O過濾器實現(xiàn)消息對象與字節(jié)流間的轉(zhuǎn)換。
1.2 消息機構(gòu)
系統(tǒng)客戶端與服務(wù)器端之間通信的消息在網(wǎng)絡(luò)上是以字節(jié)流的形式傳輸?shù)?,因此系統(tǒng)需要能夠?qū)崿F(xiàn)字節(jié)流與消息對象之間的相互轉(zhuǎn)換。水文站系統(tǒng)在接收到網(wǎng)絡(luò)上傳輸過來的字節(jié)流時,首先要找到消息的邊界,然后將代表一條消息的字節(jié)提取出來,經(jīng)過特定的邏輯將字節(jié)流轉(zhuǎn)換為消息對象,最后把消息對象移交給I/O處理器來執(zhí)行其對應(yīng)的業(yè)務(wù)邏輯。反之,系統(tǒng)還需要能夠把一個消息對象轉(zhuǎn)換為字節(jié)流數(shù)據(jù),放在網(wǎng)絡(luò)上進行傳輸。
在數(shù)據(jù)傳輸過程中,在字節(jié)流中確定消息邊界一般有三種方法:使用長度固定的消息、使用固定長度的消息頭標志消息總長度,以及使用分隔符確定消息邊界。
對于水文站流量實時監(jiān)測系統(tǒng)而言,客戶端與服務(wù)器端之間的通信情況相對比較復雜,需要利用各種不同類型的消息。不同消息的格式可能不相同,即使是相同類型的消息,其內(nèi)容也不一定相同。因此,系統(tǒng)使用第二種方法,可以滿足系統(tǒng)消息設(shè)計靈活易變的要求。
本系統(tǒng)中所有的消息主體都由兩部分組成:第一部分為消息類別名稱,長度固定不變;第二部分為消息的具體主題內(nèi)容。消息結(jié)構(gòu)如圖1所示。
系統(tǒng)中使用的消息代碼如表1所示。
圖1 消息結(jié)構(gòu)
表1 消息代碼
消息代碼消息作用描述101心跳請求通過心跳請求與響應(yīng)實現(xiàn)客戶端與服務(wù)器端通信狀態(tài)的監(jiān)測102心跳響應(yīng)103登錄請求客戶端標識發(fā)出登錄請求的代碼104登錄響應(yīng)服務(wù)器端標識響應(yīng)登錄請求的代碼105原始數(shù)據(jù)表查詢請求客戶端標識各種查詢請求的代碼106原始數(shù)據(jù)表查詢響應(yīng)服務(wù)器端標識響應(yīng)查詢請求的代碼107日徑流量成果表查詢請求客戶端標識日徑流量查詢請求的代碼108日徑流量成果表查詢響應(yīng)服務(wù)器端標識響應(yīng)日徑流量查詢請求的代碼109日平均水位成果表查詢請求客戶端標識日平均水位查詢請求的代碼110日平均水位成果表查詢響應(yīng)服務(wù)器標識響應(yīng)日平均水位查詢請求的代碼111日平均流量成果表查詢請求客戶端標識日平均流量查詢請求的代碼112日平均流量成果表查詢請求服務(wù)器標識響應(yīng)日平均流量查詢請求的代碼
1.3 日志系統(tǒng)
在系統(tǒng)開發(fā)過程中,為了方便系統(tǒng)開發(fā)人員跟蹤調(diào)試程序,以及運維人員了解系統(tǒng)運行狀態(tài),系統(tǒng)中加入了日志功能。如果系統(tǒng)某個模塊發(fā)生異常,系統(tǒng)運維人員可以通過查看系統(tǒng)日志文件,迅速確定異常原因并予以解決。 系統(tǒng)采用SLF4J和LOG4J日志框架相結(jié)合的日志系統(tǒng)[3]。系統(tǒng)通過Loggers控制要輸出哪些日志記錄語句并對日志信息進行級別限定。本系統(tǒng)日志信息同時輸出到兩個位置,通過ConsoleAppender將日志輸出到控制臺、通過RollingFileAppender實現(xiàn)日志信息以向后追加的方式輸出到日志文件中。通過Layout指定日志輸出格式為“%-4r %-5p [%d{yyyy-MM-dd HH:mm:ss}] %m%n”,即:打印日志距系統(tǒng)開始的毫秒數(shù)+日志級別+當前系統(tǒng)時間+日志具體信息。
服務(wù)器端主要實現(xiàn)用戶管理、站點管理、水位截面積管理和原始數(shù)據(jù)管理、服務(wù)器配置以及串口配置等功能,管理員通過啟動、重啟、停止按鈕實現(xiàn)服務(wù)器的開啟、重新啟動及停止。同時,服務(wù)器利用DTU短信模塊接收遠端RTU模塊發(fā)送的原始數(shù)據(jù),解析處理后存放于數(shù)據(jù)庫中。
2.1 短信接收
短信模塊傳遞過來的是原始數(shù)據(jù),首先需要對數(shù)據(jù)進行解碼,流速檢測在垂直方向上每隔20cm測出一組流速數(shù)據(jù),最多包含40組流速數(shù)據(jù)。因此,原始數(shù)據(jù)包中包含的流速數(shù)量要根據(jù)水位高度來計算有效流速的數(shù)量。首先要計算出當前包中的有效流速數(shù)量,如公式(1)所示。其中N為有效流速,W為當前水位,b為河堤高程,k為流速測試儀的高度。
(1)
每組中都包含測試時間和流速,每隔1分鐘發(fā)送一次。由于測試儀器本身存在的誤差,為了保證數(shù)據(jù)的準確性,采用前后6分鐘的有效流速數(shù)據(jù)求平均作為當前時間的流速數(shù)據(jù)。這里的關(guān)鍵點在于雖然流速檢測設(shè)備每分鐘發(fā)送一次流速數(shù)據(jù),但是在該數(shù)據(jù)包中包含的6組流速數(shù)據(jù)時間可能存在前后偏差,即當前包中可能包含上一分鐘或下一分鐘的數(shù)據(jù)。為了精確計算,采用延時計算的方式,先將接收到的每組數(shù)據(jù)放入一個優(yōu)先級隊列中,隊列排序以時間為標準,每隔1分鐘從中取出前一分鐘的流速數(shù)據(jù)并求出平均值,將該平均流速再和前6分鐘的流速數(shù)據(jù)求平均,最后的結(jié)果作為該時間的流速,然后將該流速數(shù)據(jù)寫入數(shù)據(jù)庫中。
服務(wù)器啟動之前需要通過串口參數(shù)配置模塊對短信模塊的串口參數(shù)進行正確配置,否則服務(wù)器的短信模塊無法與遠端的RTU模塊進行通信,系統(tǒng)將無法獲取站點的水流信息。運行服務(wù)器端程序時,系統(tǒng)會自動讀取配置文件進行數(shù)據(jù)庫連接。若能連接成功,系統(tǒng)將直接進入到服務(wù)器端主界面;若連接失敗,系統(tǒng)將直接跳轉(zhuǎn)到服務(wù)器配置界面。當管理員配置好數(shù)據(jù)庫參數(shù)點擊保存后,系統(tǒng)會自動將配置信息保存到配置文件中,管理員只需重新運行服務(wù)器端程序即可成功連接數(shù)據(jù)庫,并進入主界面。
圖2 短信模塊流程
2.2 水位截面積管理
水位截面積管理模塊是對站點水位對應(yīng)截面積的關(guān)系進行記錄與管理,提供了添加、刪除與修改等操作。此模塊中提供了兩種水位截面積信息的添加方式:①在系統(tǒng)中通過添加按鈕方式,一次添加一條數(shù)據(jù);②首先從系統(tǒng)中下載Excel模版,然后在模版中添加所有要導入系統(tǒng)的水位截面積信息,最后通過系統(tǒng)的導入按鈕將Excel模版中的數(shù)據(jù)批量導入系統(tǒng)數(shù)據(jù)庫。水位截面積信息主要包括站點、水位高度、截面積、系數(shù)K,該數(shù)據(jù)的主要作用是計算當前時間的流量信息。流量數(shù)據(jù)的計算如公式(2)所示,其中A是過水截面積,A可以通過水位高度和截面積數(shù)據(jù)通過插值方式計算出當前水位的截面積,V是平均流速,k為流速系數(shù),可通過該系數(shù)調(diào)整流速數(shù)據(jù)計算的準確度,該值也是通過水位和系數(shù)K數(shù)據(jù)通過插值方式進行計算。為實測有效垂線分層流速,通過該公式計算出實時流量數(shù)據(jù):
(2)
3.1 信息查詢
查詢模塊主要實現(xiàn)運行狀態(tài)、實時過程、電壓監(jiān)視與誤差統(tǒng)計等信息的查詢。運行狀態(tài)主要為用戶提供站點某段時間內(nèi)流速信息的查詢,并使用JFreeChar折線圖與表格的形式顯示該時段內(nèi)流速的變化情況[4];實時過程查詢?yōu)橛脩籼峁┠硶r段內(nèi)水位、流量信息的查詢,并通過統(tǒng)計圖和表格直觀表現(xiàn)水位和流量在某一時間段內(nèi)的變化;誤差統(tǒng)計能夠?qū)δ痴军c指定時間段內(nèi)的實時流量數(shù)據(jù)與實測流量數(shù)據(jù)進行對比分析,并以圖表方式展示。
3.2 成果導出
實測成果模塊可對特定站點某一年的各種信息進行統(tǒng)計計算以及成果導出,主要包括平均水位、平均流量、日徑流量等信息。用戶可以按年對日平均水位成果、日平均流量成果、日徑流量成果進行統(tǒng)計計算,并用POI設(shè)計Excel表格進行顯示與成果導出[5]。
本系統(tǒng)在水文數(shù)據(jù)采集、傳輸?shù)幕A(chǔ)上,使用Java開發(fā)了一個水文數(shù)據(jù)監(jiān)測系統(tǒng),通過對采集數(shù)據(jù)的處理、分析、存儲,為用戶提供及時、準確的流量、水位等水文信息。同時,通過圖表等方式為用戶提供直觀的水文水利數(shù)據(jù)變化情況,使水文工作人員及時掌握河流水文情況,對河流的防洪防汛有非常重要的意義。
[1] 朱娟.基于ZigBee和CDMA的水情遠程監(jiān)測系統(tǒng)設(shè)計[J].大眾科技,2013,15(170):16-17,51.
[2] 金玉軍,姜曉彤,況迎輝.基于高性能NIO的MINA框架的應(yīng)用[J].信息科技,2009(16):93-94.
[3] 吳志峰,鞠鳳娟.SLF4J框架集成日志系統(tǒng)的應(yīng)用研究[J].信息管理,2011(4):74-75.
[4] 吳宏波.基于JFreeChart技術(shù)的Web數(shù)據(jù)圖表化表現(xiàn)[J].電子科技,2010(1):97-99.
[5] 戴維.POI實現(xiàn)Excel的數(shù)據(jù)導入導出的研究[J].科技信息,2013(1):107,126.
(責任編輯:黃 健)
許昌學院骨干教師資助項目(2014)
馬慧(1974-),女,河南許昌人,許昌學院信息工程學院副教授,研究方向為計算機網(wǎng)絡(luò);張永(1981-),男,河南許昌人,許昌學院信息工程學院助教,研究方向為計算機網(wǎng)絡(luò)、軟件工程。
10.11907/rjdk.171159
TP319
A
1672-7800(2017)003-0089-02