杨绚,魏小勇,崔德龙
航空工业第一飞机设计研究院,西安 710089
由于舰载机空间布局紧凑,飞控系统机载设备可采用集中式的硬件架构方式,将各个飞控子系统集中布局,采用一个总线接口模块端(BIM)板与多个控制与管理模块端(CPM)板组合的方式实现对飞控系统计算机的架构。飞控总线接口设计是集中式飞控计算机的重要组成部分,负责外部设备与飞控计算机之间的数据传输,外部设备向飞控计算机输入数据用于飞行控制律的计算,得到的控制指令通过总线接口发送至相应的控制器。飞控数据总线接口软件用以实现外部传感器数据、飞机控制数据等的传输和更新,这些数据与其他应用软件,如余度管理、机内自检、飞行管理、飞行控制律等软件都有数据交联。因此,为保证数据的完整性和可靠性,对飞控数据总线接口的策略研究是十分必要的。
近年来,许多学者开展了机载总线数据传输方面的研究。宁新建[1]讨论了航空总线的总线特征、数据格式、通信过程控制、总线接口等;逯计划[2]介绍了传统总线和新一代总线技术的几种典型技术,分析了其优势和缺点;孟锐等[3]介绍了几种常用的航空总线,并重点介绍了ARINC659总线;马贵斌等[4]介绍、比较和分析了国内外现阶段应用的几种军用数据总线的构架及其优缺点;ARINC659总线[5-6]具有容错性、高可用性和高完整性的特点;张锐等[7]利用ARINC659 作为余度管理软件中数据交叉传输的总线,以提高飞行控制计算机系统中的可靠性;张阿莉等[8]针对新型飞控采集器采集数据流数增多、试飞模式改变的问题,对原有飞行控制系统总线数据处理软件进行优化设计,软件有效解决了多流、多表号飞行控制系统总线数据处理问题;陈新华和支高飞[9]描述了利用通用采集系统板卡搭建模拟飞控数据测试系统,并通过开发模拟飞控信号隔离器实现了被试设备与采集器之间的交联; Yedavallir等[10]指出数据传输中节点的瞬时故障、数据损坏、传输错误或编码/解码错误都可能会引起数据丢包;闫莉和王勇[11]采用电子设计自动化(EDA)方法,设计并实现了符合机载串行数字传输的某型飞机机载总线多通道模块接口;邢达波等[12]对某型飞机网络化架构中出现的数据丢包现象进行分析,通过对KAD/SWI/108进行重新软件编程,消除了数据丢包现象;张毅和张勇[13]介绍了某型号飞机飞控系统试验的数据采集处理系统软件,包括数据采集、数据存储、数据分析及事后处理;靳鸿等[14]针对机载数据记录仪总线通讯存在数据传输不稳定、数据失真等问题,提出一种1553B总线接口设计与实现方法,并进行了1553B总线接口硬件设计,使记录仪能够完整、准确地接收和响应消息数据;刘明等[15]设计了一种数字飞控采集器,符合机载环境要求;李声飞[16]为提高数据传输可靠性,提出一种适用于机载平台的总线接口,有效降低了通信误码率,提高了数据传输的可靠性和鲁棒性;付莉和赵民[17]设计了一种数据通信系统实现无人机系统的飞行操纵和机载任务设备控制;宋军强等[18]考虑航空发动机分布式控制系统中丢包问题,提出增益重构补偿策略,保证了存在数据丢包的发动机分布式控制系统的性能和稳定性。刘语乔等[19]为了解决RS422总线数据处理问题,基于某飞机平台,研究了总线数据处理各个环节的关键技术问题;王凯等[20]针对机载航空设备通信特点,介绍了一种可配置的多通道通信软件设计,提供了简单的接口层以便应用软件开发,易于扩展和部署。
外部设备发送数据至串行通信设备,串行通信设备每个周期将接收的数据写入到BIM端,并采用ARINC659总线进行BIM端到CPM端的数据更新,然后飞控软件在CPM端读取数据并解析。由于外部设备、串行通信设备、ARINC659总线、飞控软件等的运行频率各有差异,会导致数据包不完整甚至丢失的现象,本文针对数据接口的读/写冲突问题进行研究,分析不同原因导致的不同实验现象,并提出相应的解决方案。
图1所示为飞控软件数据输入接口原理图,外部设备(如惯性测量组件、作动器控制器、组合导航、差分卫星接收机等)以不同的频率(200、100、50、25 Hz等)发送数据,对应的串行通信设备以字符或块为单位每5 ms接收并处理外部设备输入的数据,每20 ms将接收到的外部数据发送到659数据交换区BIM端输入数据区,659背板总线每2.5 ms完成BIM端输入数据区到CPM端输入数据区的数据更新,最后由通用处理模块(软件)每20 ms将CPM端输入数据区的数据接收并处理,随后经过余度表决、数据处理等模块,进入到飞行控制律模块。
图1 数据输入接口原理图Fig.1 Schematic diagram of data input interface
飞行控制与管理接口软件具有如下特点:
1) 外部设备的数据刷新频率不同。
2) 串行通信设备都以5 ms为周期接收数据,并以20 ms为周期将数据发送至659背板总线的BIM端。
3) 采用659背板总线进行BIM端到CPM端的数据交换,2.5 ms进行一次,刷新速率快。
4) 通用处理模块以20 ms为周期处理CPM端的数据。
以惯性测量组件的输入为例,如图2所示,惯性测量组件设备的发送频率为200 Hz,即5 ms发送一次,串行通信设备每5 ms接收一次,放入缓冲区,每20 ms接收约4个数据包,将其发送至ARINC659总线的BIM数据存储区,通过659背板总线将BIM数据存储区的数据更新至CPM端规定的存储区内,然后通用处理软件即可对CPM端存储区内的数据进行采集并处理。
图2 惯性测量组件数据输入原理Fig.2 Principle of data input for inertial measurement components
在时钟完全匹配的情况下,如图3所示,在一个20 ms任务中,串行通信设备在t0时刻将输入数据写入BIM数据区,通用处理模块在t1时刻从CPM数据区读取数据,数据写入和读取的速率能够完全匹配。在每个周期任务里,飞控软件都能够获取设备的最新数据,用于之后的控制律计算。
串行通信设备每20 ms将数据发送到BIM输入数据区,而CPM也是每20 ms处理CPM输入数据区的数据,659背板总线进行BIM到CPM的数据传输时间相对于串行通信设备和CPM周期运行时间很短,可忽略其影响。串行通信设备发送数据周期和CPM端的运行周期一致,但是两个设备采用各自的时钟,可能会出现时钟周期长短不一致或者时钟漂移,引起数据读/写冲突,实验证明会出现丢失数据包的现象,因此软件运行所处理的数据的时效性和完整性得不到保证,这对实时性要求高的飞控系统来说是不能接受的;另一方面,对于数据更新较慢的外设而言,通用处理软件因无法判断存储区中数据的是否被更新,可能会重复解析内存中的数据,对上述2种实验现象,进行分析并给出解决方案。
图3 数据读/写时序图Fig.3 Sequence diagram of data read/write
针对飞控系统数据不完整传输和数据重复解析两类问题展开研究。
不同的外设数据刷新的频率不一样,惯性测量组件5 ms刷新一次,串行通信设备每20 ms将采集的数据发送至BIM端,通用处理模块(软件)在CPM端采集到的数据总是更新的数据包;而数据链通信每40 ms刷新一次数据,通用处理模块(软件)依然是每20 ms访问一次CPM端的数据区,如图4所示,这样会使得软件将CPM端数据链存储区的数据处理两次,这无疑浪费了软件的运行时间。
理想情况是在写入BIM数据区的时钟和读取CPM数据区的时钟完全同步的前提下,工程实践中可能会出现时钟偏差,如图5所示,“写入”和“读取”的时钟偏差为Δt,在试验时发现数据区会出现未更新完全的情况,即在“写入”未完时,进行“读取”,导致数据包中前半部分数据为更新的数据,后半部分数据为前一拍处理过的未更新的数据。但是通用处理模块(软件)并不能够识别数据包是否为全新状态,只要存储区中有数据,软件就会对其进行处理。
为避免上述读写同时进行和对数据包重复解析的问题,在串行通信设备将数据包写入BIM数据区时,在数据包的末端增加数据包编号,以判断数据区中的数据包是否为完全更新的数据包。此外,为明确数据包中有效数据的长度,在数据包前增加了两个字节存放“数据长度”变量。如图6虚线框中所示,为优化之后的BIM端/CPM端数据存储区的格式。
图4 数据链数据写入/读取时序图Fig.4 Sequence diagram of DTL read/write
图5 数据读取/写入冲突Fig.5 Conflict of data read/write
以惯性测量组件为例,如图6所示,惯性测量组件设备每5 ms更新一次数据,每个数据包为25个字节,串行通信设备每20 ms接收4个数据包,即100个字节,发送至BIM端,在数据存储区预留120个字节(每个接口通道的数据区都做相应的预留)作为每个周期的包数据存储,包数据之前的2个字节存放本包数据的有效长度(不大于120个字节),包数据之后的4个字节存放包编号。每次数据写入时,包编号加1,从0x00000000→(+1)0x00000001→…(long long later)…→0xFFFFFFFF循环计数。软件在运行时,识别到包编号大于上拍处理过的数据包的包编号,就对本包数据进行处理,否则,不进行处理,这样就避免了对数据更新不完整的数据包进行处理或者对处理过的数据包进行二次处理。
图6 BIM端/CPM端数据存储区格式Fig.6 Format of data storage in BIM/CPM
BIM端数据存储区每20 ms会被刷新一次,CPM处理软件每20 ms会读取数据存储区的数据并进行处理。实际上,两个不同的时钟下,同样的20 ms周期可能会略有偏差,写入BIM端的时钟可能比读取CPM端数据的时钟快,也可能会慢。
1) 当CPM端的时钟略快时,如图7(a)所示,在t0时,向BIM端写入数据;在t1时,通用处理软件在CPM端读取数据;t2时刻,再次在CPM端读取数据,但是此时数据区并未更新,会出现重复读取的现象。由于在2.1节中引入了包编号,所以可以通过包编号的大小来判断是否为更新的数据包,以决定是否需要处理数据。
2) 当BIM端写入数据的时钟略快时,会出现向BIM端写入两次数据包时,CPM端的数据才被处理一次。如图7(b)所示,t0时刻在CPM端“读取”,t1时刻在BIM端写入数据,由于两个20 ms之间有偏差,t2时刻又一次在BIM端写入数据,导致上一包数据未经处理就被覆盖,t3时刻在CPM端读取数据时,已经丢失了t1时刻写入的数据,所以在BIM端设置一个数据存储区是不能够保证数据的完整性和时效性的,因此在ARINC659总线BIM端和CPM端分别设置2个相同的数据存储区,如图8所示。将t1时刻和t2时刻的两包数据分别写入两个存储区,t3时刻,在CPM端读取时,一个周期任务内对两包数据进行解析,这样就避免了因时钟偏差引起的数据丢包现象。
图7 时钟大小偏差读写时序图Fig.7 Read and write sequences determined by clock values
图8 BIM端/CPM端数据存储区Fig.8 Data storage in BIM/CPM
上述情况都是在串口通信设备发送数据包完整时讨论的,即每次从ARINC659总线CPM端读取的数据都是完整的数据包。以惯性测量组件为例,串行通信设备每20 ms接收4个数据包即100个字节的数据,将其发送至BIM端,在CPM端读取的数据包也为100个字节。但是在实验中监控包编号,仍会偶尔出现丢失数据包的现象,这是因为未考虑数据传输过程数据包是否完整,如图9所示,具体分析如下:
1) 外部设备传输数据以字符为单位一个字节一个字节的发送数据,或者是以数据块为单位发送数据,由于时钟偏差的存在使得不能在20 ms 内准确地发送理论长度的字节数。
2) 串行通信设备每20 ms将接收的数据包发送至BIM端,而当一个新的20 ms周期到达时,设备数据区的数据长度可能会大于或者小于理论数据长度(如惯性测量组件应发送100个字节)。
3) 向ARINC659总线BIM端写入数据是需要一定时间的,通过ARINC659总线向CPM端传输数据也是需要时间的(2.5 ms)。
4) 外部设备、串行通信设备、ARINC659总线、软件周期任务所遵循的为不同的时钟,不可避免的会有偏差。
综合上述几种情况,认为每20 ms运行周期任务在CPM端读取数据时,CPM端数据区中的数据包可能会小于理论长度,是不完整的数据包。
以惯性测量组件为例,如图10所示,假设当20 ms到达时,串行通信设备中只接收到60个字节的数据,将这些数据打包发送至BIM端数据存储区A1,下一个20 ms到达时,串行通信设备除接收到另一包完整数据之外,还接收到上一包的余留数据,有140个字节,而数据包最大长度只有120个字节,分两个数据包发送,将前120个字节打包发送至数据区A2,剩余20个字节打包发送至数据区A1,此时在如图7(b)所示的情况下,即在CPM端未来得及读取数据区A1中的数据时,数据区A1已经被新的数据包所覆盖,故而两个数据存储区仍然不能够满足工程需求,为此,最终将BIM端和CPM端的数据存储区都设置为3个,如图11所示,采用3个数据存储区可以避免上述数据区被覆盖造成的数据丢失现象。
此外,通用处理软件还需对3个数据区的读取队列进行设计。每周期对CPM端数据区的3个包进行扫描,如果包编号大于上周期解析的数据包包编号,将本包数据拷贝至全局数组,因此每个周期最多的情况是将3包数据均拷贝至全局数组,最少的情况是没有一包为新的数据包。之后,根据全局数组中存储的数据包个数以及每个数据包的包编号,判断数据包的先后到达顺序,随后数据解析。
图9 数据传输过程Fig.9 Process of data transfer
图10 BIM端/CPM端数据区覆盖Fig.10 Data overwriting in BIM/CPM
图11 BIM端/CPM端数据区设计Fig.11 Design of data storage in BIM/CPM
综上所述,对飞控软件接口数据读/写的冲突分2种情况:① 时钟偏差引起的写入速度小于读取速度;② 时钟偏差或数据发送不完整引起的写入速度大于读取速度。综合考虑不同情况下的解决方案,分析得到写入/读出的过程。接口数据写入BIM端的流程如图12所示,每个周期任务内将CPM端数据读取至软件中所定义的存储区即可进行解析,读取数据的流程如图13所示。
图12 接口数据写入BIM端流程Fig.12 Procedure of writing data from interface to BIM
通过在某型舰载机飞控软件接口数据处理模块中试验,并在试验中监控,证明采用上述方法没有发生丢包现象和重复解析。表明此方法能够有效解决数据包不完整和数据重复解析的问题。
图13 读取CPM端数据流程Fig.13 Procedure of reading data from CPM
通过上述2种方法来解决总线数据的时效性和完整性:① 重新设计数据包格式,增加数据包长度和数据包编号信息;② 是增加数据存储区空间,将1个存储区变成3个存储区。这样无疑增加了空间和时间的开销。
1) 空间开销
增加数据存储区的方案使得飞控计算机与外设通信的每个通道的存储空间都会增加,一方面在659总线的BIM端和CPM端都需要增加2个数据包的存储空间,另一方面在解析数据包时也需要增加2个数据包的全局占用空间。这些都会增加软件的空间开销,但是这些空间开销能够满足舰载机飞控系统的空间总要求,是一种以牺牲空间来保证数据完整性的方法。
2) 时间开销
增加数据存储区的解决方案,使得软件在每个周期内会增加对数据存储区的包编号的扫描过程以及对数据包的先后顺序的判断过程,但是最终解析数据也仅解析最新一包数据。在一般情况下,数据包发送的时间频率与通用软件解析的时间频率基本保持一致,每一个周期只会扫描到一包有效数据进行解析;在数据包发送阻塞的情况下,可能会导致一个周期收到2包甚至3包有效数据,此时需要对数据包的先后顺序进行判断,从而得到最新的有效数据;另一方面,重新设计数据包格式,增加数据包编号,在有些周期没有新的数据包到达的情况下,省去对数据的重复解析,也能够节省一定的时间开销。所以,对于时间开销的增加更多的是在数据包发送阻塞时造成的,但是增加的开销时间也极短暂,对于以20 ms为周期的飞控实时系统也是能够满足的,是一种以牺牲时间保证数据时效性和完整性的解决方法。
1) 在数据写入速度大于读取速度的情况下,设计了数据缓冲方案,实际应用中监测数据包的帧计数,有效解决了舰载机飞控系统数据传输过程中各种因素导致的数据包丢失问题。
2) 在数据写入速度小于读取速度的情况下,给出了包编号的判断方法,有效避免软件中数据重复解析、浪费运行时间的问题,上述方法可以作为机载软件工程师在飞控软件接口实际应用中的参考。
3) 数据存储区的设计,增加了空间的开销,数据包格式的设计和数据存储区的设计,一方面在无新数据包的周期能够节省时间开销,在同时有2~3个数据包到达的周期又会增加时间开销,但是舰载机飞控系统的硬件存储和软件周期能够允许这样的空间开销和时间开销,以一定的时间和空间牺牲来保证数据的时效性和完整性。
4) 对于飞控软件的接口,可以进一步将接口软件做到模块化和通用化,提高接口软件在不同型号飞机上的可移植性。