黃宏智,王明輝,譚晗凌
(廣東省氣象探測數據中心,廣州 510080)
魚塘氣象觀測是對自然狀態下魚塘生態系統中的氣象要素、氣候變化以及理化環境等信息進行綜合監測,是開展魚塘生態環境研究的主要數據來源。其中,魚塘綜合氣象條件通過影響水中有機物質的物理化學反應進程,直接控制水生生物的生長、發育、生活狀態、數量消長和分布等[1],進而對魚類從繁殖、飼養、并塘越冬到起捕、病害發生等全過程產生關鍵作用。傳統的魚塘氣象觀測主要是定點定時觀測若干層不同深度的水溫數據,數據種類單一、頻度低,其技術體制、報文時效、觀測內容以及組網能力等已不能滿足現代魚塘氣象觀測業務和服務的需求[2]。
為了切實提升魚塘氣象的觀測能力,廣東省氣象探測數據中心自主研制了一款新型的魚塘自動觀測氣象站,其配套研發的數據處理軟件能實時采集不同層次水溫、氣溫、濕度、長波輻射和短波輻射等氣象觀測要素數據及統計極值,并按照一定的數據格式形成報文上傳至省局接收中心服務器。文章著重介紹了魚塘自動觀測氣象站數據處理軟件的模塊結構、要素數據采集和采集器運行參數遠程設置等。
魚塘自動觀測氣象站各探測要素數據的獲取是上位機軟件通過發送下載分鐘常規觀測數據(DMGD)至主采集器進行交互予以實現的,并將返回的數據以固定的數據格式存儲在本地業務計算機中。該軟件的設計核心是如何高效、可靠地與魚塘自動觀測氣象站主采集器之間進行命令和數據交互,為觀測業務人員提供精確、高頻度的魚塘環境綜合氣象信息。
在每分鐘的01秒時,魚塘自動觀測氣象站數據處理軟件通過計算機配備的串口下行下載分鐘數據命令,一直處于監聽狀態的魚塘自動觀測氣象站主采集器在偵聽到命令碼后,首先對該命令進行合法性檢測,若為有效命令,則返回一定數據格式的數據流;若為非法命令則反饋“BAD COMMAND”錯誤代碼。魚塘自動觀測氣象站數據處理軟件接收到報文后,分析、提取以及顯示返回數據報文的各要素數據,并追加寫入本地計算機日文件中。
根據魚塘環境的觀測數據處理及工作參數配置需求,將軟件功能規劃為軟件初始化、參數設置、數據顯示及統計和數據管理4個模塊。軟件設計基于數據處理時效性的要求[3],采用多線程并發技術提高數據的采集及解析效率。4個模塊功能如下:
1)軟件初始化:軟件啟動后檢測Config、Data、RunningLog等參數配置、數據存放、運行日志文件夾是否生成,若未生成則創建運行日志文件夾;配置默認工作串口1的通信屬性(9600,8,N,1),同時激活串口1的DataReceived事件委托等;
2)參數設置模塊:包括通信參數和運行參數兩部分。通信參數主要指串口工作參數的設置,包括串口端口號、波特率、校驗位、數據位和停止位等;運行參數則由站號、上下短波靈敏度以及上下長波靈敏度5部分組成;
3)數據顯示及統計模塊:串口偵測到采集器反饋的報文數據流,啟動數據解析模塊,提取氣溫、濕度、5層水溫和輻射等觀測數據,并統計上述要素的日極值以及極值出現的時間;
4)數據管理模塊:根據所選的查詢日期,以顯示全要素的方式回查有效期為1個月的整點觀測數據,并提供導出Excel表格功能。
魚塘自動觀測氣象站數據處理軟件基于Microsoft Visual C#2010開發平臺,采用多線程并發處理技術和串口通信技術實現魚塘氣象觀測報文的獲取、要素數據提取顯示以及數據落地存儲等,為用戶提供直觀的魚塘氣象墑情和設備工作狀態。
魚塘自動觀測氣象站數據處理軟件作為終端微機的上位機軟件,在每分鐘的01秒發送終端操作命令,實現對主采集器各種參數的傳遞和設置,以及從主采集器讀取各種數據和下載文件等。主采集器正常運行時,其串口通信模塊處于在線偵聽狀態[4],一旦接收緩沖區監測有新數據到來,即刻啟動命令甄別機制,判斷是否為主采集器識別的命令集中的子命令,并執行相應的響應動作。魚塘自動觀測氣象站主采集器識別的命令如表1所示。

表1 魚塘自動觀測氣象站主采集器識別命令
上位機軟件每分鐘利用終端微機的串口發送“下載分鐘常規觀測數據(DMGD)”命令至主采集器,主采集器響應命令后,返回當前分鐘內涵蓋觀測時間、站號、工作電壓、配置要素觀測數據及統計值的報文,若當前所有的配置要素數據缺測,則返回“F”。同理,上位機軟件獲取整點數據是通過下行“下載小時常規觀測數據(DHGD)”予以實現。
關鍵代碼說明:
①Myport.PortName="COM1";
Myport.BaudRate=9600;
Myport.DataBits=8;
Myport.Parity=Parity.None;
Myport.StopBits=StopBits.One;
設置缺省的串口通信口序號為COM1,通信工作屬性如下:波特率、數據位、奇偶校驗位、停止位分別為9600、8、無、1。
②Myport.Open();
if(Myport.IsOpen)
{
DateTime stationtime=DateTime.Now;
string currenttime=Convert.ToString(stationtime);
string datecommand="DATETIME ";
datecommand += currenttime;
datecommand += " ";
SendCommand(datecommand);
}
打開軟件配置的通信串口,若打開成功,則讀取上位機軟件所在計算機的時間,同時發送設置主采集器時間命令,確保主采集器與計算機時間的一致性。
主采集器在每分鐘的01秒接收到“DMGD”命令后,按照特定的數據格式將各個要素觀測數據進行組合,并以ASCII流的形式返回。上位機軟件的串口接收線程偵聽到有數據到達,循環讀取串口接收緩沖區的數據,直至讀到的內容為空。讀取緩沖區內容完畢,對報文進行完整性核查,以接收內容的最后兩個字符是否為“ ”作為核查依據,若接收內容的最后兩個字符是“ ”,則作為有效報文進入要素分析提取功能模塊,否則作為無效報文進行丟棄。
在要素數據提取過程中,首先根據報文設定的索引位置提取出觀測時間、站號和工作電壓等運行信息;然后依次根據氣溫、濕度、水溫和輻射等各要素標識出現的順序讀取數據塊,并提取出當前觀測值、日極值及極值出現時間。上述各個要素的數據提取流程相似,下面以氣溫為例進行說明:截取氣溫標識符(T0)后面的數據塊后,首先讀取要素質控碼,若為00,則表示該要素數據正常,將質控碼后面的數據進行字符串轉十進制數處理后除以10即可得出當前的觀測數據,并用類似方式提取出統計極值;若質控碼為01或02,表示該觀測數據異常或設備發生故障,則將觀測數據設置為“/”。要素數據提取的工作流程圖如圖1所示。

圖1 要素數據提取工作流程
為了提高主采集器的維護效率,上位機軟件配置了運行參數遠程設置的功能模塊。在上位機軟件與主采集器建立串口通信的基礎上,當上位機軟件重啟或者人為干預時,上位機軟件會下行設置站號、運行時間、上下短波輻射靈敏度和上下長波輻射靈敏度等參數命令,主采集器響應后自動對運行參數進行更新,并以新參數帶入要素數值計算。
隨著氣象現代化的深入推進以及氣象服務領域的不斷拓寬,魚塘氣象觀測將在養殖業發展的事業中發揮越來越重要的作用。因此,如何高效穩定地采集魚塘環境的氣象要素數據成為廣大農業氣象工作者的一項重要課題。
魚塘自動觀測氣象站數據處理軟件在廣東省農氣站順利部署運行,實現實時獲取氣溫、濕度、5層水溫、4類輻射等魚塘環境綜合數據,并在本地服務器構建基礎數據集,為農業氣象觀測及科研提供了科學的數據支撐。同時,農業氣象工作者通過對大量的基礎數據進行分析及產品加工,生成了魚塘養殖戶容易理解的氣象服務產品[5],為科學施養提供了精細化地指引。可預期的是,隨著農業氣象服務需求的日益增強,建設魚塘觀測的站點也會越來越多,如何組網運行及監控將成為下一階段的重點研究工作。