卓 鵬,劉九夫,張建云,賈雅蘭,劉宏偉,蔡 釗,廖敏涵
(南京水利科學(xué)研究院, 江蘇 南京 210029)
實驗數(shù)據(jù)的存儲與共享事關(guān)重大,是實驗所得的最終產(chǎn)品,是分析研究的基礎(chǔ),因此保證數(shù)據(jù)的準(zhǔn)確和安全是研究工作成敗攸關(guān)的大事,水利信息化的趨勢也要求自動采集、存儲數(shù)據(jù)[1-4]。 儀器長時間工作,難免出現(xiàn)一些小問題,由于儀器故障產(chǎn)生時間難以事先獲知,單純靠定期的維護有時不能滿足業(yè)務(wù)需要[5],及時發(fā)現(xiàn)儀器故障要求全天 24 h 不間斷地審查數(shù)據(jù)合理性,如:翻斗式雨量計、數(shù)據(jù)采集系統(tǒng)電壓過低,儀器數(shù)值異常等。畢朝達等[6]曾研究過數(shù)據(jù)的自動存入,不過研究側(cè)重于數(shù)據(jù)的初步計算處理并將數(shù)據(jù)存于本地。李松等[7]研究過海上警戒區(qū)的數(shù)據(jù)自動采集,但側(cè)重于數(shù)據(jù)預(yù)警,并未涉及數(shù)據(jù)的自動上傳與處理。童海濱等[8]在開封市氣象局實現(xiàn)了單站地溫數(shù)據(jù)的采集及監(jiān)控,但沒有數(shù)據(jù)的入庫操作,也不利于數(shù)據(jù)的長期保存和后期處理。
鑒于此,南京水利科學(xué)研究院(以下簡稱“南科院”)利用 Qt 設(shè)計友好界面,開發(fā)了數(shù)據(jù)監(jiān)控與上傳軟件——分布式數(shù)據(jù)監(jiān)測與上傳系統(tǒng)(以下簡稱“軟件系統(tǒng)”),已經(jīng)于 2016 年在南科院水文水資源與水利工程科學(xué)國家重點實驗室滁州水文實驗基地(以下簡稱“滁州基地”)正式投入業(yè)務(wù)使用,解決了數(shù)據(jù)分散各地帶來的問題,實現(xiàn)了基礎(chǔ)數(shù)據(jù)的初步鑒別及設(shè)備和數(shù)據(jù)異常預(yù)警。
軟件系統(tǒng)設(shè)計分為后臺數(shù)據(jù)庫和前臺軟件圖形用戶界面兩部分設(shè)計。后臺數(shù)據(jù)庫的設(shè)計以開源數(shù)據(jù)庫軟件 MySQL 為平臺,將每個儀器匯總的數(shù)據(jù)單獨存成一個數(shù)據(jù)表,防止時間步長不同帶來的數(shù)據(jù)量不一致問題,以數(shù)據(jù)的“日期時間”為主鍵索引方便數(shù)據(jù)查詢;圖形用戶界面的設(shè)計以簡單實用為指導(dǎo)原則,使基層業(yè)務(wù)員快速掌握,操作方便。
軟件系統(tǒng)主要有以下 3 個功能:1)實時上傳各地數(shù)采儀采集的數(shù)據(jù),為數(shù)據(jù)的實時調(diào)用處理奠定基礎(chǔ);2)實時檢測數(shù)據(jù)異常,使業(yè)務(wù)人員及時發(fā)現(xiàn)數(shù)據(jù)的異常從而檢查軟硬件條件,及時維護以避免更大的損失,增強數(shù)據(jù)可靠性;3)自動過濾冗余數(shù)據(jù),減少數(shù)據(jù)贅余。
軟件系統(tǒng)分為以下 4 個子系統(tǒng):
1)時間控制子系統(tǒng)。定時啟動循環(huán)程序,讓程序持續(xù)運作,或者人工啟動上傳系統(tǒng)。
2)數(shù)據(jù)整編子系統(tǒng)。主要負(fù)責(zé)將原始資料文件數(shù)據(jù)化成固定格式,以方便后續(xù)操作。
3)數(shù)據(jù)監(jiān)視與上傳子系統(tǒng)。實時監(jiān)測數(shù)據(jù)異常,將數(shù)據(jù)整編系統(tǒng)產(chǎn)生的標(biāo)準(zhǔn)化文件上傳至云端服務(wù)器;在異常時發(fā)出警告,并將數(shù)據(jù)與數(shù)據(jù)警告的具體說明上傳至云端服務(wù)器。
4)數(shù)據(jù)存儲與查詢子系統(tǒng)。提供數(shù)據(jù)存儲與查詢服務(wù)。
在數(shù)據(jù)整編的基礎(chǔ)上,運用多線程并行處理技術(shù)保證監(jiān)視和上傳互不影響。軟件系統(tǒng)總體框架如圖1 所示。
圖1 軟件系統(tǒng)總體框架圖
讀取當(dāng)?shù)鼗蚓W(wǎng)絡(luò)時間,以保證客戶端機器可以按照設(shè)定時間間隔周期性地上傳當(dāng)?shù)財?shù)據(jù)到服務(wù)器。系統(tǒng)中的定時函數(shù)可周期性地觸發(fā)其他子系統(tǒng),觸發(fā)周期可由操作人員顯式地在操作界面設(shè)定。由于數(shù)據(jù)上傳進度可實時存入緩存,故無需擔(dān)心在上傳過程中發(fā)生數(shù)據(jù)遺漏現(xiàn)象。此模塊的關(guān)鍵在于使用定時器,周期性觸發(fā)各類功能函數(shù)。
軟件系統(tǒng)會按時讀取先前指定的文件,根據(jù)上次讀取過的文件位置(支持?jǐn)帱c續(xù)傳),一次性讀取新產(chǎn)生的所有數(shù)據(jù)到內(nèi)存,然后將所得字符串按一定格式數(shù)據(jù)化,分成時間、數(shù)據(jù)編號、基本數(shù)據(jù)等類型,按照設(shè)定好的格式分別存入內(nèi)存與緩存中。在內(nèi)存中生成中間文件,準(zhǔn)備進入數(shù)據(jù)監(jiān)視子系統(tǒng);在緩存中生成緩存文件,準(zhǔn)備接受數(shù)據(jù)上傳子系統(tǒng)的調(diào)用。
軟件系統(tǒng)使用 MySQL 數(shù)據(jù)庫,數(shù)據(jù)上傳子系統(tǒng)將整編好的數(shù)據(jù)上傳到對應(yīng)的數(shù)據(jù)庫中,重復(fù)數(shù)據(jù)自動過濾,防止數(shù)據(jù)冗余。數(shù)據(jù)上傳與監(jiān)視 2 個子系統(tǒng)互不聯(lián)系,異常的數(shù)據(jù)依然要上傳到系統(tǒng)數(shù)據(jù)庫中以備查驗和更改,故無先后順序,可同時執(zhí)行。此模塊的關(guān)鍵是快速上傳數(shù)據(jù),使用 SQL 語句中上傳速度最快的命令,將整個中間數(shù)據(jù)文件直接上傳,可減少上傳次數(shù),大大增加上傳速度。
根據(jù)軟件系統(tǒng)中數(shù)據(jù)的特點,單獨設(shè)定檢查方式。檢查方式有單個和多個數(shù)據(jù)值函數(shù)關(guān)系的異常檢查。單個數(shù)據(jù)值的檢查,如:可對電壓值按照大于或小于某數(shù)值檢查異常;函數(shù)關(guān)系的檢查是對數(shù)據(jù)同一時刻的其他數(shù)據(jù)或不同時刻內(nèi)在關(guān)系進行檢查,如同一時刻臨近地點采集的 1 min 內(nèi)降雨數(shù)據(jù)之間的差值不應(yīng)超過自動翻斗式雨量計規(guī)格的 2 倍。當(dāng)數(shù)據(jù)發(fā)生異常時,軟件系統(tǒng)通過彈窗在機器客戶端上顯示錯誤類型及原因的推測,并可調(diào)動其他軟硬件發(fā)出報警聲音,或者發(fā)送信息通知相關(guān)業(yè)務(wù)人員,提醒業(yè)務(wù)人員及時發(fā)現(xiàn)錯誤,修正處理機器設(shè)備異常,將錯誤信息保存在文件中,上傳到數(shù)據(jù)庫,以供將來數(shù)據(jù)分析時查閱。
利用 TCP/IP 協(xié)議,可以將錯誤信息推送到其他電腦客戶端。
由于數(shù)據(jù)監(jiān)視子系統(tǒng)對每條記錄中的每個數(shù)據(jù)進行檢查時需運行多種計算方法,所以是系統(tǒng)中最耗時的過程。為防止界面假死(卡死)或延誤其他數(shù)據(jù)上傳工作,采用多線程技術(shù)將數(shù)據(jù)監(jiān)視部分單列為一個線程,其他子系統(tǒng)列為一個線程。此模塊中多線程技術(shù)是最為關(guān)鍵的技術(shù)。
數(shù)據(jù)安全關(guān)系重大,必須要特別注意。軟件系統(tǒng)所面臨的主要威脅有:誤刪數(shù)據(jù);意外關(guān)閉軟件,導(dǎo)致數(shù)據(jù)不能檢查和上傳;上傳混亂,導(dǎo)致數(shù)據(jù)對應(yīng)錯位;下載權(quán)限存在問題,導(dǎo)致數(shù)據(jù)泄漏。
針對這些問題,主要采用密碼系統(tǒng)解決包括軟件關(guān)閉在內(nèi)的權(quán)限問題。軟件系統(tǒng)開始運行后,應(yīng)持續(xù)不斷地上傳數(shù)據(jù),如遇到特殊情況要關(guān)閉軟件系統(tǒng),客戶端應(yīng)該得到管理員的同意,正確輸入密碼才能順利關(guān)閉,該密碼存儲在云端服務(wù)器上,如果有足夠的權(quán)限,可在服務(wù)器端修改。多個用戶對上傳查詢的不同數(shù)據(jù)有不同權(quán)限,避免上傳混亂的現(xiàn)象,也能大大減少數(shù)據(jù)被意外刪除的風(fēng)險,同時下載權(quán)限問題也能迎刃而解。
后臺配置客戶端軟件直接安裝在采集數(shù)據(jù)的電腦上,然后配置初始文件,以確定機器上待傳原始文件的路徑、當(dāng)前上傳狀況,以及對應(yīng)文件上傳到數(shù)據(jù)庫中的位置。配置文件的目的主要是增加軟件系統(tǒng)的靈活與魯棒性,使得軟件系統(tǒng)在外部環(huán)境發(fā)生變化時能更方便地調(diào)整,在客戶端機器發(fā)生故障時能盡快恢復(fù)運行。如果業(yè)務(wù)需要增加或減少采集數(shù)據(jù)條目,只需在對應(yīng)文件下增加或減少 1 條指令即可。
登錄界面打開軟件系統(tǒng)后選擇數(shù)據(jù)存儲位置,輸入登錄名和密碼,進入上傳設(shè)置界面后,選擇輸入數(shù)據(jù)上傳的時間間隔,并選擇是否對數(shù)據(jù)進行監(jiān)測。
服務(wù)器端要建立一個 MySQL 數(shù)據(jù)庫,用來存放整理好的數(shù)據(jù)。在數(shù)據(jù)庫中建立與客戶端對應(yīng)一致的數(shù)據(jù)表,并分配用戶權(quán)限保證整個軟件系統(tǒng)的數(shù)據(jù)安全與正常運作。
將采集的數(shù)據(jù)自動處理、集中保存管理意義重大,不僅方便分布式數(shù)據(jù)的管理,增加數(shù)據(jù)的安全性,使數(shù)據(jù)的調(diào)用處理變得更加方便,也是實時聯(lián)合處理分布式數(shù)據(jù)的基礎(chǔ)。
軟件系統(tǒng)的自動檢測數(shù)據(jù)功能可以根據(jù)用戶設(shè)定的方式監(jiān)視數(shù)據(jù),發(fā)出警報,使得業(yè)務(wù)人員能夠及時發(fā)現(xiàn)儀器設(shè)備異常,減少數(shù)據(jù)錯誤,也能提醒數(shù)據(jù)使用人員考慮數(shù)據(jù)的可靠性。
軟件系統(tǒng)操作簡單,通過配置文件的修改即可輕松應(yīng)對外部環(huán)境的改變,使得小范圍的業(yè)務(wù)修改變得簡單可行。
軟件系統(tǒng)在滁州基地運行正常穩(wěn)定,各項功能都能正確及時地執(zhí)行。在測試運行的 3 個月里,共監(jiān)測到數(shù)據(jù)錯誤 40 余處,并根據(jù)錯誤信息成功找到儀器故障。
軟件系統(tǒng)的輸入數(shù)據(jù)以自動化儀器生產(chǎn)的數(shù)據(jù)為原始輸入,所監(jiān)測到的異常是各種累計誤差的結(jié)果,不能夠直接發(fā)現(xiàn)問題的根本所在。原始輸入的數(shù)據(jù)依賴于儀器廠家的原始設(shè)計,有較大局限性,將來應(yīng)當(dāng)與硬件的監(jiān)測相結(jié)合,更加精準(zhǔn)地監(jiān)測儀器。
參考文獻:
[1] 劉慶濤,崔瑞玲,耿丁蕤. 水利信息云建設(shè)初探[J]. 水利信息化,2012 (2): 5-9.
[2] 艾萍,吳禮福,陳子丹. 水利信息化頂層設(shè)計的基本思路與核心內(nèi)容分析[J]. 水利信息化,2010 (2): 9-12.
[3] 陳燕紅. 基于網(wǎng)絡(luò)的遠(yuǎn)程數(shù)據(jù)自動采集和收集系統(tǒng)[D].鄭州:中國人民解放軍信息工程大學(xué),2002.
[4] 朱躍龍. 水利信息化與云計算[J]. 水利水電技術(shù),2013,44 (1): 7-11.
[5] 李震,楊海亮,胡毅,等. 需求工程對于軟件開發(fā)的重要性[J]. 計算機技術(shù)與發(fā)展,2013,23 (3): 199-202,207.
[6] 畢朝達,李宏恩,楊陽. 邊坡位移數(shù)據(jù)自動化分析及結(jié)構(gòu)化實時存儲[J]. 水電能源科學(xué),2013 (12): 233-235.
[7] 李松,孔凡邨,關(guān)克平. 警戒區(qū)水上交通沖突數(shù)據(jù)自動采集系統(tǒng)[J]. 交通運輸工程學(xué)報,2011,11 (2): 121-126.
[8] 童海濱,劉曉君,王其英,等. 單站地溫自動繪圖監(jiān)控系統(tǒng)設(shè)計研究[J]. 水電能源科學(xué),2012,30 (1): 189-191.