摘 要:多普勒天氣雷達探測數據是現代氣象預報中非常重要的參考資料,其生成的探測產品需要傳送到國家局形成全國天氣雷達探測數據聯網。報文在傳輸過程中,會因為各種原因如網絡故障或者觀測儀器等導致發報出錯,若不能及時發現,會產生較大影響。本文實現了用Java語言編寫程序實現報文發送的自動監控和報警。
關鍵詞:雷達 報文傳輸 監控與報警 Java
中圖分類號:TN95文獻標識碼:A文章編號:1674-098X(2011)11(c)-0090-01
1 引言
新一代多普勒天氣雷達生成的探測產品極大的豐富了預報員的參考資料來源,為預報員更好的把握天氣形勢,特別是未來一段時間上游地區云層水含量及其走向提供了翔實可靠的參考。在雷達報文發報的檢測和監控過程中發現存在著以下一些問題:(1)發報軟件因異常關閉后未及時打開導致報文遲發或未發。(2)網絡中斷導致報文無法發送到服務器。(3)雷達檢修過程中容易出現空報文。
以上情況作為報文發送錯誤。單純依靠人力來監控難免出現遺漏,因此需要設計一款軟件來實時監控報文發送情況,在出現錯情時能及時示警。
2 軟件設計
2.1 設計思路及程序流程
2.1.1 軟件設計思路
報文發送流程如下:每小時整點由報文發送軟件生成五份雷達報文,并將該五份雷達報文發送到中轉發報服務器上,該中轉發報服務器隨后將五份報文發送到遠端國家局服務器中。發報軟件每小時發送五份報文,報文發送完成后會在日志文件中生成報文發送記錄,該日志文件每天生成一份。同樣,中轉發報服務器也會完成報文轉發后在日志文件生成報文發送記錄。報文發送監控和報警程序也依靠對上述兩個文件中的記錄的檢查,針對雷達報文發送過程中可能出現的各種情況,(包括網絡狀態、程序運行狀態等)編寫了雷達報文發送情況檢測監控程序。
程序的主要功能可以分為以下幾個模塊:
(1)網絡通斷狀況檢查。
(2)報文下載。
(3)報文上傳日志記錄檢查。
(4)聲音報警模塊。
目前雷達報文通過地面寬帶線路基本可以在整點過三分鐘內將5份報文發走并得到回執記錄,若上星走衛星線路則需要八分鐘左右才可以發走并有回執傳送回來??紤]到程序的易用性問題,監控軟件設定了配置文件,將程序執行監控的時間、發報中轉機地址等內容設定成可參數可調模式,方便監控人員設置雷達監控參數。
2.1.2 網絡通斷狀況檢查
網絡是報文上傳的基礎。若網絡不通,報文上傳也無從談起。因此監控程序在運行時會首先檢查網絡通斷情況,若網絡不通,則立刻報警。主要思路是根據系統 ping IP地址的命令,根據返回字符串判斷網絡是否通斷。網絡通會返回: Reply from xxx.xxx.xxx.xxx: bytes=32 time<1ms TTL=128,若網絡不通則會返回:Request time out。應用程序則根據返回字符串來統計,若超過3次以上為“Request time out”,就判定網絡不通,啟動報警模塊。主要功能實現代碼:
Process p=Runtime.getRuntime().exec(\"cmd /c ping \"+ ip);//調用本地進程
BufferedReader br=1;
br=new BufferedReader(new InputStreamReader(p.getInputStream()));
while ((s=br.readLine())!=1)
{
if (s.indexOf(\"Request timed out\") !=-1)
errorCount++;//ping失敗次數累計
}
2.1.3 報文下載
程序進入檢查時段以后,首先需要去報文中轉服務器下載最新的報文發送日志,然后才能進行日志的分析監控等后續工作。
2.1.4 報文上傳日志記錄檢查
報文上傳日志檢查的思路是:記錄在日志中的報文上傳情況因上傳結果不同而記錄情況也不同,因此可以通過日志記錄檢查文件是否上傳成功以及是否出現其他上傳狀況。監控程序每次檢查時候都會記錄兩份日志的總行數。下一次程序對日志進行檢查時只需讀取上一次記錄行數以后的日志即可。以下分別就中轉報文服務器日志和發報軟件日志分別做說明。
(1)中轉服務器日志檢查
首先,設上一次轉發服務器日志總行數L1,本次日志總行數為L2。若L2-L1=0則代表本次沒有報文發送。啟動報警模塊。若L2-L1>0則代表本次報文有報文轉發。程序繼續進行檢查。將(L2-L1)行數通過空格分成數組String[]array=(L2-L1).split(“\\r\\\r\”);對數組進行循環,過濾出不符合條件的記錄。然后對符合條件的記錄進行檢查。
(2)發報軟件日志檢查
發報軟件在每小時發送完五份報文后會在日志中記錄發報情況。通過對比上一次記錄行數L3和本次日志記錄的行數L4,若L4=L3,則代表本次發報軟件并沒有生成報文并將報文發送到報文中轉服務器上,監控程序報警。若L4>L3,且(L4-L3)的記錄中包含“無雷達數據”的字符串,則代表雷達發送的空報文,監控程序報警。通過布爾變量frag統計包含“無雷達數據”報文的條數,若frag為true,則監控程序報警。主要代碼羅列如下:
if (s== 1){new PlayAlerter();//啟動報警函數}
String[]orgArray=s.split(\"\\r\\\r\\");
if(orgArray[j].indexOf(\"無雷達數據\") !=-1)
{
if(orgArray[j].indexOf(getDate(6))!=-1){
++1ReportNo;
frag=true;
}
if(frag){new PlayAlerter();}
}
2.1.5 聲音報警函數
在監控程序檢查出錯誤以后,需要啟動聲音報警來提醒報文傳輸出現錯誤,需要馬上處理。函數主要用到了sun的sun.audio.ContinuousAudioDataStream,sun.audio.AudioPlayer,sun.audio.AudioStream三個包。
3 結語
本發報質量監控報警軟件經過監控人員測試后目前已經投入使用中,可以檢測網絡中斷、報文發報程序未開、雷達無數據(雷達檢修但開機后會生成)、上傳失敗轉備用服務器等情況,并提示所報警內容。在以后的使用過程中,軟件很多需要改動和改進的地方。尤其在適用性方面,還可以通過不斷加入新的參數來監控更多的報文發送情況。
參考文獻
[1] (美)Bruce Eckel[著].陳昊鵬(譯).Java編程思想第四版.(Thinking in Java (4th Edition)),機械工業出版社.
[2]高永強.Java編程藝術.清華大學出版社.