屈景怡,陈钟玉,吴仁彪
(中国民航大学 天津市智能信号与图像处理重点实验室,天津300300)
通航飞行服务站由监控指挥系统、飞行计划处理、冲突探测、航行情报服务系统、适配参数系统等多个子系统组成[1,2]。其中,适配参数系统的主要功能是对通航飞行服务站中各子系统的参数进行配置管理,并以配置文件的形式发布最新的参数配置[3]。
在民用航空空管自动化系统中,由于飞行流程和飞行参数等都是固定的,对于配置的灵活性要求并不高[4]。通航飞行服务站分为基本型、增强型和应急型3种,需要根据不同的作业环境对各子系统进行灵活的配置。比如,基本型和增强型飞行服务站所配备的软件模块种类、数量是不同的;应急型的飞行服务站要求能够根据工作地点进行实地灵活配置。针对通航飞行服务站的特点,本文提出了一种基于自定义脚本的方法,用于实现通航适配参数的灵活配置。
适配参数系统,简称DMS (data management system),它的主要功能是对系统参数进行配置与管理。因此,适配参数系统的设计主要包括配置文件格式的设计和用户界面的设计两部分。
适配参数包括通航飞行服务站的地理参数、雷达参数、ADS-B参数、飞行计划相关参数和多源航迹融合参数等。这些数据按功能模块划分,以配置文件的形式进行存储,在通航飞行服务站各软件模块启动时作为初始化信息使用。这些数据一般是Name-Value形式的数据,结构简单,不存在复杂的嵌套结构。目前常用的适配参数配置文件形式为INI文件和XML文件。表1给出两种文件形式的对比。其中,代码量和处理时间均是采用两层结构对控件信息进行描述的情况下,对100个控件信息多次进行解析和处理统计所得。
表1 INI与XML的对比
从表1中可以清晰地看出INI和XML 文件的优缺点。对于小数据量、层次结构简单的文件,XML 比INI文件需要的处理时间长。XML虽然具有多平台、支持数据格式嵌套等明显的优势,但是,是以增加代码量为代价的。XML数据格式的灵活性将大大增加用户界面实现的复杂度[5]。
而INI文件虽然不具有平台和数据格式的灵活性,但是完全可以支持Name-Value格式的数据配置,简单的数据格式也将使得用户界面的实现更容易。由于通航飞行服务站使用的是统一的Windows操作系统,所以不需要跨平台特性。Windows相关的API提供了良好的接口,将大大提高易用性,节省系统开销。因此,通航适配参数系统选用INI文件作为配置文件格式。
适配参数系统是一个具有操作界面的软件。界面配置的灵活性将直接影响着软件的灵活性。现行的适配参数系统都是固定的不可改动的界面。即一个配置文件对应一个操作界面,每一个配置参数对应一个唯一的控件和唯一的格式检查语句。现行的适配参数系统的数据处理流程如图1所示。
从图1可以看出,现行的适配参数系统不具有可配置性的主要原因是控件与配置文件内容一一绑定、格式和语法检查与控件一一绑定。这种形式导致对配置文件中的任何一项做了增、删、改等操作都将影响到界面的布局以及格式和语法检查模块接口设计。
图1 现行DMS的实现流程
为了解决该问题,基于自定义脚本的适配参数系统将界面控件信息写入自定义脚本,在软件启动时通过读取脚本进行控件的动态生成,实现了配置项选择区域的可配置。并同时采用CMFCPropertyGridCtrl控件进行配置文件的显示,实现了文件内容与控件的脱离。而文件内容的格式与和语法信息则写入格式控制脚本中,实现了文件格式校核可配置。图2是本文采用的自定义脚本方法实现适配参数系统的流程。
图2 基于自定义脚本的DMS实现流程
由图1和图2的对比可以看到,本文提出的基于自定义脚本的实现方法以脚本作为界面生成和格式校核过程中的信息来源,只需要进行脚本的更改即可改变用户界面以及数据格式限制方式[5-8]。基于自定义脚本的适配参数系统在配置和修改上十分灵活,适用于通航飞行服务站灵活多变的工作环境。
脚本是使用特定的描述性语言,依据一定的格式编写的文件[9]。脚本的格式是脚本解释器对脚本内容进行解析的依据。因此,脚本格式的设计关系到脚本的易用性以及脚本解释器的工作效率。
基于自定义脚本的适配参数系统的脚本分为两种:一种是用于界面生成以及界面控件响应的界面脚本;一种是用于对参数的格式和语法进行检查的参数格式脚本。考虑到系统中采用的都是INI文件,相关接口已经比较完善,因此,自定义脚本也均采用INI格式进行编写,即采用“节-键-键值”的层次结构。
自定义界面脚本的主要作用是生成用户界面。基于自定义脚本的适配参数系统的界面是通过动态创建控件生成的[10,11]。动态创建控件时,需要的信息包括控件ID、控件位置以及控件样式。在处理控件事件时,适配参数系统需要从界面脚本中获取与控件关联的子系统信息,因此,界面脚本设计如图3所示。它详细描述了控件 (CButton)的编号、位置以及与控件绑定的子系统信息。
图3 界面脚本
图3中,“001”是控件的编号; “Name”是与控件绑定的子系统名称;其余内容是控件的位置信息。由于控件的显示区域所占的屏幕比例是固定的,脚本中同样以百分比来限定控件的位置及大小以保证在不同的屏幕下界面布局正确。
自定义参数格式脚本对各子系统中的参数格式进行了详细描述。用户对各子系统的配置文件进行修改时,不一定能够按照正确的参数格式进行填写或修改。因此,对用户配置后的参数进行格式检查是十分必要的。自定义参数格式脚本能够提供正确的格式描述,对用户的操作进行检查及限定,从而保证用户所做的操作是正确有效的。
根据统计,通航飞行服务站中各子系统的参数分为字符和数字两种,参数格式要求大致分为取值范围限定、小数精度限定、长度限定和数据类型限定等。自定义参数格式脚本中,主要采用 “格式类型关键词/具体格式要求”的形式对参数的数据格式进行描述。具体来说,自定义参数格式脚本中采用 “Range”、“Accuracy”、“Length”、“Data-Type”等作为格式描述关键词,以分号作为 “具体格式要求”字段间的分隔标记来对数据格式进行描述。表2 是4类常用基本格式的脚本示例。
表2 常用基本格式脚本
在进行配置文件管理时,是以配置文件为单位,参数名称为子单元进行的。参考INI文件的格式,格式校核脚本以文件名为节名称,参数名称为键名,格式描述为键值的形式进行书写[6]。
(1)基本格式的脚本示例:适配参数系统中有取值范围、长度限制等几种基本格式要求。图4是取值范围限制的脚本示例。图4中描述的是:在配置文件“AIST_MapOriLonLat.cfg”中,参数 “Lon”和 “Lat”的取值范围分别为 [0,180]和 [0,90]。当用户对 “AIST_MapOriLon-Lat.cfg”文件进行参数配置时,如果配置后的经纬度参数“Lon”或 “Lat”不满足相应的取值范围则会出现告警信息。
图4 基本格式脚本
(2)组合格式的脚本示例:有时,某些参数的格式用基本格式脚本不能进行完整的描述。比如,对于数字类型的参数可能不只有取值范围限定还有长度限定和小数精度限定等要求。这时,可以采用组合格式脚本进行描述。实际上,对于字符型的参数,其格式要求只可能为长度限制或者固定取值选项两种,不存在组合情况。因此,组合格式是针对数字型参数提出的。其脚本形如:“Range/取值范围~数据类型/长度限定”。图5 是组合格式的脚本示例。图5 中描述的是:在配置文件 “AIST_MapOriLonLat.cfg”中,参数 “Para”应该是取值范围为 [0,180],数据长度不超过10的浮点数。
图5 组合格式脚本
(3)多字段参数格式的脚本示例:所谓多字段的参数是指由多个字段按照一定的格式组成的参数。比如,多源航迹融合软件中的 “Location”参数就是一个多字段参数。该参数记录的是初始地理位置信息,由3个取值范围不同的数字组成,分别表明经纬度和高度,它们之间用逗号隔开。可以看出,“Location”的格式要求无法使用基本格式脚本和组合格式脚本进行描述。这时,可以使用多字段参数格式脚本。
多字段参数格式的关键字为 “MixCombin”,格式为“MixCombin/字段名称1~分隔符名称1~字段名称2~分隔符名称2……”。其中,分隔符名称有预定义,程序可自动识别。多字段参数格式脚本的书写方法是:首先,对参数进行整体形式的描述;然后,分别以各字段名称为节名称对分字段格式进行描述。以 “Location”为例,其格式脚本如图6所示。
图6 多字段参数格式脚本
自定义脚本解释模块是将脚本最终转化为具体界面并使得系统具有格式校核功能的核心模块。根据自定义脚本的划分,脚本解释模块分为界面脚本解释模块和参数格式脚本解释模块。
基于自定义脚本的适配参数系统在软件启动时,通过读取界面脚本完成控件的动态创建从而完成界面的生成。控件的事件则通过读取脚本中的控件信息,根据信息内容进行响应处理。即界面脚本的解析分为两部分:界面的动态创建和控件事件的响应处理。
(1)界面的动态创建:界面脚本中详细记录了界面上控件的位置、编号等信息。按照界面脚本完成各控件的动态创建即可生成用户界面。图7为通过自定义界面脚本生成界面的过程。
图7 界面的动态创建流程
(2)控件事件的响应处理:当用户进行界面操作触发了控件事件的时候,系统获取控件的编号并以编号为关键字查找脚本获得相应的模块信息,进而对控件事件进行响应处理。图8为控件事件的响应处理过程。
参数格式脚本的格式是以配置文件名称为节名称,参数名称为键名,参数格式描述为键值进行编写的。因此,在校核参数格式时,首先以文件名称和参数名称为关键字进行查找,然后对获得的键值进行解析,进而获得参数格式的具体描述,完成对数据的校核。即格式脚本的解析分为两部分:格式信息的读取和格式描述语句的解析[12]。
(1)描述语句的读取:Windows系统中提供了读写INI文件的API接口,在已知文件路径、节名称、键名称的条件下,可以直接调用相关函数获取键值。在进行格式校核时,脚本文件路径已知,配置文件名称即为节名称,参数名称即为键名称,因此,可直接获取其键值,即格式描述语句。例如,用户对“AIST_MapOriLonLat.cfg”中的参数“Para”进行了修改,则描述语句的读取过程如图9所示。
(2)描述语句的解析:格式描述语句的格式为 “格式类型关键字/具体格式要求/长度限制 (可缺省)”。其中,“具体格式要求”以 “;”为分隔符进行字段的区分。按照该格式特点,对格式描述语句进行解析时,首先以 “/”为分隔符区分格式类型、具体格式要求及长度限制;然后以“;”为分隔符对具体格式描述进行拆分,从而获得完整的格式要求。格式要求在程序中被细化为取值范围、长度限制、固定取值范围等内容,从而可以对用户的操作进行格式检查。以格式描述 “Range/0;180/Max10”为例,其解析过程如图10所示。
图9 描述语句的读取流程
图10 描述语句的解析流程
脚本是适配参数系统界面生成及数据校核的基本依据。脚本的正确性直接决定适配参数系统能否正常工作。因此,脚本解释模块需要具有处理异常脚本的能力。脚本中常出现的错误包括大小写错误、不完整脚本描述和分割标识符错误等。目前,基于自定义脚本的适配参数系统对异常的脚本具有一定的容错机制,主要包括:
(1)不可识别的关键词:对关键词的大小写进行检测和转换,如果属于大小写错误,则系统直接进行纠正;否则,输出告警信息。
(2)不完整的脚本描述:对于控件位置信息等脚本不完整的情况,直接使用系统中的默认参数进行设置;否则,输出告警信息。
(3)不可识别的分割标识:依次遍历无法识别分割标识的脚本,若查找到可识别内容,则进行处理;否则,输出告警信息。
本文所提出的基于自定义脚本的通航飞行服务站适配参数系统的开发平台为Windows操作系统,编程语言为VC++。本文所提出的方法在上述平台上成功通过测试,运行良好。该适配参数系统可以实现界面控件、参数数据以及参数格式校核功能等多项内容的灵活的配置。表3是添加10个界面控件及相应控件事件响应时,传统方法与本文方法工作量的对比。表4是为10个参数增加取值范围限制时,传统方法与本文方法工作量的对比。表3和表4中的数据均是经过多次测试平均而得,并且只表示大略数量上的对比,不对应具体数值。
表3 界面修改工作量对比
表4 格式修改工作量对比
为适应通航飞行服务站灵活可配置的要求,本文提出了一种基于自定义脚本的适配参数系统的实现方法,并在自主研发的通航飞行服务站中使用。由实际测试结果可知,该系统完全满足功能需求,在传统的适配参数系统的基础上,大大地提高了可配置性,使用十分灵活,与通航飞行服务站的特点十分契合。基于自定义脚本的方法对类似的工程应用具有一定的参考价值。在下一步工作中,我们将进一步优化脚本的解析方法,提高脚本解释模块的容错能力。
[1]ZHUANG Wenwu,LIU Guangcai,LI Zhangping.Countermeasures to accelerate the development of general aviation in China[J].Comprehensive Transportation,2008 (7):36-39(in Chinese).[庄文武,刘光才,李章萍.加快我国通用航空业发展的对策 [J].综合运输,2008 (7):36-39.]
[2]CHEN Xin,LI Cheng,XU Dinghai,et al.Research of general aviation service station function and composition [J].Avionics Technology,2013,44 (2):10-13 (in Chinese).[陈昕,李橙,徐丁海,等.通用航空服务站功能与组成研究[J].航空电子技术,2013,44 (2):10-13.]
[3]YAO Jiao.Synopsis of data management system in ATC3000[J].Computer CD Software and Applications,2014 (10):125-127 (in Chinese).[姚姣.ATC3000系统数据管理子系统的简介 [J].计算机光盘软件与应用,2014 (10):125-127.]
[4]ZHANG Xu.Research on monitoring technology of air traffic control[D].Chengdu:Southwest Jiaotong University,2011(in Chinese).[张旭.民航ATC 系统监控技术研究 [D].成都:西南交通大学,2011.]
[5]FENG Jun,SHENG Zhenyu,TANG Zhixian.Web interface automatic generation method based on XML schema[J].Computer Engineering and Design,2013,34 (4):1498-1503 (in Chinese). [冯钧,盛振宇,唐志贤.基于XML Schema的Web界面生成方法 [J].计算机工程与设计,2013,34 (4):1498-1503.]
[6]ZHANG Jing,LI Xianbo,LI Ke,et al.An intelligent sequential operation scheme based on script language[J].Auto-mation of Electric Power Systems,2012,36 (6):112-115(in Chinese).[张静,李先波,李科,等.基于脚本语言的智能程序化操作方案 [J].电力系统自动化,2012,36 (6):112-115.]
[7]NING Aijun,MAN Chunlei,YANG Guanglei.A method of software reuse based on XML [J].Software Guide,2009,8(6):38-40 (in Chinese).[宁爱军,满春雷,杨光磊.一种基于XML的软件复用方法[J].软件导刊,2009,8(6):38-40.]
[8]LI Zhihua,SHEN Zuyi.Design of general test platform for RFDI based on description language [J].Computer Engineering and Design,2008,29 (4):1021-1024 (in Chinese).[李志华,沈祖诒.基于脚本语言的雷达故障诊断通用平台设计 [J].计算机工程与设计,2008,29 (4):1021-1024.]
[9]ZHANG Jinsheng.An approach for development of scriptdriven application system [D].Kunming:Yunnan University,2010 (in Chinese).[张锦盛.基于脚本驱动的应用系统开发方法 [D].昆明:云南大学,2010.]
[10]ZHANG Chengzhong,LI Min.Research of the application of the script language usage in the complicated game UI’s interface design [J].Information Technology and Informatization,2007 (3):48-50 (in Chinese).[张承忠,李敏.脚本语言在复杂用户界面制作中的应用研究 [J].信息技术与信息化,2007 (3):48-50.]
[11]ZHNAG Jianlei,WU Wenjiang.The implementation of CNC customizable interface based scripting language [J].Modular Machine Tool & Automatic Manufacturing Technique,2011(1):50-53 (in Chinese).[张建磊,吴文江.基于脚本语言的数控系统可定制界面的实现 [J].组合机床与自动化加工技术,2011 (1):50-53.]
[12]SUN Jing,TAN Xiaohui,ZHAO Huiqun,et al.Research and implementation of ball games scenario interpreter [J].Journal of Computer Applications,2010,30 (3):612-614(in Chinese).[孙晶,谭效辉,赵会群,等.球类比赛的脚本解释器的研究与实现 [J].计算机应用,2010,30 (3):612-614.]