【摘 要】提出一種基于C#正則表達式的民航報文分析系統,該系統將從在用轉報機進行路由配置后接收相應的報文并進行分析及統計。
【關鍵詞】民航轉報;C#;正則表達式;報文分析
0.引言
當代空中交通管理在平面通信上長期依賴于民航轉報系統。該系統將提供包括SITA和AFTEN在內的報文接收、存儲、分析及相關告警。在實際工作中,技術保障工作的開展有必要對相關信道的報文進行分析及監控。另一方面,在業務培訓上,特別對于新參加工作者對于報文的理解和實際的應用是工作安全要求不可缺少的一部分。在實踐中,本文提出一種基于C#正則表達式的報文分析系統,該系統將部署與轉報機網絡內的一臺windows平臺終端(以下簡稱實驗終端),對需要進行監控及分析的報文信道進行實時監控、存儲及統計。實現上比以往人工分析更為快捷和簡單。
1.總體設計
在設計上,首先為系統創造環境條件,在轉報機IP終端上實現多路由轉發機制,通過對需要監控的信道進行路由轉發,轉發至需要監控的實驗終端,實現監控系統數據監控、分析報文的同時保證在用系統的不中斷及安全使用。具體的路由轉發設置以轉報機的廠家說明書為準,型號不同操作步驟不一,此處不再贅述。經過路由轉發的轉報系統實驗終端,能夠實現對監控信道的無誤完全轉發接收,甚至可以同時監控多個信道(在轉報機服務器設置)。這也為后續程序設計的功能和人機交互友好性實現提供了思路。
另一方面,如上所述,系統在實現上通過串口接收相應的報文數據,并在人機交互界面上提供對多路數據的監控可選擇項。總體程序設計由接收模塊,報文分析模塊和數據庫設計構成。
1.1接收模塊與數據存儲模塊
在傳統的報文接收方面,系統提供了包括網絡接口和串口在內的多種接入方式,根據實際工作情況采用串口接收方式。在C#中,系統在此模塊設計上首先對串口進行初始化。
根據實際的需求,系統在應用中定義串口觸發事件,形成以中斷為主的數據訪問方式,一方面降低實驗終端對轉報系統的影響,另一方面也提高系統的整體資源利用率和對應轉報系統的實際工作。具體接收函數如下:其中buf二級制數組為程序聲明的一個臨時數組,用于存儲當前系統接收來的串口數據。而在C#中串口控件定義為comm,其提供的讀取函數能夠直接獲取串口數據。另外一方面則應用了C#的異步方式進行接收,并按照ASCII進行字符串轉換,完成一個完整的報文接收,具體實現如下:
voidcomm_DataReceived(objectsender, SerialDataReceivedEventArgs e)
{
byte[] buf=new byte[n];
comm.Read(buf,0,n);
builder.Clear();
this.Invoke((EventHandler)(delegate
{
builder.Append(Encoding.ASCII.GetString(buf));
this.txGet.AppendText(builder.ToString());
this.txGet.AppendText(“\n”);
labelGetCount.Text=\"Get:\"+received_count.ToString();
}));
}
作為數據存儲模塊,visual2010開發平臺實現了C#程序設計與SQL SEVER的完美快速結合,因此可以在數據庫中建立相應的表格對數據進行存儲,具體設計由于篇幅所限不再贅述。
1.2報文分析模塊
對于按照固定格式發送的報文數據,根據文獻[2]在處理上可以使用C#正則表達式。在國內航空通信網中,傳遞標準的AFTN和SITA格式電報,每份電報均由以下五部分組成:報頭行、收電地址部分、發電地址部分、電文部分和電報結束符號。
1.2.1報頭行
A電報開始信號:由一組ZCZC和一個間隔組成。該信號必須作一整組發送,不得插入任何字符。
B電路識別代號和電報流水號:電路識別代號由三位字母組成,它緊跟ZCZC之后,電路識別代號后緊跟電報流水號。電報流水號從001開始到999(假設流水號位數為3位)順序編發和循環,并于每日零時(UTC)起從001開始,用來表明本機收發電報的份數,以防漏報。
C拍發時間:由一個空格和四位數字組成,緊跟在電路識別代號和電報流水號后面,始發時,拍發時間表示開始向外發送的時間;接收時,拍發時間表示本機開始收到該報的時間。
D改路標志:由三個字母V和一個間隔信號組成,僅在電報通過備用路由承轉時使用。
1.2.2收電地址部分
A電報等級代號:由兩個字母組成,兩個字母必須同發一組,不得插入其他字符,每份電報只準使用一個電報等級代號。
B收電地址:AFTN格式的電報每個收電地址代號由八個字母組成,前四個字母為地名代號,第五至第七個字母為單位部門代號或航空公司代號。第八個字母為填充字符或航空公司內部使用的單位代號。
1.2.3發電地址部分
A電報簽發時間:由一組六位數的日時組(1、2位為日期,3、4位為小時,5、6位為分鐘)組成。對于AFTN電報先發此項,而對于SITA電報則先發發電地址代號部分即電報簽發時間緊跟在發電地址部分之后。
B發電地址代號:字母含義與收電地址代號相同,需注意的是SITA電報中發電地址前面要加一個”.”。
1.2.4電文部分
電文由發電人按規定要求編寫。電文結束符號現采用一個或幾個換行鍵來實現。
1.2.5電報結束部分
AFTN格式電報由七次連續的升格(四至七個均可)、四個連續的字母N組成。而SITA格式的電報則有它的特殊要求,在電文結束時需另起一行加“=”,再由七次連續的升格(四到七個均可)、四個連續的字母N組成。
因此在設計中只需要按照上述規定制定好正則表達式模板,實現對報頭、發電地址、收電地址、電文進行分析處理就可以完成分析任務。而在C#中,正則表達式的設計顯得十分方便。
首先引入命名空間引入System.Text.RegularExpressions,并用正則表達式構造一個Regex類,該類在IsMatch方法驗證匹配中將返回一個bool值,如果有匹配項,返回true,否則返回1。
為了實現的方便系統還提供了分割字符更換函數,以應對后續的數據處理,具體實現如下:
publicvoid Replace(string source){
Regexregex=newRegex(\"http://\",RegexOptions.IgnoreCase);
stringresult=regex.Replace(source,\"|\");}
2.結束語
本文提出一種基于C#正則表達式的民航報文分析系統,該系統借助轉報機的路由轉發功能,在網內部署相應的分析實驗終端,通過報文接收、分析和存儲實現了對民航轉報系統的另一種技術保障手段。該系統能夠不影響正常業務的運行為安全事件調查、業務培訓學習以及故障排查提供另一種數據支持。
【參考文獻】
[1]陳齊亞,米超.民航氣象報文綜合應用系統軟件的總體設計[J].電腦知識與技術,2011(30).
[2]曾培彬,高升秋.基于Web信息處理的機位信息融合設計與實現[J].中國民航飛行學院學報,2014(05).