張亞琳,李 浩,胡 驍,趙晨希
(中國(guó)運(yùn)載火箭技術(shù)研究院,北京 100076)
隨著計(jì)算機(jī)技術(shù)的飛速發(fā)展,航空和航天飛行器等系統(tǒng)的復(fù)雜化程度不斷提高。在這些系統(tǒng)中,計(jì)算機(jī)一旦失效,將導(dǎo)致巨大的經(jīng)濟(jì)損失。飛行器控制系統(tǒng)是其計(jì)算機(jī)的核心,要求能夠克服外界干擾環(huán)境的影響把飛行器的運(yùn)動(dòng)控制在相應(yīng)的速度和相應(yīng)的軌跡,對(duì)控制的精度、穩(wěn)定性及魯棒性要求非常高。飛行控制系統(tǒng)作為一個(gè)對(duì)安全可靠苛求的系統(tǒng),其安全性測(cè)試具有極其重要的意義。然而,飛行器在實(shí)際中發(fā)生的故障種類(lèi)繁多,有些故障是內(nèi)部故障,有些卻是外界干擾所致,且這些故障具有一定的潛伏期,其產(chǎn)生的破壞性效果可能波及到系統(tǒng)的多個(gè)部分,傳統(tǒng)的測(cè)試方法已難以確保系統(tǒng)準(zhǔn)確快速地檢測(cè)故障。
故障注入技術(shù)是一種通過(guò)引入外部故障,觀測(cè)系統(tǒng)運(yùn)行狀態(tài)來(lái)提高測(cè)試覆蓋性的測(cè)試方法,該技術(shù)可以有效發(fā)現(xiàn)目標(biāo)系統(tǒng)中的潛伏故障,縮短故障暴露時(shí)間,以改進(jìn)系統(tǒng)架構(gòu),目前已廣泛應(yīng)用于各類(lèi)容錯(cuò)系統(tǒng)中[1,2]。因此,研究飛行器控制系統(tǒng)的故障注入技術(shù),對(duì)于提高飛行器航行的安全性與可靠性具有重要意義。
本文根據(jù)飛行器控制系統(tǒng)的運(yùn)行特性,通過(guò)特定的技術(shù)模擬實(shí)際運(yùn)行中發(fā)生的各類(lèi)故障,人為地將其注入到系統(tǒng)中,監(jiān)控并分析系統(tǒng)的運(yùn)行情況,使系統(tǒng)能夠快速檢測(cè)故障、隔離故障和修復(fù)故障。
現(xiàn)有國(guó)內(nèi)外故障注入技術(shù)的具體實(shí)現(xiàn)方式多種多樣,其實(shí)現(xiàn)形式分為硬件實(shí)現(xiàn)和軟件實(shí)現(xiàn)[3]。硬件實(shí)現(xiàn)的故障注入方法通常利用特殊的設(shè)備或工具直接連接到目標(biāo)系統(tǒng)上實(shí)施故障注入。軟件實(shí)現(xiàn)的故障注入方法通常采用程序或者腳本來(lái)控制故障注入全過(guò)程,以避免額外的硬件開(kāi)銷(xiāo),并且具有更大的靈活性。飛行器整個(gè)控制系統(tǒng)涉及的產(chǎn)品眾多,且功能各異、鏈路復(fù)雜以及集成方式多樣。硬件故障注入方法開(kāi)銷(xiāo)太大,測(cè)試周期長(zhǎng),且無(wú)法覆蓋全面[4]。典型的軟件故障注入工具有卡內(nèi)基梅隆大學(xué)開(kāi)發(fā)的FIAT,該工具可以模擬各種分布式系統(tǒng)體系結(jié)構(gòu),向系統(tǒng)內(nèi)存和CPU注入故障[5];美國(guó)德克薩斯大學(xué)提出的FERRARI通過(guò)修改進(jìn)程的控制進(jìn)程,使用陷阱和系統(tǒng)調(diào)用以實(shí)現(xiàn)故障注入[6];伊利諾伊大學(xué)與美國(guó)宇航局合作開(kāi)發(fā)的FINE主要分析UNIX的內(nèi)核故障傳播[7];葡萄牙科英布拉大學(xué)提出的Xception要求處理器具有硬件編程接口,通用性不強(qiáng)[8];密歇根大學(xué)提出的DOCTOR主要是針對(duì)集成的軟件環(huán)境進(jìn)行瞬時(shí)、間歇或永久性故障注入。但這些系統(tǒng)都只能解決某一個(gè)方面的問(wèn)題,無(wú)法覆蓋系統(tǒng)的全部,而且均是通用型的,并未考慮結(jié)合領(lǐng)域背景,而往往結(jié)合領(lǐng)域背景的故障才是系統(tǒng)最需要的。
本文提出了一種高效的、可構(gòu)建領(lǐng)域背景的、支持多種異構(gòu)平臺(tái)和接口的實(shí)時(shí)故障注入系統(tǒng),構(gòu)建了從故障產(chǎn)生、故障注入、故障監(jiān)控、數(shù)據(jù)分析挖掘、故障預(yù)測(cè)的全鏈路故障管理平臺(tái)。
系統(tǒng)分為應(yīng)用層、服務(wù)器層和目標(biāo)系統(tǒng)三大部分,應(yīng)用層負(fù)責(zé)完成故障加載、故障生成、系統(tǒng)參數(shù)配置、接口參數(shù)配置和智能分析與預(yù)測(cè)等,支持用戶(hù)自定義的故障錄入;服務(wù)器層負(fù)責(zé)故障管理、故障注入、故障存儲(chǔ)、故障分析、結(jié)果數(shù)據(jù)收集;目標(biāo)系統(tǒng)完成狀態(tài)監(jiān)控等功能,目標(biāo)系統(tǒng)也會(huì)駐留部分功能代碼,包括數(shù)據(jù)收集模塊和綜合控制功能模塊。故障注入模塊可以支持不同的故障類(lèi)型、故障位置和故障注入時(shí)間,系統(tǒng)架構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
為保證故障測(cè)試的覆蓋性,本文采用經(jīng)典案例故障庫(kù)、面向任務(wù)定制的故障和用戶(hù)自定義故障相結(jié)合的方式生成故障。經(jīng)典故障案例錄來(lái)源于結(jié)合領(lǐng)域背景知識(shí)的故障啟示錄,充分考慮可能出現(xiàn)的接口、中斷、并發(fā)處理、數(shù)據(jù)和計(jì)算以及控制流錯(cuò)誤等各種問(wèn)題,從多種角度充分考核系統(tǒng)的可靠性。
本文將每種具體的故障抽象為故障模型,系統(tǒng)通過(guò)故障注入器,根據(jù)故障模型在故障注入時(shí)刻實(shí)現(xiàn)對(duì)特定故障的模擬。故障模型用故障的公共屬性來(lái)表征,本文采用四個(gè)屬性來(lái)描述目標(biāo)系統(tǒng)的故障模型,即故障位置、故障類(lèi)型、故障持續(xù)時(shí)間和故障注入時(shí)刻。在故障注入時(shí)刻可以選擇以上幾種模型的任意組合作為注入條件,對(duì)每一種故障類(lèi)型進(jìn)行了說(shuō)明。
表1 故障模型
表2 故障注入實(shí)例
本文從系統(tǒng)的優(yōu)化性、靈活性和可重用性等方面出發(fā),結(jié)合動(dòng)態(tài)注入和靜態(tài)注入的特點(diǎn),提出了一種動(dòng)態(tài)生成-靜態(tài)存儲(chǔ)-動(dòng)態(tài)觸發(fā)的故障注入模型,架構(gòu)圖見(jiàn)圖2。
圖2 故障注入架構(gòu)圖
服務(wù)器端負(fù)責(zé)將用戶(hù)設(shè)定的各種故障場(chǎng)景依次注入到目標(biāo)端,故障描述信息以線性表的方式存放在主機(jī)的緩沖區(qū)中。目標(biāo)端程序添加掃描故障描述信息表的語(yǔ)句塊,并加載故障描述符,進(jìn)行故障模式解析,根據(jù)故障類(lèi)型生成故障注入決策,內(nèi)容包括故障注入時(shí)機(jī)、故障注入位置和故障內(nèi)容,如生成多個(gè)決策,需依次注入執(zhí)行。故障的生成是動(dòng)態(tài)的,故障的存儲(chǔ)是靜態(tài)的,故障是運(yùn)行時(shí)動(dòng)態(tài)觸發(fā)的,從而實(shí)現(xiàn)了系統(tǒng)的靈活性和可重用性。
故障觸發(fā)模塊主要完成兩個(gè)功能:運(yùn)行目標(biāo)程序和觸發(fā)故障。具體實(shí)現(xiàn)方式為:設(shè)計(jì)后臺(tái)監(jiān)控進(jìn)程,對(duì)故障注入的全過(guò)程進(jìn)行管理;在原執(zhí)行軟件上進(jìn)行故障插樁改造。
被注入故障軟件的插樁方式通過(guò)在被測(cè)的系統(tǒng)內(nèi)可能發(fā)生故障的位置添加故障提取語(yǔ)句實(shí)現(xiàn)。如在某個(gè)“查詢(xún)系統(tǒng)狀態(tài)是否正?!钡姆种袛嗾Z(yǔ)句前添加查詢(xún)語(yǔ)句,則可根據(jù)用戶(hù)注入故障的參數(shù)執(zhí)行不同的分支。當(dāng)程序執(zhí)行到插樁的這個(gè)位置時(shí),會(huì)查詢(xún)故障表內(nèi)是否有觸發(fā)型故障,如有,則觸發(fā)該故障。后臺(tái)監(jiān)控進(jìn)程實(shí)時(shí)查詢(xún)故障表內(nèi)是否有未被注入的故障,如果有,則根據(jù)故障類(lèi)型,則將對(duì)應(yīng)故障觸發(fā)系統(tǒng)變量置為1,由被測(cè)軟件根據(jù)故障類(lèi)型來(lái)調(diào)用不同的故障體。
實(shí)時(shí)故障監(jiān)測(cè)系統(tǒng)由故障任務(wù)生成器、故障任務(wù)追蹤器、目標(biāo)系統(tǒng)控制模塊和系統(tǒng)狀態(tài)監(jiān)控器組成,系統(tǒng)架構(gòu)圖如圖3所示。故障生成器生成具體的故障任務(wù)并提交給服務(wù)器,服務(wù)器啟動(dòng)對(duì)應(yīng)的故障任務(wù)追蹤器,并激活駐留在目標(biāo)系統(tǒng)中對(duì)應(yīng)該類(lèi)故障任務(wù)的后臺(tái)追蹤進(jìn)程,隨后將任務(wù)描述信息傳遞給目標(biāo)系統(tǒng)控制模塊。由系統(tǒng)控制模塊調(diào)用對(duì)應(yīng)的系統(tǒng)狀態(tài)監(jiān)控進(jìn)程,由于故障模式不同,對(duì)系統(tǒng)的影響域?qū)⒂袠O大不同,所以不同的狀態(tài)監(jiān)控進(jìn)程開(kāi)啟的監(jiān)控項(xiàng)也會(huì)不同。在故障的有效作用時(shí)間范圍內(nèi),目標(biāo)機(jī)追蹤器會(huì)以心跳的方式定期向服務(wù)器返回系統(tǒng)運(yùn)行狀態(tài),這樣可以保證在目標(biāo)系統(tǒng)失效的情況下依然可以得到目標(biāo)機(jī)的狀態(tài)信息,而不是完全依賴(lài)于數(shù)據(jù)收集功能對(duì)目標(biāo)系統(tǒng)狀態(tài)的監(jiān)測(cè)和傳送,這樣,當(dāng)目標(biāo)系統(tǒng)失效或者數(shù)據(jù)收集功能出現(xiàn)異常時(shí),服務(wù)器還可以得到目標(biāo)機(jī)的狀態(tài)。
圖3 故障觸發(fā)機(jī)制流程圖
圖4 故障實(shí)時(shí)監(jiān)測(cè)系統(tǒng)
為維護(hù)任務(wù)信息的完整性以及保證每個(gè)任務(wù)的可追蹤性,將每個(gè)任務(wù)的控制信息均存儲(chǔ)在數(shù)據(jù)庫(kù)中。任務(wù)在生成時(shí),會(huì)創(chuàng)建任務(wù)ID,每個(gè)任務(wù)將ID向任務(wù)追蹤器注冊(cè),并且在故障注入時(shí),任務(wù)ID會(huì)隨著任務(wù)具體信息一起注入到目標(biāo)系統(tǒng),并作為任務(wù)的唯一標(biāo)識(shí),關(guān)聯(lián)任務(wù)故障信息和運(yùn)行狀態(tài)信息。
故障預(yù)測(cè)部分采用回歸和分類(lèi)結(jié)合的方法,回歸模型用來(lái)學(xué)習(xí)基于時(shí)空維度的多變量之間的關(guān)聯(lián)關(guān)系,分類(lèi)用于對(duì)回歸結(jié)果進(jìn)行矯正,以獲得更準(zhǔn)確的預(yù)測(cè)數(shù)據(jù)。首先,從飛行器綜合試驗(yàn)的大量數(shù)據(jù)中提取出不同流程和試驗(yàn)條件下的正常數(shù)據(jù)和異常數(shù)據(jù),并提取電量采集值、時(shí)序和傳感器采集值等大量參數(shù),經(jīng)過(guò)數(shù)據(jù)特征提取后轉(zhuǎn)化為學(xué)習(xí)模型的輸入;劃分訓(xùn)練集和測(cè)試集,并進(jìn)行多輪訓(xùn)練;將訓(xùn)練后的值輸入分類(lèi)模型中,將分類(lèi)模型的輸出值作為最后的預(yù)測(cè)值;計(jì)算損失函數(shù),并調(diào)整參數(shù);反復(fù)迭代,生成最終的訓(xùn)練模型。
飛行器由成千上萬(wàn)的零部件組成,可提取的參數(shù)數(shù)量極為龐大。經(jīng)過(guò)大量的參數(shù)篩選實(shí)驗(yàn),挑選了與預(yù)測(cè)飛行器故障相關(guān)的動(dòng)態(tài)性能參數(shù),并對(duì)不同參數(shù)進(jìn)行了加權(quán)處理,使得決定飛行器成敗的參數(shù)占據(jù)較大權(quán)重,預(yù)測(cè)結(jié)果更符合實(shí)際需要。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,該方法能較好的預(yù)測(cè)系統(tǒng)的表現(xiàn)趨勢(shì)。
對(duì)某飛行器控制系統(tǒng)涉及的所有軟硬件進(jìn)行故障注入測(cè)試,全系統(tǒng)分為控制計(jì)算機(jī)、時(shí)序設(shè)備、執(zhí)行機(jī)構(gòu)、信息采集機(jī)構(gòu)和遙測(cè)系統(tǒng)。針對(duì)每個(gè)系統(tǒng)功能和軟硬件特性,制定如圖5所示故障注入計(jì)劃。
圖5 各系統(tǒng)故障注入測(cè)試用例首次不通過(guò)率
對(duì)每一種故障實(shí)例選取的依據(jù)是圖5的故障分類(lèi)模式,故障注入的實(shí)例和測(cè)試運(yùn)行結(jié)果存儲(chǔ)在系統(tǒng)日志中,測(cè)試的統(tǒng)計(jì)結(jié)果如圖5所示。
各系統(tǒng)軟件運(yùn)行平臺(tái)和功能差異較大,對(duì)于同樣的故障,表現(xiàn)出的可靠性差別較大,但是在所有系統(tǒng)中,幾乎均是通信過(guò)程可靠性程度不高,證明各系統(tǒng)在接口匹配上存在較大問(wèn)題。對(duì)于時(shí)序設(shè)備和遙測(cè)系統(tǒng)此類(lèi)含F(xiàn)PGA軟件的設(shè)備,在時(shí)序匹配方面存在個(gè)別問(wèn)題??刂朴?jì)算機(jī)軟件采用多線程架構(gòu),在多線程使用方面存在問(wèn)題。對(duì)嵌入式軟件,通常有多中斷交互功能,經(jīng)過(guò)強(qiáng)行激發(fā)連續(xù)中斷信號(hào)的考核,時(shí)序設(shè)備和信息采集機(jī)構(gòu)的軟件出現(xiàn)中斷處理丟失的問(wèn)題。通過(guò)激發(fā)鏈路故障,也測(cè)試出系統(tǒng)容錯(cuò)設(shè)計(jì)的缺陷。
對(duì)經(jīng)過(guò)初次故障注入系統(tǒng)考核的設(shè)備,待改善之后,對(duì)其再次進(jìn)行考核,并且重新生成故障實(shí)例,如此迭代多次,直到各設(shè)備連續(xù)三次通過(guò)全部故障用例。在每次迭代測(cè)試中,各設(shè)備的故障通過(guò)率不斷提升,平均迭代測(cè)試10次,基本可以達(dá)到通過(guò)全部故障用例。系統(tǒng)能夠通過(guò)故障用例的個(gè)數(shù),反映著系統(tǒng)的可靠度,在前幾次測(cè)試時(shí),系統(tǒng)可靠度可大幅提升,因?yàn)槌跗跍y(cè)試時(shí)發(fā)現(xiàn)的都是共性問(wèn)題,而到后期,能夠發(fā)現(xiàn)的問(wèn)題趨于個(gè)性化,并且發(fā)生的條件較為復(fù)雜,所以可測(cè)試出問(wèn)題的個(gè)數(shù)大幅減少,系統(tǒng)可靠度提升趨于緩慢,最終達(dá)到較為穩(wěn)定的狀態(tài)。
本文設(shè)計(jì)并實(shí)現(xiàn)了面向飛行器控制系統(tǒng)的高實(shí)時(shí)故障診斷系統(tǒng),可結(jié)合具體應(yīng)用場(chǎng)景生成定制化的故障用例,并實(shí)現(xiàn)動(dòng)靜結(jié)合的故障注入機(jī)制,通過(guò)高效的故障監(jiān)控手段實(shí)現(xiàn)實(shí)時(shí)性,并能將測(cè)試結(jié)果存儲(chǔ),用于故障分析和預(yù)測(cè)。通過(guò)試驗(yàn)證明,該故障注入系統(tǒng)可輔助提升飛行器系統(tǒng)的可靠性,對(duì)于提升飛行試驗(yàn)的成功率具有重要意義。