说明书一种基于事件队列的航天器故障诊断方法
技术领域
本发明涉及一种航天器故障诊断方法,特别是一种基于事件队列的航天器故障诊断方法,属于航天器故障诊断领域。
背景技术
随着控制与推进分系统的功能日益复杂,AOCC应用软件承担的任务也从传统的姿态与轨道控制等科学计算功能,逐步扩展到故障处理等业务逻辑功能。与基于软件当前状态,进行科学计算的姿态与轨道控制功能相比,故障处理的特征包括时序性和离散性。即业务逻辑的行为不仅由软件的当前状态决定,还往往与软件的历史状态有关。故障处理的输入一般是离散量(部件的状态,或是以姿态与轨道计算结果的连续量作为自变量的布尔表达式取值等),输出也是离散量(部件的状态等),且输出往往由多个周期的输入共同决定。
目前,有些卫星的控制与推进分系统应用软件单独列出了故障处理任务。需要考虑的故障类型多,故障判断与故障处理逻辑复杂,传统的软件架构难以适应这些新的需求。基于事件的航天器软件故障处理方法将时序条件的判定结果抽象为事件,将输出抽象为动作。事件可以既可以触发动作,也可以注册新的事件,极大简化了软件实现的难度,降低了软件实现错误的可能性。
发明内容
本发明的技术解决问题是:克服现有技术的不足,提供了一种基于事件队列的航天器故障诊断方法,将判断故障发生的时序条件抽象为事件,将故障处理措施抽象为动作,通过事件队列实现故障诊断与处理,实现了复杂故障诊断与处理场景的形式化描述,为了清晰、无二义性地描述航天器故障诊断的需求提供了一种方法。该方法既有利于航天器故障诊断与处理方案设计 人员清晰明了地描述航天器故障诊断需求,又有利于实现故障诊断与处理方法的复用。
本发明的技术解决方案是:一种基于事件队列的航天器故障诊断方法,步骤如下:
(1)获取航天器故障诊断相关数据,所述航天器故障诊断相关数据包括航天器各敏感器和各执行机构的测量数据与反馈数据;
(2)判断步骤(1)中获得的故障诊断相关数据是否满足事件注册条件,若满足,则进入步骤(3),进行事件注册,否则,进入步骤(4),直接进行事件触发的判断;所述事件为航天器各敏感器和各执行机构的开关切换操作;
所述事件注册条件由项、命题和公式确定,具体为:
项:Term包括下列两种形式:c或x,其中,Term为项,c为常量,x为变量,即航天器各敏感器和各执行机构的测量数据与反馈数据;
命题:Proposition由Function(Term1,Term2,…,Termn)~0确定,其中,Proposition为命题,Function为关于Term的n元初等函数表达式,~为>、<或=,Term1,Term2,…,Termn均为项;
公式:Formula包括下列两种形式:Proposition或(Formula1Until[n]Formula2),其中,Until为时序算子,n为时间约束;
给定由多个控制周期的航天器各敏感器和各执行机构的测量数据与反馈数据构成的数据序列S=s1,s2,…sn,…,若Formula由Formula1Until[n]Formula2构成,则Formula在数据序列S上成立的条件是:存在i<=n,使得Formula1在序列集合{s1,s2,…si、s2,…si、…、si-1si、si}的各个序列上均成立,且Formula2在si,si+1,…sn,…成立;
若Formula由命题Proposition直接构成,则Formula在数据序列S上成立的条件是当且仅当Proposition在s1上成立;
(3)对步骤(2)中满足注册条件的事件进行注册,进入步骤(4); 具体的注册方法为:若Formula在数据序列S上成立,则将Event加入事件队列,其中,Event为触发事件;
(4)判断当前事件队列中的事件是否满足事件触发条件,若满足,则执行相应的开关操作,否则,结束本周期的故障诊断;
所述事件触发条件由条件和事件触发确定,具体为:
条件:Condition包括下列四种形式:Formula或(!Condition)或(Condition1||Condition2)或(Condition1&&Condition2)其中,!Condition、Condition1||Condition2和Condition1&&Condition2分别表示条件的否定、析取与合取;Condition、Condition1和Condition2均为条件;
事件触发:Event包括下列两种形式,Action或IF(Condition)THEN Event1ELSE Event2,其中Action是航天器各敏感器和各执行机构的开关切换动作;其语义如下:
若Event由动作Action直接构成,则执行Action所代表的各敏感器和各执行机构的开关切换操作;
若Event的形式为IF(Condition)THEN Event1ELSE Event2,则根据步骤(2)中的事件注册条件,判断Condition是否成立,若成立,则执行Event1,否则执行Event2;
所述动作Action包括三种形式,v:=e或Always[L](v:=e)或Eventually[L](v:=e),分别表示直接将进行v:=e的操作;在接下来的L个周期中,都进行v:=e的操作;在L个周期之后,再进行v:=e的操作。其中,v:=e表示将表达式e的值,赋给v所代表的变量或硬件端口。
本发明与现有技术相比的有益效果是:
(1)本发明可以表示包含复杂时序特性的航天器故障诊断与处理方案,提高了航天器故障诊断与处理方法的表达能力。
(2)相比于传统的文字、伪代码、图表方式的故障诊断与处理描述方 法描述,本发明给出了航天器故障诊断与处理描述方法的语法定义和语义解释,更加清晰,避免了二义性,也更有利于航天器设计人员分析方案的合理性、可行性;
(3)本发明给出了一种航天器故障诊断与处理的新思路,即站在需求的角度分析、设计故障诊断与处理方案,避免过早陷入实现的细节。有利于航天器设计人员提出更加通用、具有复用性的故障诊断与处理方案。
附图说明
图1为本发明流程图;
图2为本发明应用案例的示意图
具体实施方式
下面结合附图对本发明的具体实施方式进行进一步的详细描述。
(1)获取航天器故障诊断相关数据,所述航天器故障诊断相关数据包括航天器各敏感器和各执行机构的测量数据与反馈数据;
(2)判断步骤(1)中获得的故障诊断相关数据是否满足事件注册条件,若满足,则进入步骤(3),进行事件注册,否则,进入步骤(4),直接进行事件触发的判断;所述事件为航天器各敏感器和各执行机构的开关切换操作;
所述事件注册条件由巴克斯范式构建,所述巴克斯范式由项、命题和公式确定,具体为:
项:Term包括下列两种形式:c或x,其中,Term为项,c为常量,x为变量,即航天器各敏感器和各执行机构的测量数据与反馈数据。例如,1.732就是一个常量,phi就是一个变量;
命题:Proposition::=Function(Term1,Term2,…,Termn)~0,其中,Proposition为命题,Function是关于Term的n元初等函数表达式,~是>,<或=,Term1,Term2,…,Termn均为项。例如,sin(phi)>0就是一个命题,atan(sin(phi)+0.5)-0.78540>0也是一个表达式,该表达式由多个函数复 合而成,第一层函数是减法函数,第二层是反正切函数,第三层是加法函数,最内层是正弦函数;
公式:Formula包括下列两种形式:Proposition或(Formula1Until[n]Formula2),其中,U是时序算子,n是时间约束,其语义如下:
给定由多个控制周期的航天器各敏感器和各执行机构的测量数据与反馈数据构成的数据序列S=s1,s2,…sn,…,如果存在i<=n,使得Formula1在序列集合{s1,s2,…si、s2,…si、…、si-1si、si}的各个序列上均成立,且Formula2在si,si+1,…sn,…成立,那么Formula1Until[n]Formula2在整个数据序列上成立,当Formula由命题Proposition直接构成时,Formula在数据序列上成立的条件是当且仅当Proposition在s1上成立;
(3)对步骤(2)中满足注册条件的事件进行注册,进入步骤(4);具体的注册方法为:如果根据步骤(2)中的事件注册条件,判断Formula成立,那么将Event加入事件队列。其中,Event为触发事件;
(4)判断当前事件队列中的事件是否满足事件触发条件,若满足,则执行相应的开关操作,否则,结束本周期的故障诊断;
所述事件触发条件由巴克斯范式构造,所述巴克斯范式由条件和事件触发确定,具体为:
条件:Condition包括下列四种形式:Formula或(!Condition)或(Condition1||Condition2)或(Condition1&&Condition2),其中,Condition、Condition1||Condition2和Condition1&&Condition2分别表示条件的否定、析取与合取;
事件触发:Event包括下列两种形式,Action或IF(Condition)THEN Event1ELSE Event2,其中Action是航天器各敏感器和各执行机构的开关切换动作。其语义如下:
如果Event由动作Action直接构成,则执行Action所代表的各敏感器和各执行机构的开关切换操作;
如果Event的形式为IF(Condition)THEN Event1ELSE Event2,则需要根据步骤(2)中的事件注册条件,判断Condition是否成立,如果成立,则执行Event1,否则执行Event2。
动作:Action包括下列三种形式,v:=e或Always[L](v:=e)或Eventually[L](v:=e),分别表示直接将进行v:=e的操作;在接下来的L个周期中,都进行v:=e的操作;在L个周期之后,再进行v:=e的操作。
下面给出一个使用本方法描述航天器故障诊断方案的例子:“如果连续1500个控制周期角速度超限(|ω|>1.0),那么先关闭发动机(REAG=0),32个控制周期后再关闭自锁阀(LV=0),自锁阀关闭两次,间隔8个控制周期”。
以传统的方式,会使用类似C语言的伪代码描述上述需求:
(1)判断故障
其中,counterOmega用于记录连续发生角速度超限的周期数,bWarnOmega表示是否发生了角速度超限故障,bReag表示发生角速度超限故障之后,是否关闭了发动机。
(2)处理故障
其中,counterLV用于记录关闭发动机后经过的周期数。
使用传统方法的好处在于,接近软件实现代码,易于软件工程师编程实现。其缺点在于,系统工程师必须按照编写程序的思路来梳理故障诊断与处理相关的方案,过于细节化,既不利于发现方案中可能存在的问题,也不利于方案重用。
使用本方法描述该方案时,只需要注意以下四个要点:
(1)故障判断条件是“连续1500个控制周期角速度超限(|ω|>1.0)”
(2)故障处理措施有二,一是关闭发动机,二是关闭自锁阀
(3)先关闭发动机,过了32个周期后,再关闭自锁阀
(4)自锁阀需要关闭两次,间隔8个周期
可以使用本方法提供的“条件”描述故障判断条件,使用“事件触发”描述故障处理措施。“连续1500个控制周期角速度超限(|ω|>1.0)”对应的条件为:(False)Until[1500](|ω|>1.0);
因为要求“先关闭发动机,过了32个周期后,再关闭自锁阀”,所以使用Eventually算子约束关闭自锁阀的操作;
因为要求“自锁阀需要关闭两次,间隔8个周期”,所以使用Eventually算子约束第二次关闭自锁阀的操作。
因此,使用本方法描述该方案如下:
条件:
(False)Until[1500](|ω|>1.0)
事件触发:
REAG:=0;
Eventually[32](LV:=0;Eventually[8](LV:=0));
其中,REAG:=0表示关闭发动机,LV:=0表示关闭自锁阀。因为要求过32个周期后,再关闭自锁阀,所以使用了动作Eventually[32](…)。因为需要关闭两次,两次的间隔为8个周期,所以上述动作的具体内容是LV:=0;Eventually[8](LV:=0),表示关闭自锁阀,8个周期后,再次关闭自锁阀。该行为对应的数据序列见图2
本发明说明书中未作详细描述的内容属于本领域专业技术人员的公知技术。