论文部分内容阅读
摘要:针对某项目软件开发过程中出现的故障类型繁多,故障申报规模庞大的问题,设计了一种采用实时故障与非实时维护故障分类处理的方法。该方法首先通过对航空发动机控制软件中常见申报故障进行分类处理,其次针对不同类型的故障设计不同故障码,最后针对软件内部运行异常专门设计了软件的异常捕获记录功能。试验结果表明,设计的故障分类方法具有良好的故障申报效果,适用于复杂系统的故障诊断检测。
关键词:故障诊断;故障申报;实时故障码;维护故障码;软件异常捕获与记录
1 引言
随着航空发动机控制功能越来越复杂,对发动机运行过程中的故障监控要求也越来越精细。控制软件作为控制核心,负责接收外部指令并执行运算给出输出指令,它的核心作用也愈发凸显,软件的复杂度也越来越高,软件失效的隐患也越来越多。
本文针对故障诊断要求越来越高的需求,聚焦系統与软件专业故障,实现故障异常的识别和检测算法设计。在研究过程中,通过梳理系统层面与软件层面故障,设计实时故障码以及维护故障码,最后针对软件运行异常设计异常捕获记录功能。最终,解决了软件监控过程中出现的故障申报问题。
2 系统层面实时故障诊断
系统层面的故障诊断,主要是系统架构层面的故障诊断,取决于系统余度的构型。针对系统层面的故障诊断,设计了实时故障的诊断与申报机制。检测的目的是为了将系统层面的故障信息提供给飞行员或维护人员,为下一步的操作处理提供参考。
目前本文这方面主要考虑的是设备/功能的BIT检测。该检测一般指的是外部关键设备功能的检测,比如FMV输出阀、VSV输出阀、开入信号(例如KI_Start起动按钮)等。
检测的一般原理检查期望与实际是否一致。若一致,通过,若不一致,不通过。
检测的常用方法有奇偶校验不一致、校验和不一致、输出给定与反馈不一致、多余度不一致、范围超限等。
故障申报方法:采用实时故障码,定义16个16位整型数,每个bit位代表一个故障状态。总共可以表征256个故障信息。
3 软件层面故障诊断
从软件专业角度,故障诊断更加关注的是在既定系统架构、硬件资源确定的情况下,如何使用软件的手段增加故障\异常的检出;因此针对软件更关注的内部运行异常,设计了维护故障的捕获、记录、申报功能;站在软件层面,维护故障可以记录更详细和更广泛的故障异常信息。该部分检测的目的是为了监视软件内部异常及细节的故障信息。
软件内部异常检测,一般指的是软件运行异常状态的检测。检测的一般原理:若期望与实际不一致,则软件异常。
故障申报:采用维护故障码的形式,捕获故障时刻的特征参数,并记录故障码。
4 实时故障和维护故障申报
实时故障码,以固定实时周期将故障信息通讯给飞机,更注重是外部接口,信息精炼,用于飞机显示、告警、记录。
维护故障码,按照已记录故障码,非实时地循环发送给飞机,一次发一个故障码信息。维护故障码,是记录内部异常信息,强调信息量大,实时性偏弱,用于设计人员分析监测运行。
5 软件异常运行监控记录功能
为了弥补实时故障码信息的局限性,同时为了更全面的捕获记录异常信息(方便设计和排故分析),专门设计了软件的异常捕获记录功能。给每个软件异常分配一个唯一的故障码标识;在软件程序中常驻异常检测代码;当异常触发时刻,记录该异常的故障码、发生时刻及特征参数信息。该故障信息作为一条记录,存储到NVRAM中。
a)设计假设
1)异常的类型较多,因此用一个16位整数对异常进行编码;
2)异常的类型虽然多,但同一时刻不会大量爆发;
3)异常的发生属于偶发性质,不会长时间持续。
b)设计思路
1)建立一个基于NVRAM的缓存池,可以存放多个异常记录信息(32个);
2)异常信息已记录的格式,在触发的时刻被软件监视捕获,并写入缓存池,异常记录以故障码为索引;
3)异常捕获后,如果缓存池已经记录过该故障码,则在该故障码的存储位置更新最新的异常信息;如果缓存池中没有该故障码信息,则从缓存池中找一个空白记录位置进行信息记录;
4)如果缓存池已经全部用满,且新捕获的故障码没有出现在缓存池中,则覆盖最旧的记录,用于存储新发生的异常;
5)通过用户上位机串口和数据记录仪串口,采用异常记录循环的方式(间隔3s),进行对外显示记录。
c)异常发生时间算法
1)定义异常信息结构:
包含故障码、控制器绝对时间、Arinc429飞机授时(日、时、分)、记录次数、故障特征参数1、故障特征参数2;
2)由于记录存储空间受限以及同时有效利用飞机授时和EEC时间,优化设计了时间换算算法。
控制器绝对时间,使用软件的5ms中断计数(除以200),换算为秒;
飞机授时,使用飞机Arinc429授时的年、月、日、时、分、秒;取其中的日、时、分,换算为单位是分的一个整形数;
这样,即使飞机授时无效的情况下,也能够反应出故障发生时刻的基本时间信息;
3)特征参数根据故障类别进行设置,目的是根据此参数快速识别故障类别,及时定位到该故障。
d)异常记录方式及优点
由于记录存储NVRAM空间有限,设计了循环存储方式:
1)新发生的异常(之前未记录过的),占用一条空白记录位置;
2)已发生记录的异常,在原有位置更新信息;
3)如果循环存储空间已满,新发生的异常覆盖最旧的故障记录信息。
通讯显示方式:每次通讯显示一条记录(占用6个16位通讯位置),对已记录故障进行循环显示。 循环存储以及循环显示优点如下:
1)记录的异常信息没有限制(只要分析识别到的异常,设计了异常捕获方法的都可以记录);很灵活,可以不断增加;
2)记录的故障信息更全面,涵盖了发生时刻、发生次数、故障特征参数;
3)记录的故障信息定位更准确,更利于故障排查;
4)通过该内部监视功能,可以把软件派生的异常处理进行显形设计;
6 实例
1、定义如下故障码结构:
typedef struct tagFAULTINFO
{
INT16U FaultCode; /* Fault Code*/
INT16U EecTime; /* 控制器绝对时间(s),最大表示18小时*/
INT16U AcTime; /* Arinc429飞机授时(日、时、分)*/
INT16U RecordCnt; /* 记录次数*/
INT16S FaultPara1; /* 故障特征参数1*/
INT16S FaultPara2; /* 故障特征参数2*/
}FAULTINFOSTRU;
2、对故障进行分类:
#define EXC_INPUT_SIGNAL (0xFF<<8)
#define EXC_ABNORM_BRANCH (0xFE<<8)
#define EXC_TIMEOUT (0xFD<<8)
#define EXC_SOFT_RUNNING (0xFC<<8)
#define EXC_EXTERN (0xFB<<8)
#define EXC_EEC (0xFA<<8)
#define EXC_ENGINE (0xFB<<8)
3、建立函数FaultSnapshot(INT16U faultcode,INT16S para_1, INT16S para_2)。
形参faultcode表示故障码、形参para_1、para_2分别表示故障特征参数1、故障特征参数2;其中故障码faultcode根据已分类的故障进行设置。
在需要异常监测中调用FaultSnapshot,进行故障码的获取。例如为了检测N1转速选择分支异常。在异常发生处,调用FaultSnapshot函数,故障码设置为(EXC_INPUT_SIGNAL|EM_N1)。
7 结论
综上所述,本文设计了一种瞬态异常的实时捕获记录方法。该方法使得异常记录范围不再受限,从而可以把焦点转移到异常的识别和检测方法设计本身。结合故障码的设计,更有利于软件的维护。
参考文献:
[1]王晓东,陈道蓄.数据结构(STL框架)[M].2009年9月第1版.
[2]William Collins.Data Structures and the Standard Template Library.McGraw-Hill Science,2002.
[3]肖建.ASP.NET 编程实例与技巧集粹[M].北京:北京希望电子出版社,2003.
[4]张海蕃.软件工程导论[M].北京:清华大学出版社,2003.
[5]赵晶.基于信息融合技术的航空发动机智能检查研究[M].南京航空航天大学,2010.
[6]向立杰,谭杰等.先进控制算法软件的设计与开发[J].计算机工程,2003,29(18):41-43.
[7]孙鹤旭,林涛.嵌入式控制系统[M].北京:清华大學出版社,2007,3-4.
关键词:故障诊断;故障申报;实时故障码;维护故障码;软件异常捕获与记录
1 引言
随着航空发动机控制功能越来越复杂,对发动机运行过程中的故障监控要求也越来越精细。控制软件作为控制核心,负责接收外部指令并执行运算给出输出指令,它的核心作用也愈发凸显,软件的复杂度也越来越高,软件失效的隐患也越来越多。
本文针对故障诊断要求越来越高的需求,聚焦系統与软件专业故障,实现故障异常的识别和检测算法设计。在研究过程中,通过梳理系统层面与软件层面故障,设计实时故障码以及维护故障码,最后针对软件运行异常设计异常捕获记录功能。最终,解决了软件监控过程中出现的故障申报问题。
2 系统层面实时故障诊断
系统层面的故障诊断,主要是系统架构层面的故障诊断,取决于系统余度的构型。针对系统层面的故障诊断,设计了实时故障的诊断与申报机制。检测的目的是为了将系统层面的故障信息提供给飞行员或维护人员,为下一步的操作处理提供参考。
目前本文这方面主要考虑的是设备/功能的BIT检测。该检测一般指的是外部关键设备功能的检测,比如FMV输出阀、VSV输出阀、开入信号(例如KI_Start起动按钮)等。
检测的一般原理检查期望与实际是否一致。若一致,通过,若不一致,不通过。
检测的常用方法有奇偶校验不一致、校验和不一致、输出给定与反馈不一致、多余度不一致、范围超限等。
故障申报方法:采用实时故障码,定义16个16位整型数,每个bit位代表一个故障状态。总共可以表征256个故障信息。
3 软件层面故障诊断
从软件专业角度,故障诊断更加关注的是在既定系统架构、硬件资源确定的情况下,如何使用软件的手段增加故障\异常的检出;因此针对软件更关注的内部运行异常,设计了维护故障的捕获、记录、申报功能;站在软件层面,维护故障可以记录更详细和更广泛的故障异常信息。该部分检测的目的是为了监视软件内部异常及细节的故障信息。
软件内部异常检测,一般指的是软件运行异常状态的检测。检测的一般原理:若期望与实际不一致,则软件异常。
故障申报:采用维护故障码的形式,捕获故障时刻的特征参数,并记录故障码。
4 实时故障和维护故障申报
实时故障码,以固定实时周期将故障信息通讯给飞机,更注重是外部接口,信息精炼,用于飞机显示、告警、记录。
维护故障码,按照已记录故障码,非实时地循环发送给飞机,一次发一个故障码信息。维护故障码,是记录内部异常信息,强调信息量大,实时性偏弱,用于设计人员分析监测运行。
5 软件异常运行监控记录功能
为了弥补实时故障码信息的局限性,同时为了更全面的捕获记录异常信息(方便设计和排故分析),专门设计了软件的异常捕获记录功能。给每个软件异常分配一个唯一的故障码标识;在软件程序中常驻异常检测代码;当异常触发时刻,记录该异常的故障码、发生时刻及特征参数信息。该故障信息作为一条记录,存储到NVRAM中。
a)设计假设
1)异常的类型较多,因此用一个16位整数对异常进行编码;
2)异常的类型虽然多,但同一时刻不会大量爆发;
3)异常的发生属于偶发性质,不会长时间持续。
b)设计思路
1)建立一个基于NVRAM的缓存池,可以存放多个异常记录信息(32个);
2)异常信息已记录的格式,在触发的时刻被软件监视捕获,并写入缓存池,异常记录以故障码为索引;
3)异常捕获后,如果缓存池已经记录过该故障码,则在该故障码的存储位置更新最新的异常信息;如果缓存池中没有该故障码信息,则从缓存池中找一个空白记录位置进行信息记录;
4)如果缓存池已经全部用满,且新捕获的故障码没有出现在缓存池中,则覆盖最旧的记录,用于存储新发生的异常;
5)通过用户上位机串口和数据记录仪串口,采用异常记录循环的方式(间隔3s),进行对外显示记录。
c)异常发生时间算法
1)定义异常信息结构:
包含故障码、控制器绝对时间、Arinc429飞机授时(日、时、分)、记录次数、故障特征参数1、故障特征参数2;
2)由于记录存储空间受限以及同时有效利用飞机授时和EEC时间,优化设计了时间换算算法。
控制器绝对时间,使用软件的5ms中断计数(除以200),换算为秒;
飞机授时,使用飞机Arinc429授时的年、月、日、时、分、秒;取其中的日、时、分,换算为单位是分的一个整形数;
这样,即使飞机授时无效的情况下,也能够反应出故障发生时刻的基本时间信息;
3)特征参数根据故障类别进行设置,目的是根据此参数快速识别故障类别,及时定位到该故障。
d)异常记录方式及优点
由于记录存储NVRAM空间有限,设计了循环存储方式:
1)新发生的异常(之前未记录过的),占用一条空白记录位置;
2)已发生记录的异常,在原有位置更新信息;
3)如果循环存储空间已满,新发生的异常覆盖最旧的故障记录信息。
通讯显示方式:每次通讯显示一条记录(占用6个16位通讯位置),对已记录故障进行循环显示。 循环存储以及循环显示优点如下:
1)记录的异常信息没有限制(只要分析识别到的异常,设计了异常捕获方法的都可以记录);很灵活,可以不断增加;
2)记录的故障信息更全面,涵盖了发生时刻、发生次数、故障特征参数;
3)记录的故障信息定位更准确,更利于故障排查;
4)通过该内部监视功能,可以把软件派生的异常处理进行显形设计;
6 实例
1、定义如下故障码结构:
typedef struct tagFAULTINFO
{
INT16U FaultCode; /* Fault Code*/
INT16U EecTime; /* 控制器绝对时间(s),最大表示18小时*/
INT16U AcTime; /* Arinc429飞机授时(日、时、分)*/
INT16U RecordCnt; /* 记录次数*/
INT16S FaultPara1; /* 故障特征参数1*/
INT16S FaultPara2; /* 故障特征参数2*/
}FAULTINFOSTRU;
2、对故障进行分类:
#define EXC_INPUT_SIGNAL (0xFF<<8)
#define EXC_ABNORM_BRANCH (0xFE<<8)
#define EXC_TIMEOUT (0xFD<<8)
#define EXC_SOFT_RUNNING (0xFC<<8)
#define EXC_EXTERN (0xFB<<8)
#define EXC_EEC (0xFA<<8)
#define EXC_ENGINE (0xFB<<8)
3、建立函数FaultSnapshot(INT16U faultcode,INT16S para_1, INT16S para_2)。
形参faultcode表示故障码、形参para_1、para_2分别表示故障特征参数1、故障特征参数2;其中故障码faultcode根据已分类的故障进行设置。
在需要异常监测中调用FaultSnapshot,进行故障码的获取。例如为了检测N1转速选择分支异常。在异常发生处,调用FaultSnapshot函数,故障码设置为(EXC_INPUT_SIGNAL|EM_N1)。
7 结论
综上所述,本文设计了一种瞬态异常的实时捕获记录方法。该方法使得异常记录范围不再受限,从而可以把焦点转移到异常的识别和检测方法设计本身。结合故障码的设计,更有利于软件的维护。
参考文献:
[1]王晓东,陈道蓄.数据结构(STL框架)[M].2009年9月第1版.
[2]William Collins.Data Structures and the Standard Template Library.McGraw-Hill Science,2002.
[3]肖建.ASP.NET 编程实例与技巧集粹[M].北京:北京希望电子出版社,2003.
[4]张海蕃.软件工程导论[M].北京:清华大学出版社,2003.
[5]赵晶.基于信息融合技术的航空发动机智能检查研究[M].南京航空航天大学,2010.
[6]向立杰,谭杰等.先进控制算法软件的设计与开发[J].计算机工程,2003,29(18):41-43.
[7]孙鹤旭,林涛.嵌入式控制系统[M].北京:清华大學出版社,2007,3-4.