李勇 糜杰 施浩琴
摘要:針對(duì)某項(xiàng)目軟件開(kāi)發(fā)過(guò)程中出現(xiàn)的故障類(lèi)型繁多,故障申報(bào)規(guī)模龐大的問(wèn)題,設(shè)計(jì)了一種采用實(shí)時(shí)故障與非實(shí)時(shí)維護(hù)故障分類(lèi)處理的方法。該方法首先通過(guò)對(duì)航空發(fā)動(dòng)機(jī)控制軟件中常見(jiàn)申報(bào)故障進(jìn)行分類(lèi)處理,其次針對(duì)不同類(lèi)型的故障設(shè)計(jì)不同故障碼,最后針對(duì)軟件內(nèi)部運(yùn)行異常專(zhuān)門(mén)設(shè)計(jì)了軟件的異常捕獲記錄功能。試驗(yàn)結(jié)果表明,設(shè)計(jì)的故障分類(lèi)方法具有良好的故障申報(bào)效果,適用于復(fù)雜系統(tǒng)的故障診斷檢測(cè)。
關(guān)鍵詞:故障診斷;故障申報(bào);實(shí)時(shí)故障碼;維護(hù)故障碼;軟件異常捕獲與記錄
1 引言
隨著航空發(fā)動(dòng)機(jī)控制功能越來(lái)越復(fù)雜,對(duì)發(fā)動(dòng)機(jī)運(yùn)行過(guò)程中的故障監(jiān)控要求也越來(lái)越精細(xì)??刂栖浖鳛榭刂坪诵?,負(fù)責(zé)接收外部指令并執(zhí)行運(yùn)算給出輸出指令,它的核心作用也愈發(fā)凸顯,軟件的復(fù)雜度也越來(lái)越高,軟件失效的隱患也越來(lái)越多。
本文針對(duì)故障診斷要求越來(lái)越高的需求,聚焦系統(tǒng)與軟件專(zhuān)業(yè)故障,實(shí)現(xiàn)故障異常的識(shí)別和檢測(cè)算法設(shè)計(jì)。在研究過(guò)程中,通過(guò)梳理系統(tǒng)層面與軟件層面故障,設(shè)計(jì)實(shí)時(shí)故障碼以及維護(hù)故障碼,最后針對(duì)軟件運(yùn)行異常設(shè)計(jì)異常捕獲記錄功能。最終,解決了軟件監(jiān)控過(guò)程中出現(xiàn)的故障申報(bào)問(wèn)題。
2 系統(tǒng)層面實(shí)時(shí)故障診斷
系統(tǒng)層面的故障診斷,主要是系統(tǒng)架構(gòu)層面的故障診斷,取決于系統(tǒng)余度的構(gòu)型。針對(duì)系統(tǒng)層面的故障診斷,設(shè)計(jì)了實(shí)時(shí)故障的診斷與申報(bào)機(jī)制。檢測(cè)的目的是為了將系統(tǒng)層面的故障信息提供給飛行員或維護(hù)人員,為下一步的操作處理提供參考。
目前本文這方面主要考慮的是設(shè)備/功能的BIT檢測(cè)。該檢測(cè)一般指的是外部關(guān)鍵設(shè)備功能的檢測(cè),比如FMV輸出閥、VSV輸出閥、開(kāi)入信號(hào)(例如KI_Start起動(dòng)按鈕)等。
檢測(cè)的一般原理檢查期望與實(shí)際是否一致。若一致,通過(guò),若不一致,不通過(guò)。
檢測(cè)的常用方法有奇偶校驗(yàn)不一致、校驗(yàn)和不一致、輸出給定與反饋不一致、多余度不一致、范圍超限等。
故障申報(bào)方法:采用實(shí)時(shí)故障碼,定義16個(gè)16位整型數(shù),每個(gè)bit位代表一個(gè)故障狀態(tài)??偣部梢员碚?56個(gè)故障信息。
3 軟件層面故障診斷
從軟件專(zhuān)業(yè)角度,故障診斷更加關(guān)注的是在既定系統(tǒng)架構(gòu)、硬件資源確定的情況下,如何使用軟件的手段增加故障\異常的檢出;因此針對(duì)軟件更關(guān)注的內(nèi)部運(yùn)行異常,設(shè)計(jì)了維護(hù)故障的捕獲、記錄、申報(bào)功能;站在軟件層面,維護(hù)故障可以記錄更詳細(xì)和更廣泛的故障異常信息。該部分檢測(cè)的目的是為了監(jiān)視軟件內(nèi)部異常及細(xì)節(jié)的故障信息。
軟件內(nèi)部異常檢測(cè),一般指的是軟件運(yùn)行異常狀態(tài)的檢測(cè)。檢測(cè)的一般原理:若期望與實(shí)際不一致,則軟件異常。
故障申報(bào):采用維護(hù)故障碼的形式,捕獲故障時(shí)刻的特征參數(shù),并記錄故障碼。
4 實(shí)時(shí)故障和維護(hù)故障申報(bào)
實(shí)時(shí)故障碼,以固定實(shí)時(shí)周期將故障信息通訊給飛機(jī),更注重是外部接口,信息精煉,用于飛機(jī)顯示、告警、記錄。
維護(hù)故障碼,按照已記錄故障碼,非實(shí)時(shí)地循環(huán)發(fā)送給飛機(jī),一次發(fā)一個(gè)故障碼信息。維護(hù)故障碼,是記錄內(nèi)部異常信息,強(qiáng)調(diào)信息量大,實(shí)時(shí)性偏弱,用于設(shè)計(jì)人員分析監(jiān)測(cè)運(yùn)行。
5 軟件異常運(yùn)行監(jiān)控記錄功能
為了彌補(bǔ)實(shí)時(shí)故障碼信息的局限性,同時(shí)為了更全面的捕獲記錄異常信息(方便設(shè)計(jì)和排故分析),專(zhuān)門(mén)設(shè)計(jì)了軟件的異常捕獲記錄功能。給每個(gè)軟件異常分配一個(gè)唯一的故障碼標(biāo)識(shí);在軟件程序中常駐異常檢測(cè)代碼;當(dāng)異常觸發(fā)時(shí)刻,記錄該異常的故障碼、發(fā)生時(shí)刻及特征參數(shù)信息。該故障信息作為一條記錄,存儲(chǔ)到NVRAM中。
a)設(shè)計(jì)假設(shè)
1)異常的類(lèi)型較多,因此用一個(gè)16位整數(shù)對(duì)異常進(jìn)行編碼;
2)異常的類(lèi)型雖然多,但同一時(shí)刻不會(huì)大量爆發(fā);
3)異常的發(fā)生屬于偶發(fā)性質(zhì),不會(huì)長(zhǎng)時(shí)間持續(xù)。
b)設(shè)計(jì)思路
1)建立一個(gè)基于NVRAM的緩存池,可以存放多個(gè)異常記錄信息(32個(gè));
2)異常信息已記錄的格式,在觸發(fā)的時(shí)刻被軟件監(jiān)視捕獲,并寫(xiě)入緩存池,異常記錄以故障碼為索引;
3)異常捕獲后,如果緩存池已經(jīng)記錄過(guò)該故障碼,則在該故障碼的存儲(chǔ)位置更新最新的異常信息;如果緩存池中沒(méi)有該故障碼信息,則從緩存池中找一個(gè)空白記錄位置進(jìn)行信息記錄;
4)如果緩存池已經(jīng)全部用滿(mǎn),且新捕獲的故障碼沒(méi)有出現(xiàn)在緩存池中,則覆蓋最舊的記錄,用于存儲(chǔ)新發(fā)生的異常;
5)通過(guò)用戶(hù)上位機(jī)串口和數(shù)據(jù)記錄儀串口,采用異常記錄循環(huán)的方式(間隔3s),進(jìn)行對(duì)外顯示記錄。
c)異常發(fā)生時(shí)間算法
1)定義異常信息結(jié)構(gòu):
包含故障碼、控制器絕對(duì)時(shí)間、Arinc429飛機(jī)授時(shí)(日、時(shí)、分)、記錄次數(shù)、故障特征參數(shù)1、故障特征參數(shù)2;
2)由于記錄存儲(chǔ)空間受限以及同時(shí)有效利用飛機(jī)授時(shí)和EEC時(shí)間,優(yōu)化設(shè)計(jì)了時(shí)間換算算法。
控制器絕對(duì)時(shí)間,使用軟件的5ms中斷計(jì)數(shù)(除以200),換算為秒;
飛機(jī)授時(shí),使用飛機(jī)Arinc429授時(shí)的年、月、日、時(shí)、分、秒;取其中的日、時(shí)、分,換算為單位是分的一個(gè)整形數(shù);
這樣,即使飛機(jī)授時(shí)無(wú)效的情況下,也能夠反應(yīng)出故障發(fā)生時(shí)刻的基本時(shí)間信息;
3)特征參數(shù)根據(jù)故障類(lèi)別進(jìn)行設(shè)置,目的是根據(jù)此參數(shù)快速識(shí)別故障類(lèi)別,及時(shí)定位到該故障。
d)異常記錄方式及優(yōu)點(diǎn)
由于記錄存儲(chǔ)NVRAM空間有限,設(shè)計(jì)了循環(huán)存儲(chǔ)方式:
1)新發(fā)生的異常(之前未記錄過(guò)的),占用一條空白記錄位置;
2)已發(fā)生記錄的異常,在原有位置更新信息;
3)如果循環(huán)存儲(chǔ)空間已滿(mǎn),新發(fā)生的異常覆蓋最舊的故障記錄信息。
通訊顯示方式:每次通訊顯示一條記錄(占用6個(gè)16位通訊位置),對(duì)已記錄故障進(jìn)行循環(huán)顯示。
循環(huán)存儲(chǔ)以及循環(huán)顯示優(yōu)點(diǎn)如下:
1)記錄的異常信息沒(méi)有限制(只要分析識(shí)別到的異常,設(shè)計(jì)了異常捕獲方法的都可以記錄);很靈活,可以不斷增加;
2)記錄的故障信息更全面,涵蓋了發(fā)生時(shí)刻、發(fā)生次數(shù)、故障特征參數(shù);
3)記錄的故障信息定位更準(zhǔn)確,更利于故障排查;
4)通過(guò)該內(nèi)部監(jiān)視功能,可以把軟件派生的異常處理進(jìn)行顯形設(shè)計(jì);
6 實(shí)例
1、定義如下故障碼結(jié)構(gòu):
typedef struct tagFAULTINFO
{
INT16U FaultCode; /* Fault Code*/
INT16U EecTime; /* 控制器絕對(duì)時(shí)間(s),最大表示18小時(shí)*/
INT16U AcTime; /* Arinc429飛機(jī)授時(shí)(日、時(shí)、分)*/
INT16U RecordCnt; /* 記錄次數(shù)*/
INT16S FaultPara1; /* 故障特征參數(shù)1*/
INT16S FaultPara2; /* 故障特征參數(shù)2*/
}FAULTINFOSTRU;
2、對(duì)故障進(jìn)行分類(lèi):
#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、建立函數(shù)FaultSnapshot(INT16U faultcode,INT16S para_1, INT16S para_2)。
形參faultcode表示故障碼、形參para_1、para_2分別表示故障特征參數(shù)1、故障特征參數(shù)2;其中故障碼faultcode根據(jù)已分類(lèi)的故障進(jìn)行設(shè)置。
在需要異常監(jiān)測(cè)中調(diào)用FaultSnapshot,進(jìn)行故障碼的獲取。例如為了檢測(cè)N1轉(zhuǎn)速選擇分支異常。在異常發(fā)生處,調(diào)用FaultSnapshot函數(shù),故障碼設(shè)置為(EXC_INPUT_SIGNAL|EM_N1)。
7 結(jié)論
綜上所述,本文設(shè)計(jì)了一種瞬態(tài)異常的實(shí)時(shí)捕獲記錄方法。該方法使得異常記錄范圍不再受限,從而可以把焦點(diǎn)轉(zhuǎn)移到異常的識(shí)別和檢測(cè)方法設(shè)計(jì)本身。結(jié)合故障碼的設(shè)計(jì),更有利于軟件的維護(hù)。
參考文獻(xiàn):
[1]王曉東,陳道蓄.數(shù)據(jù)結(jié)構(gòu)(STL框架)[M].2009年9月第1版.
[2]William Collins.Data Structures and the Standard Template Library.McGraw-Hill Science,2002.
[3]肖建.ASP.NET 編程實(shí)例與技巧集粹[M].北京:北京希望電子出版社,2003.
[4]張海蕃.軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社,2003.
[5]趙晶.基于信息融合技術(shù)的航空發(fā)動(dòng)機(jī)智能檢查研究[M].南京航空航天大學(xué),2010.
[6]向立杰,譚杰等.先進(jìn)控制算法軟件的設(shè)計(jì)與開(kāi)發(fā)[J].計(jì)算機(jī)工程,2003,29(18):41-43.
[7]孫鶴旭,林濤.嵌入式控制系統(tǒng)[M].北京:清華大學(xué)出版社,2007,3-4.