徐海明
摘要:利用c#語(yǔ)言的便利靈活性,結(jié)合MSSQL數(shù)據(jù)庫(kù),針對(duì)氣象部門(mén)土壤自動(dòng)站報(bào)文數(shù)據(jù)上傳后進(jìn)行有效實(shí)時(shí)解析人庫(kù)。對(duì)土壤水分?jǐn)?shù)據(jù)進(jìn)行分類(lèi)解析入庫(kù)、實(shí)時(shí)解碼、并行處理等,對(duì)數(shù)據(jù)進(jìn)行粗加工,并生成顯示、報(bào)警等機(jī)制,也為二次開(kāi)發(fā)提供標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)接口,統(tǒng)一標(biāo)準(zhǔn),避免重復(fù)解析,進(jìn)一步提高數(shù)據(jù)的實(shí)時(shí)性、效率性和適應(yīng)性。
關(guān)鍵詞:氣象;c#;數(shù)據(jù)庫(kù);土壤水分;報(bào)文
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)15-01 17-04
1背景
隨著氣息事業(yè)的日益發(fā)展,人民生活對(duì)氣象需求的多樣性也日益增長(zhǎng)。氣象部門(mén)在對(duì)日常天氣預(yù)報(bào)的精準(zhǔn)預(yù)報(bào)下,對(duì)預(yù)報(bào)的衍生產(chǎn)品的研究也日益透徹,特別像浙江這樣一個(gè)氣象災(zāi)害比較頻繁的地區(qū),我們不僅要關(guān)注和防范一般的自然天氣災(zāi)害,還要特別防范由天氣現(xiàn)象造成的次生災(zāi)害,譬如山體滑坡、泥石流、塌方等地質(zhì)災(zāi)害,往往這些災(zāi)害給人民的生命財(cái)產(chǎn)造成了極大的危險(xiǎn)。而氣象部門(mén)針對(duì)此情況,在容易發(fā)生地質(zhì)災(zāi)害的地方布置了大量的針對(duì)土壤水分的自動(dòng)站來(lái)監(jiān)測(cè)土壤水分的飽和度,通過(guò)大數(shù)據(jù)的分析,做出針對(duì)性的預(yù)案。這往往要對(duì)土壤水分?jǐn)?shù)據(jù)處理的實(shí)時(shí)性、準(zhǔn)確性、并行性提出了較高的要求,并需要和預(yù)報(bào)數(shù)據(jù)相互結(jié)合,做出更精準(zhǔn)的預(yù)測(cè)。為此我們?cè)O(shè)計(jì)了新的土壤水分入庫(kù)程序,提高了處理的實(shí)時(shí)性和并發(fā)能力,滿(mǎn)足了大數(shù)據(jù)處理的需求。
2設(shè)計(jì)思路
為了保持和其他氣象數(shù)據(jù)的兼容性和傳承性,同樣土壤水分?jǐn)?shù)據(jù)在取樣后,采用了報(bào)文形式的傳輸形式,以文件形式傳輸,而不是目前流行的數(shù)據(jù)流格式或數(shù)據(jù)庫(kù)格式的傳送,處理時(shí)需要對(duì)每個(gè)文件中的報(bào)文進(jìn)行解包分析,判斷數(shù)據(jù)的時(shí)限性、準(zhǔn)確性和報(bào)文的類(lèi)別,實(shí)時(shí)入庫(kù),避免信道堵塞并發(fā)出相應(yīng)的處理信息。
2.1開(kāi)發(fā)語(yǔ)言介紹
c#是微軟公司與2001年基于C++之后新開(kāi)發(fā)的一種面向?qū)ο蟪绦蛟O(shè)計(jì)的語(yǔ)言,它運(yùn)行于Net FrameWork之上,是一種類(lèi)似于JAVA的腳本性語(yǔ)言。他集成了C語(yǔ)言的靈活性又繼承了C++面向?qū)ο蟮奶匦?,并且面向Intemet編程進(jìn)行了重新設(shè)定,使得他結(jié)合了VB、DELPHI、JAVA等各類(lèi)語(yǔ)言的一些特性,在整個(gè)Net框架之內(nèi),可以輕松地駕馭各種開(kāi)發(fā)程序,保留了c的強(qiáng)大能力,有簡(jiǎn)潔了C++的復(fù)雜性,友好的IDE界面,便利的語(yǔ)言繼承,使得原先大量的c語(yǔ)言程序設(shè)計(jì)師轉(zhuǎn)向了c#語(yǔ)言,發(fā)揮了它的穩(wěn)定、簡(jiǎn)單、安全又功能多樣的特點(diǎn)。
2.2系統(tǒng)設(shè)計(jì)
本系統(tǒng)利用地面寬帶和4G信號(hào),接收從土壤水分自動(dòng)站傳回的數(shù)據(jù),它以文件形式報(bào)文結(jié)構(gòu)存在。我們利用線程池和文件緩沖隊(duì)列,解碼傳回來(lái)的數(shù)據(jù),根據(jù)相應(yīng)的要素排列生成對(duì)應(yīng)的數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)采用了微軟的MSSQL,利用數(shù)據(jù)庫(kù)AI-waysOn群集和可用性組的特點(diǎn)實(shí)現(xiàn)的高可用性及災(zāi)難恢復(fù)解決方案,利用分布式的特點(diǎn)實(shí)現(xiàn)了數(shù)據(jù)的高效率利用和互相備份的存儲(chǔ)。利用了Windows的消息隊(duì)列設(shè)計(jì),進(jìn)行窗體之間的信息互傳,給用戶(hù)在數(shù)據(jù)缺測(cè)時(shí)做到及時(shí)提醒報(bào)警,并提供標(biāo)準(zhǔn)的COM接口為二次開(kāi)發(fā)和第三方用戶(hù)提供服務(wù)。
通過(guò)不定期的掃描接收文件,判斷文件的時(shí)效性,生產(chǎn)相應(yīng)的日志,為后面的故障解決提供數(shù)據(jù)依據(jù)。為了提高執(zhí)行效率,在業(yè)務(wù)模式相對(duì)簡(jiǎn)單的情況下,拋棄了復(fù)雜的類(lèi)處理,在對(duì)象后面直接采用c語(yǔ)言API函數(shù)快速解決底層驅(qū)動(dòng)問(wèn)題,大大提高了掃描的效率。為土壤水分預(yù)報(bào)的及時(shí)性提供了技術(shù)的保障。
2.3報(bào)文內(nèi)容
基于氣象部門(mén)的特殊性和繼承性,數(shù)據(jù)的流轉(zhuǎn)脫胎于航空?qǐng)?bào)文的模式,為了資料的兼容性,目前還有大量的資料采用了報(bào)文的傳輸格式,同樣,我們的土壤水分?jǐn)?shù)據(jù)傳輸也采用了這一方式,當(dāng)然各類(lèi)的數(shù)據(jù)報(bào)文格式也有所不一,但都是以ASCII碼文件的形式存在的,報(bào)文的內(nèi)容為5個(gè)字符為一組數(shù)據(jù),相鄰數(shù)據(jù)以空字符相隔,有報(bào)文頭和結(jié)束符,每組數(shù)據(jù)有著不一樣的意義,需要程序進(jìn)行譯碼。一般以“NNN”為報(bào)文的結(jié)尾,如“58xxx 23456 N2342…NNN”等,在土壤水分信息報(bào)文中,包含了站號(hào)、經(jīng)度、維度、高度、生成時(shí)間、觀察時(shí)間、相對(duì)濕度等內(nèi)容。在報(bào)文傳輸?shù)竭_(dá)后,經(jīng)過(guò)時(shí)效性、合法性驗(yàn)證后,對(duì)報(bào)文進(jìn)行判別翻譯后寫(xiě)入數(shù)據(jù)庫(kù)以供共享所用。
3軟件設(shè)計(jì)
3.1總體框架圖
根據(jù)業(yè)務(wù)需求,結(jié)合技術(shù)特點(diǎn)和行業(yè)特征,我們?cè)O(shè)計(jì)了以下的軟件方案:
在數(shù)據(jù)應(yīng)用端,我們采用了定時(shí)掃描文件的策略,根據(jù)土壤水分?jǐn)?shù)據(jù)的來(lái)報(bào)頻率,設(shè)計(jì)相應(yīng)的時(shí)間去判別是否有新的數(shù)據(jù)到來(lái),以減輕前端處理機(jī)的運(yùn)行負(fù)荷,當(dāng)判別有新報(bào)文來(lái)臨時(shí),設(shè)計(jì)了一個(gè)防沖突的機(jī)制,防止別的用戶(hù)在操作該文檔,正常讀取報(bào)文內(nèi)容后,進(jìn)行拆包人庫(kù),采用了模塊化的設(shè)計(jì)和消息隊(duì)列機(jī)制,防止文件死鎖,減少程序處理時(shí)的CPU想要時(shí)間。而網(wǎng)絡(luò)層充分利用了目前氣象信息網(wǎng)絡(luò)的先進(jìn)性,千兆的局域網(wǎng)、百兆的地面寬帶網(wǎng)和高速4G網(wǎng)絡(luò),保證了數(shù)據(jù)傳輸?shù)挠行院屯暾裕侠淼胤植剂朔植际綌?shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)和備份,通過(guò)業(yè)務(wù)端的邏輯優(yōu)化,提高查詢(xún)和并發(fā)處理的性能。
3.2軟件設(shè)計(jì)流程
根據(jù)總體框架圖中的流程,對(duì)整個(gè)軟件的數(shù)據(jù)流轉(zhuǎn)和業(yè)務(wù)流轉(zhuǎn)進(jìn)行合理的分配協(xié)調(diào),成功地進(jìn)行了以下的設(shè)計(jì):
3.3土壤水分?jǐn)?shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)
土壤水分?jǐn)?shù)據(jù)以每小時(shí)每站點(diǎn)生成一個(gè)單獨(dú)文件,文件中報(bào)文內(nèi)容為一條單獨(dú)記錄,格式如下:
通過(guò)微軟的ADO數(shù)據(jù)庫(kù)引擎,成功地在軟件中直接對(duì)MS-SQL2015數(shù)據(jù)庫(kù)進(jìn)行操作,及時(shí)地把數(shù)據(jù)插入庫(kù)中,保證了程序的完整性,方便程序移植到同類(lèi)業(yè)務(wù)單位。
3.4軟件編碼
在應(yīng)用端,我們打開(kāi)VISIOStudi02015,在文件菜單項(xiàng)中選中新建項(xiàng)目,然后在項(xiàng)目中選取C#Windows應(yīng)用程序的建立,如ASM,這樣我們就創(chuàng)建了一個(gè)C#的程序框架。namespaceASM
由于定時(shí)器的延遲性和不確定性,在土壤水分入庫(kù)的機(jī)器上盡量不要運(yùn)行其他占CPU高的程序,并確保報(bào)文數(shù)據(jù)來(lái)報(bào)的定時(shí)性,這樣會(huì)大大增加處理入庫(kù)的效率,在報(bào)文入庫(kù)的同時(shí),其他任務(wù)避免直接操作該報(bào)文,等他入庫(kù)后調(diào)用數(shù)據(jù)庫(kù)的COM接口來(lái)查詢(xún)數(shù)據(jù),以使任務(wù)的統(tǒng)一化,增加報(bào)文處理的成功率。
3.5程序功能界面
在報(bào)文解析人庫(kù)處理中,我們盡量簡(jiǎn)化界面的操作,減少人機(jī)交互帶來(lái)的操作失誤,把CPU時(shí)間多分配給報(bào)文解碼線程,確保程序的靈敏度和反應(yīng)度,避免在程序處理時(shí),界面發(fā)生假死或白板現(xiàn)象。程序啟動(dòng)后會(huì)定時(shí)根據(jù)報(bào)文的傳輸時(shí)間啟動(dòng)報(bào)文處理模塊,不需人工干預(yù),穩(wěn)定、高效、連續(xù),在報(bào)文加密觀察時(shí)或臨時(shí)增加采集或處理遺漏的情況下,可以通過(guò)界面上的按鈕進(jìn)行手工處理,并且把執(zhí)行結(jié)果同步顯示在界面上。
4結(jié)束語(yǔ)
本文通過(guò)數(shù)據(jù)庫(kù)技術(shù),改變了原先以文本方式為主的顯示方式,對(duì)要素?cái)?shù)據(jù)進(jìn)行了歸納,方便了數(shù)據(jù)的存儲(chǔ)、調(diào)用、查詢(xún)和歸檔,對(duì)數(shù)據(jù)的冗余性、糾錯(cuò)機(jī)制提供了驅(qū)動(dòng)依據(jù),也便于及時(shí)讀人報(bào)文數(shù)據(jù),避免由于讀取不及時(shí)造成報(bào)文數(shù)據(jù)的丟失,并且系統(tǒng)提供了手工處理功能,在系統(tǒng)故障或線路延遲造成的文件逾限、丟失,可以通過(guò)人工處理得以解決。完美地解決了報(bào)文數(shù)據(jù)處理上的各種缺陷,通過(guò)一段時(shí)間運(yùn)行、改正,目前系統(tǒng)日益完善,在土壤水分?jǐn)?shù)據(jù)處理的及時(shí)性、完整性和準(zhǔn)確性上得到了充分的驗(yàn)證。為預(yù)報(bào)部門(mén)提供了翔實(shí)充分的數(shù)據(jù),并取得了良好社會(huì)效益。