黃宏智,呂玉嫦,鐘翠霞
(1.廣東省氣象探測數(shù)據(jù)中心,廣州 510080;2.廣州市黃埔區(qū)氣象局,廣州 510080)
廣東省基于移動4G無線組網(wǎng)集中采集的氣象探測數(shù)據(jù)有:3200多個區(qū)域自動氣象站、31個生物舒適度站、31個土壤水分站、9個交通站以及49個海島自動氣象站。由此可見,4G無線采集已成為廣東省最主要的數(shù)據(jù)傳輸方式。
在數(shù)據(jù)應用流程上,廣東省氣象局自動氣象站中心采集軟件負責收集全省各地運行的各種類別自動氣象站上行的原始數(shù)據(jù),一路按照指定數(shù)據(jù)格式形成報文上傳到中國氣象局[1],另外一路通過判別站點歸屬地將原始數(shù)據(jù)傳輸至對應的市局,再由市局分發(fā)至下轄縣(區(qū))局以提供數(shù)據(jù)服務。
基于上述業(yè)務架構(gòu),從廣東省的自動氣象站業(yè)務數(shù)據(jù)流程出發(fā),需開發(fā)一個自動氣象站4G數(shù)據(jù)服務中心軟件,連接省局和市局端的數(shù)據(jù)傳輸,解決區(qū)域自動氣象站、生物舒適度站、土壤水分站、生態(tài)自動氣象站等多類別站點數(shù)據(jù)實時分發(fā)的難題,使各地級市局和下轄縣(區(qū))局實時獲取各類設備觀測數(shù)據(jù),為天氣預報預警服務提供有力的數(shù)據(jù)支撐。文章著重介紹了自動氣象站4G數(shù)據(jù)服務中心軟件的模塊結(jié)構(gòu)、數(shù)據(jù)并發(fā)接收、數(shù)據(jù)報組包及校驗和數(shù)據(jù)分發(fā)等內(nèi)容。
軟件基于各類別自動氣象站中心采集軟件的分布式部署架構(gòu),采用多線程和TCP/UDP通信技術(shù)進行設計[2],主要涵蓋3部分內(nèi)容:1)數(shù)據(jù)并發(fā)接收:針對每類自動氣象站設備創(chuàng)建一條數(shù)據(jù)接收處理線程,采用TCP通信協(xié)議與上位機中心采集軟件建立數(shù)據(jù)傳輸鏈路,閑時,線程處于監(jiān)聽狀態(tài),忙時,線程將接收到的數(shù)據(jù)報存儲在開辟的內(nèi)存中;2)數(shù)據(jù)報組報及校驗:對存儲在內(nèi)存中的零散分報文進行組報,組合完畢的報文應包含正確的相應設備數(shù)據(jù)格式報頭及報尾,對組合后的報文進行校驗,若通過則進行分發(fā)待處理,否則將報文作錯誤處理進行丟棄;3)數(shù)據(jù)分發(fā):根據(jù)配置的區(qū)域自動氣象站、生物舒適度站、土壤水分站等數(shù)據(jù)接收目標IP地址,創(chuàng)建UDP協(xié)議數(shù)據(jù)分發(fā)線程,實時將完整報文(部分數(shù)據(jù)需要格式轉(zhuǎn)換)分發(fā)至各縣(區(qū))局的業(yè)務軟件進行顯示處理。
自動氣象站4G數(shù)據(jù)服務中心軟件的設計基于Microsoft Visual Studio 2010開發(fā)平臺,綜合采用多線程并發(fā)處理、TCP數(shù)據(jù)流接收、UDP數(shù)據(jù)流分發(fā)等技術(shù)實現(xiàn)市級氣象局對各類自動氣象站數(shù)據(jù)同步接收及分發(fā)至各縣(區(qū))局進行顯示、存儲以及報文制作等。
自動氣象站4G數(shù)據(jù)服務中心軟件根據(jù)設備類型的配置情況,為每類設備創(chuàng)建一條數(shù)據(jù)接收線程,利用TCP傳輸協(xié)議單向接收省局上位機采集中心軟件高速下行的數(shù)據(jù)流[3]。以區(qū)域自動氣象站為例,軟件啟動時,先讀取區(qū)域自動氣象站的通信配置參數(shù)正確與否,若為正確,則創(chuàng)建TCP數(shù)據(jù)流監(jiān)聽線程,將其設置為后臺線程并激活。線程的功能及流程是首先與上位機服務器建立TCP通信連接,然后實時接收上位機服務器下行的數(shù)據(jù)報[4],并存儲在內(nèi)存數(shù)組中。關(guān)鍵代碼說明如下:
①TCP_Client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
TCP_Client.Connect(ServerIP,ServerPort);
首先創(chuàng)建服務器端監(jiān)聽Socket,采用IP4尋址協(xié)議、流式連接、TCP協(xié)議傳輸數(shù)據(jù)等模式,然后根據(jù)配置的IP地址、端口號進行連接服務器。
②byte[] recv_buf = new byte[1000];
int receiveLength = TCP_Client.Receive(recv_buf);
開辟存儲容量為1000字節(jié)的緩沖區(qū),循環(huán)接收上位機服務器下行的TCP數(shù)據(jù)流,并把他依序放進緩沖區(qū)內(nèi)。
軟件配置了一個工作時間周期為50 ms的定時器,首先定時依次從接收緩沖區(qū)序列中取出子報文,然后對各段子報文進行組包并進行完整性檢驗。以區(qū)域自動氣象站的ASCII報文為例,如果組合后的報文包含有報頭特征符“BG”和報尾特征符“ED”,并通過報文長度校驗,則視為完整的一個報文,否則繼續(xù)組合下一段子報文。當報文完整性檢驗完畢,接著根據(jù)區(qū)域自動氣象站的數(shù)據(jù)字典格式進行各個要素的解析。數(shù)據(jù)解析時,軟件根據(jù)各個要素的標識符,如氣溫變量名稱為AAA,濕度變量名稱為ADA等對報文進行要素報文段定位,然后再檢索提取出該要素的實時值、小時極大值、小時極小值以及極值出現(xiàn)時間等統(tǒng)計量[5]。最后根據(jù)部署在縣(區(qū))局自動氣象站數(shù)據(jù)處理與顯示終端軟件對設備報文格式的要求,將各要素的ASCII值加上報頭報尾封裝成十六進制的報文。
在數(shù)據(jù)綜合處理模塊對接收到的原始報文進行解析及格式轉(zhuǎn)換后,立刻啟動數(shù)據(jù)UDP發(fā)送線程,根據(jù)配置的縣(區(qū))局接收數(shù)據(jù)服務器的IP地址清單,以數(shù)據(jù)流的形式利用UDP協(xié)議發(fā)送至自動氣象站數(shù)據(jù)處理與顯示終端、舒適度數(shù)據(jù)采集系統(tǒng)等業(yè)務軟件進行數(shù)據(jù)顯示、存儲和報文制作等。
數(shù)據(jù)報的發(fā)送采用了一個無連接的傳輸協(xié)議:用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol)。UDP是OSI參考模型中一種無連接的傳輸層協(xié)議,他主要用于不要求分組順序到達的傳輸中,分組傳輸順序的檢查與排序由應用層完成[6]。
隨著廣東省氣象現(xiàn)代化進程不斷推進和氣象防災減災需求日益增長,越來越多類別的自動氣象站將會在全省各地部署運行,以提供精細化的氣象觀測數(shù)據(jù)。因此,設計一個高效的自動氣象站4G數(shù)據(jù)服務中心軟件尤為重要。
目前,自動氣象站4G數(shù)據(jù)服務中心軟件已在全省21個地級市的氣象局業(yè)務應用3 a多,為市、縣(區(qū))氣象局的區(qū)域自動氣象站、海島自動氣象站、土壤水分站、生物舒適度站等8類設備提供實時的觀測數(shù)據(jù),為當?shù)氐臍庀箢A報預警和防災減災服務提供高時空分辨力的數(shù)據(jù)支撐。同時,市局和縣(區(qū))技術(shù)保障人員通過該軟件能夠及時掌握管理區(qū)域的各站點設備運行狀態(tài)和數(shù)據(jù)質(zhì)量,實現(xiàn)對業(yè)務質(zhì)量不規(guī)范的站點做到及時維護[7]。