李勇 糜杰 施浩琴
摘要:針對某項目軟件開發過程中出現的故障類型繁多,故障申報規模龐大的問題,設計了一種采用實時故障與非實時維護故障分類處理的方法。該方法首先通過對航空發動機控制軟件中常見申報故障進行分類處理,其次針對不同類型的故障設計不同故障碼,最后針對軟件內部運行異常專門設計了軟件的異常捕獲記錄功能。試驗結果表明,設計的故障分類方法具有良好的故障申報效果,適用于復雜系統的故障診斷檢測。
關鍵詞:故障診斷;故障申報;實時故障碼;維護故障碼;軟件異常捕獲與記錄
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.