徐海明



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