房云龙
(中国民用航空青岛空中交通管理站,山东 青岛266100)
航空气象服务的目的是为航空飞行的安全、正常、效率服务。航空气象探测和天气预报是航空气象服务的基础和组织实施飞行的重要依据[1-5]。《中国民用航空气象工作规则》规定民航气象服务单位应使用“电码格式的民航气象情报(Code format Civil Aviation Meteorological Information,CCAMI)” 进行发布和交换民航气象信息。CCAMI包含种类很多,本文仅指民航领域最常用的 “机场例行天气报告SA”“机场特殊天气报告SP”“9小时机场预报FC”“24小时或30小时机场天气预报FT”,其中SA,SP包含附加其后的趋势型着陆预报。由于CCAMI编码本身的复杂性、不同气象人员对编码的理解程度不同、各地发送CCAMI的软件终端不同,加之一些人为或通信的因素,都可能造成发布和交换的CCAMI并不符合行业标准的要求,进而影响了气象信息的准确性与真实性。因此,CCAMI编码的规范性成了航空气象保障能力和服务水平的重要一环。全国每天有上千份CCAMI参与国内或国际交换,人工进行质量控制显然不合实际,因此有必要利用软件技术手段对参与发布与交换的CCAMI进行质量监控。
本文根据目前民航气象领域存在的各类CCAMI发布软件纠错原理和实现过程,并结合笔者多年的工作经验,归纳总结出两种CCAMI纠错方案,即“集成法”和“解析法”,并从纠错原理及实现方式等方面分析二者差异和优缺点,为CCAMI纠错软件的编写提供参考。
CCAMI一般由“报头”和“情报内容”组成。由于报头为固定编码,构成简单,一般不易出错,故本文主要针对情报内容进行质量控制。CCAMI情报内容是由情报中各类关键词、机场四字代码、发布时间、有效时段以及若干气象要素构成,本文把这些统称为CCAMI组成要素(Meteorological Information Components,MIC),各组成要素之间以空格分隔。
CCAMI纠错依据是民用航空气象各类标准、规范等,具体包括:《中国民用航空气象工作规则》(交通运输部2016年第23号),《民用航空飞行气象情报发布与交换办法》(AP-117-TM-01R2),《民用航空气象地面观测规范》(AP-117-TM-02-R1),《民用航空气象预报规范》(AP-117-TM-2019-01)。为简便起见,下文中对以上各种规定标准等统称为“规范”。
“集成法”依靠软件界面分解出CCAMI各组成要素,分别进行纠错控制之后,按照固定顺序集成为完整CCAMI。基于 “集成法”的发布软件界面控件与CCAMI各组成要素一一对应,表1是CCAMI组成要素对应常见的软件界面控件。以Windows系统为例,根据组成要素的特点,常用下拉框或文本框。每个CCAMI组成要素严格对应软件界面的某一控件,这样在编辑情报之前就通过软件界面把CCAMI分解成独立部分,以便于纠错工作的展开。
每个CCAMI组成要素都有固定的编写规定,不同要素之间还有相应的一致性原则,本文把“规范”规定的CCAMI所必须满足的约束条件统称为“编报规则”。“集成法”最显著的特点就是CCAMI要素与软件界面控件相互绑定,一一对应。“集成法”纠错工作的本质就是把CCAMI“编报规则”转化为软件界面控件对应的文本内容之间相互关系的约束,例如“编报规则”规定风的编报必须满足阵风与平均风速之差≥5 m/s,根据软件界面阵风与平均风速对应的控件把文本转化为数值型变量,然后进行判断即可(图1)。
具体操作过程中,按照软件界面的不同设计风格,既可以把多个组成要素合并为整体对应一个软件界面控件(例如多个天气现象对应一个“天气现象控件”),也可以把单独组成要素拆分为不同组成部分对应不同的软件界面控件(例如把单独的“云层”分为“云量”“云状”“云高”三个组成部分,并分别对应三个不同的软件界面控件)。待所有软件界面控件均进行纠错检验之后,把控件文本内容按照固定的顺序集成组合起来即为完整的CCAMI。
表1 CCAMI组成要素及对应的软件界面控件
“解析法”是通过解析完整CCAMI获取各组成要素进而根据“规范”判断CCAMI正确新的一种纠错方法。“解析法”把完整的CCAMI作为计算机程序中的一个字符串,以“空格符”或者“回车”或者“换行”将字符串解析成CCAMI的组成要素,然后根据各个组成要素的特点对CCAMI进行纠错。
“解析法”不依赖于发布软件界面控件,无论通过何种方式形成的CCAMI均可通过“解析法”进行纠错处理。依然以“平均风速与阵风”为例来说明“解析法”的工作原理。如图1所示,通过解析CCAMI获取情报“风组”数据,并进一步根据“风组”的结构属性解析出“平均风速”与“阵风”,然后根据“编报规则”进行纠错判断。虽然要素“解析法”关于要素纠错方法与“集成法”完全一致(如图2中“风的纠错方法”),但两种纠错方法最本质的区别在于要素的获取方式的差异,“集成法”通过软件界面控件直接获取,而“解析法”去通过解析原始CCAMI获取要素数据。
图1 “集成法”与“解析法”纠错流程图(以阵风与平均风速之间约束条件为例)
图2 “集成法”与“解析法”的工作流程结构图
虽然“解析法”纠错过程与软件界面无关,但这并不意味着“解析法”不需要软件界面,设计优异的软件界面会提高民航气象人员编辑CCAMI的工作效率。无论采用何种界面,只要最后形成的CCAMI相同,纠错结果就完全一致。
如图2所示,“集成法”原理简单,包含3个过程,分别为“信息转化过程”“要素纠错过程”和“情报集成过程”。“信息转化过程”把软件界面控件对应的文本信息转化为程序可识别的各类数据。要素纠错(Element Error Connection,EEC)过程包含“单要素独立纠错 (Single element Independent error Connection,SIC)” 和 “多要素组合纠错 (Multi-element Combinational error Connection,MCC)”两个步骤。SIC只涉及要素本身语法规则,MCC则考虑不同要素之间的匹配关系。满足SIC与MCC后,“情报集成过程”把各要素按照固定顺序集成为CCAMI即可。“集成法”中,“信息转化过程”和“情报集成过程”处理方式简单,“要素纠错过程”是“集成法”的主体与核心。
“解析法”原理复杂,涵盖面广,包含“解析过程”“判断过程”“要素纠错过程”“排序过程”以及“其他纠错过程”等结构。 “解析法”通过“解析过程”拆分CCAMI获取字符串,通过“判断过程”分析字符串对应何种要素,然后进行ECC,最后通过“排序过程”与“其他纠错过程”进行检验最后形成纠错结论。
“集成法”与“解析法”均包含ECC,但区别在于ECC是“集成法”的主体与核心,占据了“集成法”95%以上的代码量;而“解析法”中,ECC仅为整个算法的一个组成部分,占全部代码量的30%左右。
分析CCAMI各组成要素是所有纠错方法的基础。“集成法”中CCAMI各组成要素与软件界面绑定,即“集成法”依靠软件界面分解各组成要素,这种方案虽然在一定程度上降低了分析原始CCAMI的难度,但其固有工作方式也对纠错过程造成了很多限制,不同的软件界面对应着不同的纠错方法。理论上不同的纠错方法应该有相同的纠错结果,但随着软件代码量的增大,加之气象代码本身的复杂性,很难保证纠错结果的一致性。如图3所示,“集成法”有三个软件界面,由于不同界面对应的CCAMI要素不同,因此有三种纠错方法和三种纠错结果,虽然最后形成的CCAMI一致,但三种纠错结果可能不完全一致。“解析法”直接解析CCAMI本身,这样只有一种纠错方法和一种纠错结果。无论软件界面如何,只要最后形成的CCAMI一致,那么纠错方法和纠错结果就一致。
如图3所示,“集成法”依靠软件界面分解出CCAMI组成要素并进行单独和组合纠错,待纠错完成后将个要素集成为完整的CCAMI,纠错过程在形成情报之前。这种纠错方法可能造成最后形成的CCAMI存在错误,因为即使各组成要素完全正确,也无法保证CCAMI的正确性,即存在“集成错误”的可能性。“解析法”的工作对象是完整的CCAMI,通过软件技术将CCAMI解析成单独要素并进行单独寄组合纠错。由于“解析法”直接检验最终的CCAMI,故不存在“集成错误”。
“界面层”与“逻辑层”是软件工程理论证实的较好的软件设计理念。“解析法”的纠错方法是一个独立的逻辑处理模块,可编译为单独动态链接库文件(DLL),可供多个界面(界面层)调用,具有很好的可移植性,如果发现算法错误,修改也很简单;“集成法”纠错过程以来界面设计,界面层和逻辑层结合在一起,只能编译成独立的“可执行文件”,几乎没有移植性,发现错误就要重新更改应用程序,维护和修改的难度大大增加。
图3 “集成法”与“解析法”中软件界面与纠错方法关系的比较
软件测试是软件应用得非常必要的环节。“集成法”的纠错过程依赖软件界面,只能通过手动测试,效率低下。“解析法”的纠错模块独立于界面层,故可单独对纠错模块进行测试,利用民航气象数据库每年几十万条完整的CCAMI对“解析法”纠错模块进行批量循环测试,提高了测试的效率,发现并改正程序中的各种bug,优化代码。
无论从纠错原理设计的完整性、产品适用性、可移植性及测试效率等各方面,“解析法”都优于“解析法”。
民航青岛空管站气象台历来重视利用软件技术来提升CCAMI的发布质量,从2010年就开始着手研发具有纠错功能的CCAMI发布软件,成功开发了基于“集成法”的“TAF报文纠错软件”并在青岛空管站气象台预报室稳定运行。后来对软件进行功能升级,分离软件“界面层”与“逻辑层”,编写基于“解析法”的核心纠错部件。由于纠错算法采用了“纵向”不同要素依次顺序纠错与“横向”三层逻辑控制相结合,故将此纠错算法命名为“纵横纠错法”。目前,“纵横纠错法”已经根据 《民用航空气象预报规范》(AP-117-TM-2019-01)重新修改了纠错算法,实现了算法的升级。
“纵横纠错法”由工作在民航气象一线,同时具有一定编程能力的专业气象人员编写,可有机结合民航气象与计算机编程两个学科的特点,避免了计算机软件人员缺乏民航气象知识导致的软件代码正确性及稳定性的问题,目前可以实现FC,FT,SA,SP的纠错。
“纵横纠错法”对近几年参加情报交换的全国数十个机场的气象情报进行循环测试,已经完成了百万量级的测试工作,保障了算法的纠错质量。“纵横纠错法”现已经编译为dll文件,C#,Visual Basic,Visual Basic.NET,Java等多种语言均可调用,目前已经广泛应用青岛空管站CCAMI发布与监控系统中,有效保障了青岛机场气象情报的正确性和规范性。
本文通过研究CCAMI内在属性及组织结构,提出了CCAMI纠错的两种基本方法,分别是 “集成法”和“解析法”。“集成法”依靠软件界面分解出CCAMI各组成要素,分别进行纠错控制之后,按照固定顺序集成为完整CCAMI。“解析法”通过解析完整CCAMI获取各组成要素,进而根据“规范”判断CCAMI正确性。
根据二者的工作原理及处理流程,比较了二者的不同点,得出以下结论:
(1)“集成法”原理简单,主体内容为“要素纠错过程”;“解析法”原理复杂,涵盖面广,除“要素纠错过程”外,还包含“解析过程”“判断过程”及 “排序过程”等结构。
(2)“集成法”纠错结果受制于软件界面,“解析法”与外部界面无关。
(3)“集成法”先纠错后情报;“解析法”先情报后纠错。
(4)基于“集成法”的软件,界面层和逻辑层结合,没有移植性;基于“解析法”的软件,界面层和逻辑层分离,符合软件工程理念,可移植性强。
(5)“解析法”测试效率远高于“集成法”。
鉴于“解析法”的优点,CCAMI纠错软件应首选“解析法”。 “纵横纠错法”是民航青岛空管站气象人员提出的一种基于“解析法”的CCAMI纠错算法,可广泛应用于CCAMI发布、监控软件中。