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