面向交会对接任务的高可靠应用软件设计方法
2013-05-14张维瑾陈朝晖
张维瑾 王 青 陈朝晖
1.北京控制工程研究所,北京 100190 2.北京航空航天大学,北京 100191
嵌入式软件已成为航天型号产品的重要部分,航天型号的许多关键、复杂的功能都由软件来实现。在载人航天工程、探月工程、大运载火箭和深空探测等重大航天型号工程中,软件发挥的作用越来越大。航天嵌入式软件运行环境苛刻,其正确性、可靠性、安全性和容错性尤其重要[1]。
软件可靠性是在规定的条件和时间内,软件不引起系统故障的能力,是软件工程和可靠性工程相结合所产生的一个新分支。在软件开发过程中软件可靠性受到各种不确定因素的影响。另外,软件可靠性不仅与软件本身存在的设计缺陷有关,而且与系统输人和系统使用有关。软件可靠性是软件质量特性中的重要特性和关键因素[2]。
1 制约交会对接软件不可靠因素
空间的交会对接是指2个航天器于同一时间在轨道同一位置以相同速度会合并在结构上连成一个整体的过程。从距离上讲是一个由远及近的过程,从精度上讲是一个由粗到精的过程,包括两部分相互衔接的空间操作:空间交会和空间对接。
空间交会对接控制算法复杂、控制精度较高、制约性较强,由于存在导航、制导过程,控制对象多、算法复杂且受制于时间和位置的约束,过程不可重复,使得系统存在多种不可预计的控制效果,就需求系统具有更高的可靠性和鲁棒性。因此,控制系统嵌入式应用软件对高可靠性的需求格外迫切[3]。
而交会对接系统方案主要通过嵌入式应用软件来实现,可以说它是系统的灵魂所在,其环境和任务需求对控制软件提出了较高的可靠性需求,直接关系到交会对接任务的成败。
交会对接嵌入式应用软件属于计算密集型,其算法复杂,代码量巨大,约十几万行。接口和任务功能繁多,逻辑关系复杂。这给研究其工作过程的软硬件失效模式和失效机理带来了困难。进一步归纳可知,软件具有如下特点:
1)实时性要求:由于控制系统存在较高的实时性要求,这就要求程序必须在约定的控制周期内完成所规定的任务。推理和计算的正确不仅依赖于逻辑的正确,而且依赖于结果产生的时间及其顺序;
2)高可靠性要求:系统发生异常情况下,要及时正确地处理错误故障;
3)运行环境恶劣:空间环境导致程序内存被异常修改,程序无法正确执行;
4)资源受限:嵌入式计算机的处理器和内存都受到严格的限制,在资源受限的前提下,软件既要保证功能的完整性和正确性,又要保证系统的安全性和可靠性;
5)结构复杂:嵌入式软件必须具有及时处理随机故障事件的能力,同时,所有运行程序与外部设备联机运行。控制系统输入输出的设备数量多、类型各异,通信方式不同,协议复杂、实时性要求高。这些都使嵌入式软件系统结构复杂,安全性和可靠性问题突出。
2 软件可靠性设计方法
2.1 避错方法
在软件设计过程中,为实现避错设计采取了一系列措施。这些措施围绕着避错设计,以预防为主,重点关注变换过程。
(1)控制和减少程序复杂性
在设计时,应采用结构化设计方法,通过提高内聚度和降低耦合度,使系统程序尽量层次化,模块化,减少模块间的耦合。
(2)输入或输出异常控制
1)合理的值域控制。
应预先规定变量的定义域,在运行时要予以核查。同时必须对参数、数组下标和循环变量进行值域检查。
2)数值运算范围控制
数学公式用计算机程序实现时,一定要保证输入、输出及中间运算结果不超出机器的数值运算范围。
3)精度控制
精度控制是指要保证运算所要求的精度。这就要考虑计算误差和舍入误差,选定数据足够的有效位数。
(3)迅速查找和改正变换错误
程序设计时要满足条件简单、逻辑清晰、层次分明等要求,尽量将一些可能发生变化或需要经常修改的部分放在少数几个模块中。这样,在改正时才不至于扩大影响域。
2.2 查错方法
查错是以隔离为主,为了尽可能把非法输入隔离在控制流程之外,在软件设计过程中应采取有效措施。
(1)数据检查
1)数据传输正确性检查
从外部取得的数据,接收到这些数据后,要先判断接收数据正确性,确认其正确性后再使用。
2)数据有效性检查
任何数据都必须规定其合理的范围,如果数据超出了规定的范围,就必须进行错误处理。
(2)故障诊断
对敏感器和执行机构等进行失效判断,判断出故障后,软件自主进行部件级或系统级的切换,防止故障导致灾难性后果。
(3)记录故障数据
为了使地面能够得到引发系统故障的相关信息,正确分析故障,采取对策,及时查错排错,程序可以根据任务要求存储异常事件发生前后的关键数据并传输到地面。
2.3 纠错方法
纠错主要针对系统中运行时可能发生的问题,以在轨改正、对其根治为目的,在软件设计过程中采取措施。实施纠错措施的前提必须是已经准确地找出软件错误的起因和部位,程序又有能力修改、剔除有错误的语句。
(1)在轨修改程序
如果在轨飞行期间,发现系统设计、软件设计缺陷,则需要在轨修改程序,达到修复缺陷继续运行的目的。软件要为可能修改的模块留有修改入口,需要时将替换程序注入RAM区,软件运行到该处时进入到相应的RAM区的程序段运行。启用替换程序前,需要验证RAM区的替换程序与地面注入的替换程序是否一致,可通过内存下卸或计算累加和等方法来验证。
(2)在轨修改参数
对于重要的控制参数,通过地面遥控注入进行参数修正。如果系统具有在轨注入修改内存的功能,也可将部分参数定义为变量,通过在轨注入修改内存的方式修改。
2.4 容错方法
容错主要针对软件运行环境发生的问题,以不影响系统正常运行为目的,在软件设计过程中依靠系统资源的冗余采取必要措施。
(1)信息冗余容错处理
1)单粒子翻转
RAM中的重要程序和数据存储在3个互相间隔的区域,运行这些程序或使用这些数据前,都要通过三取二来裁决。
2)信号干扰
程序工作状态进行重要变换之前,如果变换的依据信号来源是唯一的,那么要对该信号进行多次判断,在其持续有效后才能进行变换,防止误判误转。
3)接口故障
软件应充分估计接口的各种可能故障,并采取相应的措施。应特别加入合理的通信最大等待时间,防止程序运行超时,使应用软件运行更稳定。
4)错误操作
软件应能判别重要注入指令的正确性,在遇到非法指令时拒绝执行该操作。
5)计算机复位
软件复位后,重要的是如何尽可能的使系统恢复到复位前的状态。部分数据对于恢复系统状态十分重要,将这些重要数据异地存储,在软件复位后取回。
6)计算数据异常
软件在运行过程中,对于重要的积分变量,应保护其历史数据,以备数据异常时使用。对于关键部件计算结果,应剔除超出阀值的数据,或将其限制在阀值范围内,保证程序运行的正确性。
(2)N版本冗余容错处理
如图1所示,N版本程序设计由N个实现相同功能的相异程序和1个管理程序组成,各版本先后运算出来的结果相互比较表决,输出决策。同时应选用各种不同的实现手段和方法来保证版本的强制相异,以减少共因故障[4]。
图1 N版本程序设计结构
3 交会对接软件可靠性设计
3.1 避错设计
(1) 系统模式管理的安全性设计
为避免遥控、程控等指令误操作而使程序进入异常模式,软件设计三级段标,采用树形结构,以段标区分模式,在不同模式下分别管理。在进行模式初始化时,将那些能够结束该模式的外部端口信息和软件标志清除,并在该模式的管理模块中只检查此模式下允许接收的相关信息。这样,既保证按照各种指令和预定程序进行各个模式之间的灵活切换,又能防止误操作给系统带来负面影响,模块功能稳定可靠,同时,软件容易扩展,可维护性好。
如图2所示,在相对位置保持子模式下,对所查询的对接允许和对接禁止两种互斥指令,查询到一种指令有效后随即清除另一种指令,避免产生两种互斥指令同时有效的情况。
(2)避免死循环
为避免系统或外部硬件故障而使程序中使用数据异常,造成程序死循环或运行超时而跑飞。具体设计过程中,除主循环外,避免其它程序运行死循环,设定预先可知的循环次数,或设定最大的循环次数。
(3)默认分支设计
为避免SEU、电磁干扰等,程序执行异常分支。分支设计时保证异常分支默认执行最安全或最大可能路径。条件判断时,合理选择判“真”还是“非假”,判“假”还是“非真”。尽量不出现“非真”也“非假”的冗余分支,各程序分支均应有出口。
(4)标志量的表示和判断
为避免SEU、电磁干扰等引起的标志量数据错误,尤其是重要标志量的改变会造成程序的重大运行状态的改变。具体设计时增大标志量表示的码距,用一个字节作标志。如:用“CCH”作“1”标志,用“33H”作“0”标志,对于部分重要标志,用“10H”和“EFH”分别表示“0”和“1”两种状态,这样可以允许有2位误码。
(5)8087内部栈的保护
为避免8087栈溢出,低级中断使用8087前,对8087现场进行保护,重新初始化8087。8087协处理器中包含8个循环使用的栈,设计和实现时要保证使用栈数目不超过8个。
(6)通信前空读串口缓冲区
为避免接口通信干扰,防止接收缓冲区因干扰等原因存在多余数据,控制器与串口缓冲区通信之前要先空读一下接收缓冲区,以使8252的DR(Data Ready)复位,再进行通信。
(7)“看门狗”程序
为避免程序走死走飞,软件复位、狗咬计数、切机对控制系统产生的影响,设计狗咬逻辑。“看门狗”时间长度设计:T=2~3“主程序”循环时间或T=2~2.5 时间片。
3.2 查错设计
(1)数据剔野
为避免瞬间干扰引起的数据错误。若本周期数据与上一周期相比大于规定阀值,且连续出现次数小于N次时,则本周期数据采用上一周期的数据,剔除本周期的野值。N取值不宜过大,否则容易掩盖超差故障,通常N取3,5,10等。
(2)数据限幅
为避免瞬间干扰引起的数据错误,应检查数据的取值范围,若超出规定的合理范围,则在限幅后继续使用。数据若在规定的取值范围之内,不对数据进行处理。限幅数据的选取主要为系统的输入、输出数据及姿态数据。
(3)数据校验保护
为避免非法访问、电磁干扰造成重要数据改变,及通信中接收到错误数据。程序设计时采用校验编码存储、更改、传送、使用等必须校验操作。
(4)数据异常的判别
为避免参与FLOAT运算数据异常,导致程序浮点运算异常,在该量参与计算前先判数据有效性或对与其共同运算的变量进行处理,防止直接参与FLOAT运算错误。
(5)标准值比较
为避免运算出错,控制计算异常,通过将关键部件计算结果与标准值比较,将标准值阈值范围之外的计算结果屏蔽于系统之外,防止将错误结果引入系统。
(6)避免通信过程被打断的处理
为避免数据通信过程被高优先级中断打断,针对不同的通信时长设计2种数据通信方式。对于通信速率较高、通信时间较短的数据接口,可在通信过程中采用关中断方式;对于通信速率较低的数据接口,可进行通信检查,若通信失败则进行二次通信。
3.3 纠错设计
(1)在轨参数修改
软件设计过程中对于重要的控制参数,例如,轨道参数、相平面控制参数、陀螺、红外、太阳修正系数、发动机参数、相对导航敏感器参数等,可以通过地面遥控注入,灵活进行参数修正。
(2)容错系统纠错
充分利用三机热冗余结构,设计多态变量,保证容错数据帧的识别能力,使系统具备多机热冗余相互纠错的能力。
(3)数据备份及恢复
对于交会对接过程中使用的相对位置导航数据等重要数据,要求具有数据备份及恢复的能力,对检测到的错误数据,使用备份数据进行恢复。
3.4 容错设计
(1)数据防抖动处理
为避免硬件开关触点瞬间抖动,具体程序设计过程中,连续N次取值全为真。
(2)通信超时限制
为避免信息交换、接口握手失败,进行限时检测,超时处理,加入合理的通信最大等待时间。
(3)重要数据互备
为避免系统复位造成重要数据丢失,前后台计算机之间的重要数据相互备份,维持系统运行数据和系统配置状态的数据。
(4)数据三取二容错处理
为避免SEU、电磁干扰造成RAM错误。关键数据存储于3个相同结构的数据区中,程序在使用前,采用三取二表决方法,并刷新三区数据。
(5)空余RAM陷阱设计
为避免程序指针IP误入引起走死走飞。填充HULT或关中断指令(如8086单字节指令FAH,F4H),强迫引起“狗咬”(操作系统+进程 结构),填充NOP和跳转到程序开始(顺序编程结构)。
(6)上电、复位处理
为避免上电、复位、切机过程中系统运行异常。应用软件采取相应的初始化和安全措施,确保系统正常运行。
(7)改进的N版本容错处理
交会对接嵌入式应用软件采用三机热备份容错结构,为保证容错系统的可靠性和完备性,着重对容错策略、交换数据类型和时序、三机运行同步等方面进行了改进设计,相比于传统的N版本方法,不仅降低了软硬件的开发成本,而且还缩短了软件的研制周期。
1)设计合理的交换时序
根据硬件环境特点,设计合理的交换数据发送、接收时序,保证各机时序的同步性及交换数据的完整性。如图3所示,选择的数据在交换时即保证控制信息的及时输出,又能使本周期的容错结果在当拍就起作用。
2)根据不同飞行阶段的任务需求,设计选择交换数据及容差
根据各种飞行模式,特别针对交会对接的各个阶段的任务需求,选取不同的关键导航数据和涉及安全的状态变量,共设计了9类交换数据,分别对应不同的容差阶段标志,在不同的飞行阶段进行交替比对。
为保证所设计的容限合理,鲁棒性及准确性强,具体设计过程中综合分析控制精度要求和实际敏感器采样误差及计算误差,避免系统不必要的频繁切机。
图4即为导航计算相对位置三机容限后的曲线。
图4 相对导航数据容限曲线
3)设计数据容错策略
对容差数据实行分类制度,根据系统实际运行过程中可能出现的各种情况,给出不同的容错策略,予以区别对待。
表1 交会对接数据容错策略
4)交会对接模式下的关联逻辑设计
在交会对接模式下,系统需进行容错处理的数据类型较多,受限于每周期交换数据量及运行时间约束,将各类数据分3个控制周期进行比对,同时为保证容错策略的连贯性,对多周期交换数据进行关联,防止由于错拍数据故障而引发的漏判。
关联逻辑流程如图5所示。
图5 关联逻辑流程
4 结论
针对航天控制系统软件实时性要求高、可靠性要求高、运行环境恶劣、资源受限和结构复杂的特点,深入开展了面向交会对接任务的高可靠嵌入式系统软件可靠性方面的分析与研究工作。
在交会对接嵌入式应用软件研制过程中,在严格遵循软件工程化的基础上,结合软件避错、容错、检错和纠错技术进行软件设计,将其运用到实际研制过程中,从而有效提高了系统的可靠性。
[1] 龚庆祥.型号可靠性工程手册[M].北京:国防工业出版社,2007.
[2] 贾庆忠,刘永善,刘藻珍.弹载嵌入式系统软件可靠性设计[J].微计算机信息,2007,23(26):12-14.(JIA Qingzhong,LIU Yongshan,LIU Zaozhen.Implementation of the Dependability for Embedded Software Used in Missile[J].Micro-computer Information,2007,23(26): 12-14.)
[3] 阮廉,陆民燕,韩峰岩.装备软件质量和可靠性管理[M].北京:国防工业出版社,2006.
[4] Wrence J D. Software Safety Hazard Analysis[M].Lawrence Livermore National Laboratory,1995.