论文部分内容阅读
【摘 要】提出一种基于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,否则返回false。
为了实现的方便系统还提供了分割字符更换函数,以应对后续的数据处理,具体实现如下:
publicvoid Replace(string source){
Regexregex=newRegex("//",RegexOptions.IgnoreCase);
stringresult=regex.Replace(source,"|");}
2.结束语
本文提出一种基于C#正则表达式的民航报文分析系统,该系统借助转报机的路由转发功能,在网内部署相应的分析实验终端,通过报文接收、分析和存储实现了对民航转报系统的另一种技术保障手段。该系统能够不影响正常业务的运行为安全事件调查、业务培训学习以及故障排查提供另一种数据支持。
【参考文献】
[1]陈齐亚,米超.民航气象报文综合应用系统软件的总体设计[J].电脑知识与技术,2011(30).
[2]曾培彬,高升秋.基于Web信息处理的机位信息融合设计与实现[J].中国民航飞行学院学报,2014(05).
【关键词】民航转报;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,否则返回false。
为了实现的方便系统还提供了分割字符更换函数,以应对后续的数据处理,具体实现如下:
publicvoid Replace(string source){
Regexregex=newRegex("//",RegexOptions.IgnoreCase);
stringresult=regex.Replace(source,"|");}
2.结束语
本文提出一种基于C#正则表达式的民航报文分析系统,该系统借助转报机的路由转发功能,在网内部署相应的分析实验终端,通过报文接收、分析和存储实现了对民航转报系统的另一种技术保障手段。该系统能够不影响正常业务的运行为安全事件调查、业务培训学习以及故障排查提供另一种数据支持。
【参考文献】
[1]陈齐亚,米超.民航气象报文综合应用系统软件的总体设计[J].电脑知识与技术,2011(30).
[2]曾培彬,高升秋.基于Web信息处理的机位信息融合设计与实现[J].中国民航飞行学院学报,2014(05).