(中国飞行试验研究院 测试所,西安 710089)
随着航空技术的飞速发展,现代飞行器的集成度和复杂度越来越高[1-2],传统的单架次单科目试飞远不能满足飞行试验的需求,多科目试飞已经成为飞行试验发展的必然选择。多科目试飞需要的参数量大、采样率高[3-4],为解决这一问题,当前飞行试验已广泛采用网络化测试架构,在网络化测试架构下采集器将采集的数据以网络包的形式发送至测试系统,多科目需要处理的参数就分布在这些网络包中[5]。由于数据以网络包的形式在测试系统上传输,所以可以使用机载实时数据处理系统来实时处理数据,这会极大地缩短获取结果数据的时间。但是实时处理设备是机载嵌入式设备,对数据处理的性能有限,如果没有高效的多流多科目数据处理算法,实时处理时数据就会发生错误从而得到不到正确的处理结果[3]。对于当前多数据流多科目数据处理的需求,如何在多数据流的情况下实时处理多个科目,在机载实时处理设备性能允许的范围内,以最大的效率处理数据,是飞行试验实时数据处理中必须解决的一个关键问题。
飞行试验是武器装备设计、生产、试验的三大环节之一[6-7],现代飞行器在飞行试验阶段需要处理性能、品质、发动机、雷达、航电等众多试飞科目的数据,传统单架次单科目的数据处理方式不能满足众多试飞科目的需求,为了提高试飞数据处理的效率和及时性,多科目试飞数据处理成为飞行试验的必然选择[8]。另外由于武器装备的试飞周期比较紧,多科目数据处理有助于加快飞行试验的进度,缩短试飞周期。
多科目试飞数据处理需求的测试参数多、采样率大,某型飞机在进行飞行试验时需要采集一百多条数据流,处理三十多个科目,共计四万多个参数、科目的采样率从8到2048不等[9-10]。为了解决参数个数多,采样率高的问题,现在飞行试验中广泛采用网络化测试系统架构。网络化测试系统架构下,采集器将采集的数据以网络包的形式发送至测试系统,多台采集器会发送多条网络数据流,多科目需要处理的参数就分布在这些网络数据流中[11-12]。
为提高数据处理的效率,众多型号在飞行试验过程中使用了机载实时数据处理系统,该系统接收机载测试系统的网络包数据,然后根据多科目处理参数进行数据处理并将结果写入结果文件[13]。机载实时数据处理极大地缩短了数据获取的时间,但是由于多科目处理时参数数量多且采样率大,而机载实时数据处理设备的性能有限,所以需要设计高效的多流多科目数据处理算法,使得数据处理设备能够满足多流多科目数据处理的需求。多流多科目数据实时处理如图1所示。
图1 多流多科目数据实时处理
根据实际试飞数据处理的情况,总结出多流多科目数据处理有如下几个特点:
1)机载测试系统有多条网络流,每条数据流由连续的网络包组成,每个网络包有各自独立的KEY值,该值是该网络流的唯一标识;
2)网络包的带宽比较高,例如某型机可达50~60 Mbps,在实时处理时需要快速处理网络包数据,否则就会发生错误;
3)每个科目都有各自的参数组,实时处理时需要根据每个科目的参数组处理数据,处理完成后将科目需要的结果发给课题;
4)每个科目需求的采样率是一固定值,但科目之间的采样率不完全一致;
5)同一参数在不同科目中需要处理的采样率不完全一致,但参数的采样率和课题需求的采样率一致;
6)多科目需要的参数可能出现重复,例如:气压高度、马赫数等飞机基本参数几乎所有的科目都需要进行处理。
为解决多流多科目实时处理时的效率问题,设计多流多科目实时数据处理算法,最简单的办法是将多科目数据按照单科目数据处理的方法逐个处理,具体做法是:读取网络数据包数据,处理第一个科目的参数,第一个科目的参数处理完后处理第二个科目的参数,以此类推,直至处理完所有的科目,然后读取下一个网络包数据进行同样的处理。按照单科目处理方法循环处理存在如下几个方面的问题:
1)算法的处理效率比较低,对于多科目中的重复参数处理多次,浪费了宝贵的计算资源。
2)单科目处理完后需要写入结果文件,频繁地进行I/O操作,CPU的利用率不高;
3)数据处理时大量时间花费在对参数的轮询查找上了,浪费了时间资源,难以保证数据处理的实时性。
因为多科目参数中有部分参数会重复出现,所以一个高效的办法是:将多科目参数合并成一个参数列表,合并参数列表中包含所有的多科目处理参数且参数没有重复,在处理时按照合并后的多科目参数进行实时处理,处理完成后将数据进行分流得到各科目的处理结果。采用多科目数据合并处理的有如下几个优点:
1)多科目参数中重复的参数只用处理一次,极大地提高了实时数据处理的效率;
2)可以通过合理设置数据缓存的办法,减少I/O操作,提高CPU的利用率,在同等设备性能的情况下可以处理更多的参数;
3)数据处理时只需要对参数进行一遍轮询查找,节省了数据处理的时间,提高了实时性。
由此可知:采用“合并-处理-分流”方法处理多流多科目数据,能够有效提高数据处理的效率、保证实时性,所以将其作为机载实时数据处理时的多流多科目处理算法。
为解决多数据流情况下试飞科目的快速增长与实时数据处理效率之间的矛盾,设计并实现多流多科目实时数据处理算法,在保证数据处理实时性的前提下实现多科目数据的高效快速处理。按照“合并-处理-分流”的方法,首先将多科目处理参数按照参数基本信息进行合并,形成合并参数列表,在合并参数列表中参数不会重复且没有缺失,同时该列表是实时处理时需要处理的参数列表;然后在实时处理时,读取并分析每一个网络包数据,对合并参数列表中的参数进行码值提取和物理量转化,通过合理设置缓冲区,将处理的结果数据存入缓冲区中;最后在处理完成后,按照数据分流的方法,将多科目中的每个参数从缓冲区中读取出来写入多科目的结果文件中,至此完成多流多科目数据实时处理。该算法的整体结构如图2所示。
图2 多流多科目数据处理算法结构
合并多科目处理参数有助于减少实时处理时对于多科目参数中重复参数的重复处理,所以数据合并时以减少参数重复为主要合并原则,多科目参数合并的方法是:
1)剔除多科目参数中重复的参数,保证合并参数列表中每个参数只出现一次,并且没有遗漏;
2)对于同一参数的不同采样率,取最大的采样率作为合并参数列表的采样率;
最终形成的合并参数列表包含的参数为P1、P2、…、Pn,采样率分别为S1、S2、…Sn。此外为了在数据处理时准确定位某个数据包里要处理的参数,还需要分析合并参数列表中每个参数所属的数据包。具体做法是:
1)分析机载信息配置文件,读取网络包的参数信息,将参数名和数据包一一对应,找出机载测测试系统的网络包中都包含哪些参数;
2)按照合并参数列表的参数名查找每个参数所属的数据包,形成待处理数据包列表,并详细列出每个待处理数据包中包含的待处理参数。
在实时数据处理时,如果对于每个参数进行解算完成之后直接写入结果文件,这样会频繁的进行I/O操作,降低了CPU的利用率,所以需要设置缓存来存储数据处理的中间结果,处理完成后再进行存储。为了方便处理及实现,以一秒的结果数据为单位进行缓存,设计图3所示的缓冲区,该缓冲区为一个数组,数组前三个元素存放时、分、秒信息,后面的元素存放合并参数列表的处理结果。在实时数据处理时,将一秒钟数据处理的结果放入该缓存中,当缓冲区存满后,对数据进行分流写入多科目的结果文件中,然后清空缓存区继续存储下一秒的数据。
TIME……
图3 实时处理缓冲区结构
合并参数列表中的参数处理结果在缓冲区的存放的原则是:
1)每个参数按照采样率的大小占据缓存中的连续元素,参数Pi的采样率为Si,那么该参数在缓存中占据Si个连续元素;
3)每个参数的缓冲区的元素按序存放采样时刻的参数值,例如参数Pi的采样率为8,那么这8个元素依次存放000、125、250、375、500、625、750、875毫秒时刻的数据。
缓冲区设置完成之后对数据进行实时处理,处理过程主要是在网络流中找出待处理数据包和待处理参数,然后进行码值提取及物理量转化,最后将结果写入缓存中,具体过程如图4所示。
1)读取网络包数据,判读网络包的KEY值,分析其是否属于需要处理的网络包,若不需要处理,则跳过该数据包读取下一个网络包;
2)分析数据包处理列表,找出需要处理的网络包都包含哪些待处理参数,详细列出处理参数的信息,包括参数名、采样率、校准方式等
3)对于每一个需要处理的参数,在网络包中进行码值提取及物理量转化。码值提取可通过直接取值的方式获取,一般包括单字提取、双字提取、三字提取和四字提取;物理量转化是将码值按照参数校准的方式转化成物理量,校准方式一般包括点对校准、直线校准、双曲线校准、多项式校准等;
4)判断该网络包的时间,分析待处理的参数属于缓存中的位置,将处理参数的结果按照参数在缓存中的存放方法放在缓存中;
5)读取下一个网络包,重复进行上述操作,完成数据实时处理。
图4 实时数据处理流程
数据处理时将处理结果放入了缓存中,但课题需要的是单个科目的结果文件,所以需要将缓存中的数据写入结果文件中。缓存中存储的是合并参数列表中的数据,而要得到多课题结果文件就需要对数据进行分流。在数据缓冲区的数据存满后进行分流并将结果写入课题需求的结果文件中,数据分流的方法是:
1)分析每一个科目的参数在合并参数列表中的位置,比较每一个科目参数需求的采样率与综合参数列表中该参数的采样率,用综合参数采样率除以需求采样率得到缓存中的取值步长。
2)分析第一个科目的参数,按照该科目待处理参数的顺序,依次在缓冲区中进行取值,先取第一个时刻的数据,然后根据步长依次取下一时刻的数据,把该秒的参数值都写入文件中;
3)按照步骤2)的方法处理其他科目的参数,将所有科目数据分流完成并将处理的物理量写入结果文件中;
4)改变缓冲区前三个元素的时间,将秒数加一,然后该缓冲区存储下一秒的处理数据,当缓冲区存满后,重复进行上述操作,完成数据分流。
经过“合并-处理-分流”的过程,所有科目中需求参数都已完成处理,每个科目都能得到正确的处理结果,并且多科目中的参数都不会被重复计算,这样节省了时间和空间资源,保证了数据处理的实时性。
利用C语言实现了多流多科目数据实时处理算法,应用该算法处理多流多科目数据,在实验中使用某型号的机载实时数据处理设备为系统运行环境,以某机载测试系统发送的网络流为处理对象,该系统共有128条网络流。数据处理时共需要处理9个试飞科目,共计1 814个处理参数,多科目的名称、采样率、参数个数信息如表1所示。
表1 多科目参数信息
在多科目处理参数中,气压高度是所有科目都关注的参数,以该参数作为实验结果准确与否的判断依据。按照“合并-处理-分流”的方法处理多流多科目参数,合并后的参数列表中共有1 258个处理参数,每个参数的采样率不等。实时数据处理完成后,在每个课题的结果文件中分析气压高度的数值,发现所有课题的气压高度数值相同。气压高度处理结果如图5所示。
图5 气压高度处理结果
由数据处理的结果可知,多流多科目数据处理算法的处理过程正确,对参数合并后能有效减少数据处理时的参数个数,并且能够得到准确的处理结果。基于该算法设计的实时数据处理系统可应用于多个型号中,有助于提高数据处理的效率,加快试飞进度。
针对多流多科目数据处理的需求,提出了一种基于“合并—处理—分流”方法的多流多科目实时数据处理算法,首先将多科目数据处理参数参数名、采样率等信息进行合并,形成一个合并处理参数列表,该参数列表包含了处理参数的基本信息;然后在实时处理时按照合并参数列表对网络数据流进行实时处理,并将数据处理的结果存储在缓存中;处理结束后通过书分流的办法获取处理结果,并将结果写入课题需求的结果文件中。在试验总测试了该算法的有效性,实验结果表明,该方法能有效解决多流多科目数据处理的问题,在得到准确数据处理结果的同时大幅提高数据处理的效率。