Page 314 - 《软件学报》2026年第3期
P. 314
李晓锋 等: 空间飞行器控制软件在轨自适应可信演化框架 1277
根据第 3.2 节中自适应触发要素的定义, 在轨故障作为自适应触发要素之一, 会使系统从正常的工作状态, 跳
转为异常的工作状态. 这一结果可以由飞行器姿态数据遥测发现, 例如 X 轴、Y 轴、Z 轴姿态角的观测值和预期
值偏离 (即, 星地姿态发散), 最终导致飞行器姿态不稳定、喷气频繁、能源耗尽, 严重影响飞行器正常任务的执行
和寿命, 带来不可挽回的损失.
(1) 自适应触发要素分析
为了减轻和避免在轨故障所带来的影响, 首先需要对自适应触发要素进行分析. 案例中建立基于树结构的故
障事件 (e fault_occurrence ) 匹配方法, 从而触发系统从正常运行状态转移到故障检测状态. 每个控制周期, 控制软件会
与星敏建立通信获取星敏采集数据, 除了对数据包的帧头、校验和进行通信层校验, 还需要对姿态数据包中关键
数据的有效性进行判断, 当发生数据错误时, 则判定星敏数据无效. 表 1 中整理了案例场景中 3 种典型的星敏数据
无效故障事件, 优先级依次由低到高.
表 1 星敏数据无效故障事件表
序号 事件名称 优先级
1 单个星敏数据无效累计时间达50 s III
2 所有星敏数据无效累计时间达180 s II
3 所有星敏数据无效累计时间达1 380 s I
对于已知故障事件的识别, 首先通过领域知识建立故障事件树. 原星上代码的故障诊断逻辑多为 IF-ELSE 条
件判断语句, 案例中抽取最外层判定逻辑作为故障事件的判定规则, 它一般描述故障触发的外部条件, 例如星敏作
为控制计算机的下位机所传输的姿态数据包中星数识别错误. 由表 1 所建立的故障事件规则树如图 10 所示. 为了
实现故障事件的模块化, 这里建立原子事件 Sts[i]DataInValid, 它的判定结果可以由后序遍历其叶子节点的运算结
果得到, 同一层级的节点计算优先顺序为从左至右. 在原子事件的基础上, 构建事件 1 (图 10(a)) 和事件 2 (图 10(b)).
据此, 故障诊断逻辑分解为多个层级, 处理不同粒度的事件, 使故障感知过程更加清晰高效, 同时可以支持故障规
则的动态添加、删除或修改, 支持规则的继承和重用, 实现规则的模块化和复用, 减少规则重复定义的工作量, 提
升在轨自适应能力.
Sts[i]DataInValid AllStsDataFault
OR OR AND
(Quality&0x07) ((flagStatus>>8) numStarValid CWst==TRUE AND AND AND
!=0x07 &0x1E)!=0x0B ==0
StsADataInValid StsBDataInValid StsCDataInValid CntTime==180
SingleStsDataFault
Sts[0]DataInValid Sts[1]DataInValid Sts[2]DataInValid
AND
Sts[i]DataInValid CntTime==50
(a) 事件1 (b) 事件2
图 10 星敏数据无效故障事件规则树
(2) 自适应可变要素生成
在自适应可变要素中, 针对已知的故障事件, 采用 ECA 规则解析的方式实现故障的诊断和恢复, 在这一过程
中, 最重要的步骤就是定义自适应决策规则, 即 ECA 规则. 在此案例场景中, 故障条件匹配则是通过知识库中预先
定义好的规则进行故障处理, 在由外部设备、实体等引起的事件触发故障事件的基础上, 根据系统内部条件 (例
如, 系统属性、部件状态), 选择合适的恢复动作. 故障条件的表达式可以是简单的系统变量的真假判断; 也可以是

