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