楊 豪,胡利軍,樓成武
1(寧波市氣象網絡與裝備保障中心,寧波 315012)
2(溫州市氣象局,溫州 325027)
新一代天氣雷達在強對流、暴雨等突發災害性的中小尺度天氣系統監測和預警中發揮著重要的作用,有“千里眼”之稱[1].隨著現代氣象業務和氣象服務的不斷深化,雷達系統運行可靠性和穩定性的要求越來越高.
雷達系統含機內自動測試設備(Built-In Test Equipment,BITE),但是需要近距離監測和集中控制.業務人員通過雷達發射機機柜上的操控面板來判斷發射機各組件工作情況,通過功能鍵實現切換發射機的工作模式等操作[2].在雷達處于無人值守的情況下,業務人員只能從雷達自身的運行軟件獲得簡單的報警文字提示,很多情況下無法通過遠程監控和控制來判斷、處理問題,達不到快速運維、及時保障的要求.
針對雷達監控和維護中存在的不足,開發了一套無人值守的雷達遠程監控系統,實現運行狀態遠程監測和控制.采用ZigBee 通信方式實現監控組網通信,利用語言集成查詢LINQ (Language INtegrated Query)技術、Entity Framework 技術、多線程技術編寫數據采集處理和控制軟件.
遠程監控系統監控80 路故障信號、19 路電壓電流信號及8 路運行狀態信號,另外還有8 路輸出控制信號,同時需要對外部供電電源、運行環境參數進行監控.數據采集硬件電路的設計需要滿足快速運算和大量存儲的要求,同時又要避免對雷達原有系統產生干擾.通過定義一個通信協議將采集到的數據按照指定的通信方式發送到上位機,上位機軟件將接收到的數據解析出來后進行存儲、展示,提供故障報警、遠程控制、數據查詢分析等功能.
總體系統結構框圖如圖1 所示.

圖1 總體系統結構框圖
可選的監控組網通信主要有LAN、RS232、ZigBee等方式,實際的硬件電路中預留了這些通信方式.通過比較它們各自的特點,根據各站的實際情況選擇需要的通信方式,幾種可選通信方式的主要特點如表1.
在實際應用中主要采用ZigBee 通信方式[3],不僅可以滿足系統機房內的通信,也可滿足不同機房或樓層間的可靠通信.ZigBee 通信優勢在于:1)可實現自行組網通信,個別傳感器出現異常不影響整個組網通信.2)穩定性高,在長時間的連續運行中能滿足監測和控制的要求.3)可擴展性好,可任意增加相同通信協議的其他采集電路或傳感器[4].4)無線通信,通信方式不需布線,可有效避免布線帶來的問題,不必改變機房環境和雷達系統結構.外部電源及溫濕度數據采集硬件電路中的每一個電壓電流互感器、運行環境溫濕度傳感器位置分布分散,因此選擇ZigBee 這種無線通信方式進行組網優勢明顯.寧波雷達遠程監控系統采用ZigBee 無線通信方式來獲取雷達的運行狀態,實時掌握雷達各組件的運行情況,以及在必要時刻通過該方式控制雷達.

表1 通信方式的主要特點
信息采集硬件電路以單片機為核心,由電平信號輸入接口電路、電壓電流信號轉換電路、輸出控制接口電路、以太網通信接口電路、RS485 通信接口電路、RS232 通信接口電路、ZigBee 無線通信接口電路等電路模塊組成.
數據采集及運算電路是整個電路的核心部分,由單片機及附屬電路組成.單片機采用美國德州儀器公司生產的16 位單片機 MSP430F5438A.該單片機包括3 個16 位定時器、一個高性能12 位AD 轉換模塊、多達4 個通用串行通信接口(USCI)、一個硬件乘法器、DMA、具有報警功能的RTC 模塊和多達87 個I/O 引腳,具有外圍接口多、程序容量大,功能強、功耗低等特點[5].其內部集成14 個外部通道的12 位AD轉換模塊可直接用于雷達電壓電流等參數的采集.其中4 路串口通信接口可與上位機通信.其自身所帶的FLASH 存儲器可存儲標定參數及其他運行參數,完全滿足采集與運算電路要求.
為了盡量避免對雷達自身電路的影響,采用DCDC 隔離電源電路設計,信號采樣接口進行光耦隔離,保證在自身線路出現問題情況下不影響雷達系統正常運行,平時電路工作中不會對雷達設備本身造成影響[6].
根據需要采集的物理量設計指令格式,不同的設備地址分別對應采集和控制雷達系統運行狀態,以及采集雷達外部供電情況和環境參數,如表2.采集和控制雷達系統運行狀態只有一個采集器,因此指令格式中的設備地址定義為1 個字節,將0xFF 地址作為廣播地址.在實際應用中,一套雷達遠程監控系統對應一部雷達,不可能用到0xFF 這個地址.采集供電、環境參數等外部物理量的指令格式的設備地址定義為2 個字節,低字節表示傳感器地址,高字節表示節點地址.
小蟲的心情極好與風無關,而是受了姑父的鼓舞。能被姑父器重,是小蟲到凌州以來最大的心愿。平時,小蟲和姑父之間像隔著一座高大的山坡,姑父在山巔,小蟲在山谷。這些年小蟲一直懷著無比崇敬的心情,就這么仰視著姑父。小蟲非常希望自己能干件漂亮的活兒,讓姑父瞧瞧。現在,機會來了。

表2 雷達遠程監控系統的指令格式
無論是節點地址還是傳感器地址,設置范圍均為0x00-0xFE,0xFF 為廣播地址.作為約定,當指令中設備地址低字節為0xFF,高字節非0xFF 時,則按照一定時延讀取指定節點的所有傳感器的數據;當指令中設備地址低字節非0xFF,高字節為0xFF 時,考慮到實際應用中讀取所有節點某一指定傳感器的數據意義不大,則交換高低字節,仍讀取指定節點的所有傳感器的數據;當指令中設備地址低字節和高字節均為0xFF 時,則按照一定時延讀取所有指定節點的所有傳感器的數據;當指令中設備地址低字節和高字節均非0xFF 時,則讀取指定節點中指定傳感器的數據.
遠程監控軟件實現對雷達運行狀態及外部供電的智能化和遠程化監控,實時掌握雷達的運行狀態,迅速采取有效的措施.上位機的軟件主要是下發采集指令采集雷達的運行狀態、報警、組件供電的信息和外部供電、運行環境溫濕度的信息,并將數據進行解析、存儲和實時報警.在雷達系統異常時,可通過軟件下發控制指令進行故障信息復位等操作.監控軟件主界面如圖2 所示.
軟件系統采用基于.Net Framework 開發平臺的C/S 架構和Windows Forms 技術進行開發,Windows Forms 有很多成熟的控件,可信手拈來,就算需要重構也易于上手[7,8].以Visual Studio 為開發工具,整個軟件系統包括串口通信、數據解析、數據存儲、數據顯示、閾值報警、遠程控制、數據查詢等功能模塊,監控系統的軟件架構、軟件流程如圖3、圖4 所示.
系統開發中由于一次性需要處理的數據量較大,技術難點之一在于串口通信編程.微軟提供的.Net Framework 中自帶SerialPort 組件,可以直接使用,但是該組件有一定缺點和局限性.自帶的SerialPort 是窗體控件類型,內部缺少委托和回調函數,對多線程的支持不夠友好.另外,默認情況下下位機發送上來的數據到達緩沖區,可一次性讀取緩沖區中的數據,或是按照小于緩沖區大小的指定字節長度進行讀取,或是讀取到NewLine 標志位.在本文的應用場景中,有些返回數據包含大量數據信息,需要分多次上傳,導致緩沖區一有數據就連續上傳.此時進行校驗就有可能因每組數據不完整導致校驗失敗而直接拋棄數據,所以需要等待數據接收完整后才能進行校驗.因此為了避免線程阻塞和數據接收未完整就校驗的問題,不直接使用開發環境工具箱中自帶的SerialPort 組件,而是自行封裝一個串口操作類,包含自定義數據發送和接收處理方法、完整數據接收后委托、回調函數等.
接收數據時,考慮到下位機響應一次命令所上傳的數據量巨大,當超過串口默認一次能容納的數據緩沖區大小時,需要自定義一個二級緩存,用于讀取和存放數據;同時增加一個定時器,用于檢驗在指定時間內數據是否已經全部接收完成;在向下位機發送獲取數據的指令時,如果短時間內出現大量的請求,應當拋出異常,提示上一條數據尚未處理完成,從而避免犧牲CPU 性能,導致系統卡頓.

圖2 遠程監控系統軟件

圖3 遠程監控系統的軟件架構
串口編程是本系統上位機監控軟件的關鍵,封裝的串口操作類既要完整地接收到下位機每一次發上來的數據,又要最大化地響應上位機下發的指令,同時做到不錯過每一條請求指令.在實際應用中,封裝好的串口類很好地達到了預期的目的,可快速響應每一次數據采集請求,數據接收準確可靠.
數據是雷達遠程監控系統的核心,所有的監控都是針對數據的監控.本系統的數據持久化采用SQL Server 數據庫和XML 文件形式,采用Entity Framework技術路線.Entity Framework 利用抽象化數據結構的方式,將每個數據庫對象都轉換成應用程序對象,數據字段則轉換為屬性類型,關系則轉換為結合屬性,便于在開發中使用自己最為熟悉的編程語言來完成數據的訪問和存儲.
考慮到每個臺站配置傳感器數量不確定,其中傳感器表中的數據字段采用XML 類型數據.XML 具有很好的擴充性、彈性和易讀性,而且在數據文件存儲時也采用XML 文件,可以很好地和該字段保持一致.
系統開發中充分利用了LINQ 特性,通過LINQ to Entities 和LINQ to XML 連接對象模型和數據模型.充分結合LINQ 中查詢語法、擴展方法以及Lambda 表達式實現數據的快速操作,達到編碼快速、代碼可讀性強、數據訪問性能高、后期代碼維護方便的目的[9].
數據查詢導出Excel 文件版本設定為至少是2007 版本以上.2007 版本以上的Excel 文件采用Open Office XML 文檔格式存儲,可以用Zip 管理工具打開,Zip 包內包含一系列的XML,因此在實際開發中同樣可以采用LINQ to XML 對Office 文件進行操作[10].
在軟件多線程開發技術中,采用了Task 和委托的方式.與Background Worker、Thread、Invoked 等方式相比,Task 和委托優勢明顯.

圖4 遠程監控系統的軟件流程
1)Task 新增了兩個異步關鍵詞async 和await,彌補了很多早期多線程技術上的不足.在數據接收、處理、存儲等多處采用Task 的方式對任務進行調度,確保了程序每一個功能得到高效執行.
2)在跨線程和跨窗體操作的編程中,還大量采用了委托(delegate)的方式.通過接口、委托確保線程間和類型安全,同時保證異步并發.例如在串口操作類中定義了一個完整數據接收完成后的委托,一個數據操作回調函數.在完整數據接收完成后啟動一個新線程對數據進行運算處理.在串口初始化時就將數據處理的子線程事件綁定到串口操作類的數據接收完成的回調函數上.
3)采用SynchronizationContext 為UI 主線程添加同步上下文,通過Task 開啟多線程同時采集不同節點數據,在數據處理完畢后利用SynchronizationContext 的Post 方法將數據綁定到相關界面,從而保證異步并發避免出現未響應的狀態.
在使用多線程技術時也要注意“死鎖”問題,確保某些數據的獨占訪問,注意區分什么時候用異步什么時候用同步,避免程序運行時導致數據損壞、程序崩潰.
通過設計軟硬件結合的雷達遠程監控系統,達到了智能監控、實時預警、及時處理的目的.ZigBee 的通信方式使得散落的物理量數據得到便捷有效地歸集;自行封裝串口編程解決了大數據情況下線程阻塞和數據不完整接收問題;Entity Framework 和LINQ 技術的采用達到了數據訪問性能高、后期代碼維護方便的目的;多線程開發技術確保程序的每個功能得到高效執行,確保線程間和類型安全以及異步并發.
系統在寧波市氣象雷達站得到應用,運行期間,曾多次通過遠程監控軟件及時發現雷達運行異常,并得到及時處理.異常情況涉及雷達設備機房環境溫度過高、發射機溫度過高、UPS 故障、產品數據中斷、通信線路故障等.其中有一次因雷暴天氣導致市電突然中斷,而柴油機發電系統的自啟動控制模塊因電池沒電不能自啟發電.遠程監控系統及時告警,提供供電告警信息、故障原因,問題在第一時間內得到處理.后續將在報警呈現方式、豐富監控內容方面開展相關工作.結合網絡技術、無線通信技術增加報警的輸出方式,在短信貓或微信訂閱號等方面做嘗試;增加雷達性能相關物理量的監控,實時掌握雷達的性能動態.