,,,
(南京航空航天大學(xué) 自動化學(xué)院,南京 210016)
隨著技術(shù)的發(fā)展和對無人機飛行功能的需求日益增加,飛行控制計算機所承擔的任務(wù)越來越復(fù)雜,飛行控制系統(tǒng)的復(fù)雜度也越來越高,從而故障出現(xiàn)的概率也越來越頻繁,因此飛控系統(tǒng)的可靠性急需提高[1]。目前,最廣泛的方法是從系統(tǒng)的層面入手,即采用余度技術(shù)實現(xiàn)系統(tǒng)容錯[2]。
從軟硬件實現(xiàn)角度,通過余度實現(xiàn)容錯的技術(shù)可分為相似余度和非相似余度容錯技術(shù)[3]。相似余度采用同構(gòu)型的硬件平臺,各平臺運行同一版本軟件,通過增加冗余實現(xiàn)容錯。非相似余度采用不同硬件或不同軟件版本來構(gòu)成余度容錯[4]?;趯Τ杀究刂坪拖到y(tǒng)復(fù)雜度的考慮,相似余度更適用于樣例飛控計算機。相似余度容錯技術(shù)依賴于高可靠度的軟件設(shè)計[5],基于該要求,本文在實時嵌入式操作系統(tǒng)VxWorks上搭建余度管理層和應(yīng)用層,便于余度管理策略的規(guī)劃和實施。余度管理的設(shè)計中,時間同步是前提條件,對同步精度要求較高且需要抑制干擾;封裝表決是具體措施,需要易于開發(fā)移植,便于實現(xiàn);系統(tǒng)重構(gòu)是安全保障,在重構(gòu)過程中仍要保證系統(tǒng)正常運行。本文從上述三方面出發(fā),以問題為導(dǎo)向,對樣例飛控系統(tǒng)余度管理算法的設(shè)計進行了詳細的闡述。
基于CAN總線的相似三余度飛行控制計算機硬件架構(gòu)如圖1所示,飛控系統(tǒng)由CPU板卡和接口板卡組成,CPU板卡采用三余度設(shè)計,實施余度管理策略,各接口板卡唯一,無冗余備份,完成對封裝數(shù)據(jù)的表決輸出。所有板卡均采用了PowerPC架構(gòu)的MPC565的微處理器,其性能足夠支撐余度擴展帶來的負載變化。各板卡之間采用分布式架構(gòu),相對獨立,通過CAN總線進行數(shù)據(jù)通信,便于余度擴展的實現(xiàn)。CAN總線的高可靠性、高實時性和較強的抗干擾能力滿足飛控系統(tǒng)的要求,數(shù)據(jù)重發(fā)機制和非破壞總線仲裁機制[6-7]保證了板卡間數(shù)據(jù)交互的安全、可靠,滿足余度擴展對數(shù)據(jù)傳輸?shù)男阅芤蟆?/p>
圖1 飛控計算機硬件架構(gòu)示意圖
為了滿足飛行控制計算機對實時性和可靠性的嚴格要求,飛控系統(tǒng)采用嵌入式實時操作系統(tǒng)VxWorks作為飛控軟件的運行平臺。VxWorks具備強實時性和高可靠性的優(yōu)點,可通過裁剪在保證其完整性的前提下大幅縮小其規(guī)模[7],減少對飛控計算機有限內(nèi)存的占用。此外,其基于優(yōu)先級搶占和基于時間片輪轉(zhuǎn)的任務(wù)調(diào)度方式,有利于實現(xiàn)飛控軟件的任務(wù)管理,便于余度管理的實現(xiàn)。
飛控系統(tǒng)結(jié)構(gòu)層次劃分如圖2所示。自下而上依次是硬件層、操作系統(tǒng)層、余度管理層、應(yīng)用層。余度管理作為核心層,管理著應(yīng)用層的冗余資源,各CPU板卡在余度管理層的指導(dǎo)下運行控制軟件,通過數(shù)據(jù)采集、同步、控制律解算等步驟,將結(jié)果匯總于管理層加以表決,最終輸出可靠的控制指令,完成精確控制[8]。
圖2 系統(tǒng)結(jié)構(gòu)層次劃分示意圖
同步是三余度飛行控制計算機余度管理的基礎(chǔ)和前提條件,只有在同步的情況下,對解算結(jié)果的監(jiān)控表決才有意義。對于執(zhí)行周期較短的控制律解算任務(wù)而言,時間延遲最好控制在1 ms以下,以免對控制品質(zhì)造成影響。鑒于樣例飛行控制計算機采用的是VxWorks嵌入式實時操作系統(tǒng),該操作系統(tǒng)以任務(wù)調(diào)度為核心,所以任務(wù)同步方式更適合于本系統(tǒng)。同時,通過周期性地調(diào)用時鐘同步任務(wù),校正本地時鐘,盡可能地減少與主CPU的時鐘偏差,為任務(wù)同步提供良好的同步環(huán)境。其中,時鐘同步算法中最為經(jīng)典的是TPSN算法[9],該算法相比與其他算法實現(xiàn)難度小且穩(wěn)定性好,可以達到全局時鐘同步,但無法補償由于電壓波動、溫度變化、制作工藝等導(dǎo)致的相對時鐘漂移誤差,誤差的積累最終會造成故障的蔓延。本文提出將任務(wù)同步算法與TPSN算法相結(jié)合的方法,二者相互輔助,可以在保證時鐘同步的同時補償時漂帶來的累積誤差,為之后的表決提供前提條件。
任務(wù)同步是在余度管理程序的指導(dǎo)下進行的。當運行到需要表決的關(guān)鍵任務(wù)時,各CPU板廣播任務(wù)同步幀,任務(wù)同步幀信息包括CPU板卡ID號、任務(wù)ID號、任務(wù)執(zhí)行周期序號、同步狀態(tài)等,然后在限定時間內(nèi)查詢接收到的任務(wù)同步幀情況。如果在超時前接收到其余兩通道CPU的本次任務(wù)同步幀,則表示本次同步成功,結(jié)束同步等待,三塊CPU同時開始執(zhí)行本次任務(wù);若等待超時,則在執(zhí)行任務(wù)的同時將同步情況發(fā)送至表決板卡。同步算法流程圖如圖3所示。
圖3 任務(wù)同步算法流程圖
雖然任務(wù)同步過程中對于非本地CPU的任務(wù)同步幀是實時接收的,但仍可能出現(xiàn)因CPU之間異步度過大而導(dǎo)致時鐘偏差超過同步等待時間的情況,因此各板卡之間的時鐘同步也是必要的。本文采用發(fā)送者-接受者同步機制,在TPSN時鐘同步算法基礎(chǔ)上加以簡化,采用定周期循環(huán)方式,每隔10 s執(zhí)行一次時鐘同步任務(wù),任務(wù)執(zhí)行過程中若檢測到時鐘異步度大于1 ms則執(zhí)行時鐘同步操作,否則不執(zhí)行該操作,同步過程如圖4所示,
圖4 時鐘同步過程
以CPU_B的同步過程為例,同步周期時間到時,CPU_B向主CPU發(fā)送時鐘同步幀,幀中包含本CPU發(fā)送時間信息(TB1),主CPU接收到后記錄下接收時間TB2,并在TB3時刻發(fā)送時鐘響應(yīng)幀,幀中包含信息(TB1,TB2,TB3),CPU_B在TB4時刻接收到響應(yīng)幀,由此滿足關(guān)系:
TB1+Td+θ=TB2
TB3+Td-θ=TB4
設(shè)傳輸延遲為Td,兩CPU板時間偏差為θ,CPU_B可通過上述關(guān)系得出相比于主CPU的時間偏差θ:
CPU_B根據(jù)θ值,調(diào)用VxWorks提供的API函數(shù)sysClkRateSet(int rate),通過設(shè)置每秒產(chǎn)生的時間片數(shù)量來撥快或撥慢時鐘[10],實現(xiàn)與主CPU的時鐘同步。
表決是通過故障屏蔽來實現(xiàn)系統(tǒng)在故障情況下正常輸出的重要環(huán)節(jié),是余度管理的具體實現(xiàn)措施。表決的基本工作原理是:對系統(tǒng)中同時工作的N個余度部件,基于某種規(guī)則,對其輸出結(jié)果投票表決,以多取勝,達到?jīng)Q策輸出正常的目的。
本飛控系統(tǒng)對輸出結(jié)果進行表決,表決項包括模擬量輸出、離散量輸出以及PWM信號輸出,表決過程由各CPU板卡將解算結(jié)果分別發(fā)送至對應(yīng)的接口板卡上,在各接口板卡表決空間中完成決策輸出。
1)離散量輸出表決:由于離散量為二值信號量(0或1),故可以采用簡便的相加策略,將三塊CPU板輸出的DO信號量對應(yīng)相加,當結(jié)果為0或3時,直接取輸出值;當結(jié)果值為1時,則決策輸出0,同時輸出值為1的板卡記一次瞬態(tài)故障;當結(jié)果值為2時,則決策輸出1,同時輸出值為0的板卡記一次瞬態(tài)故障。
2)模擬量和PWM信號輸出表決:由于模擬量和PWM信號輸出值均為浮點類型,故需要考慮數(shù)據(jù)精度的影響。將原始數(shù)據(jù)除以數(shù)據(jù)表示精度,轉(zhuǎn)換成整數(shù)再通過CAN標準幀封裝傳輸。表決空間收到各CPU輸出結(jié)果后,直接比對封裝值,僅將最終表決結(jié)果轉(zhuǎn)化為原始數(shù)據(jù)通過接口板卡輸出,減少了運算量,有利于減少表決環(huán)節(jié)的耗時,提高系統(tǒng)實時性,相比于傳統(tǒng)方式,減少了代碼冗余,降低了開發(fā)的難度。表決過程如下:
表1 得票數(shù)與表決結(jié)果及故障評價對應(yīng)關(guān)系
根據(jù)樣例飛控計算機的硬件架構(gòu)可以得知,本飛控系統(tǒng)包括3塊CPU板卡和4塊接口板卡。各CPU板卡實時解算,將解算結(jié)果分類通過CAN總線傳輸至各接口板卡,接口板卡通過表決決策輸出,同時建立故障評價表。各接口板卡每秒向主CPU輸送一次各自的評價結(jié)果,由主CPU綜合評判,同時清空評價表,開始下一秒故障計數(shù)。
在無故障情況下,樣例飛控計算機的3塊CPU同步運行,通過余度管理決策出最終輸出,保證了輸出結(jié)果的可靠性。當某塊CPU板卡每秒瞬態(tài)故障次數(shù)超過10次且故障現(xiàn)象維持連續(xù)3秒以上,該CPU板卡被判別為故障并進行屏蔽處理,飛控計算機轉(zhuǎn)換為主從備份的雙機運行狀態(tài),其中ID號較小的為主CPU。同時對故障CPU實行故障恢復(fù)措施,恢復(fù)完成后重新加入余度管理網(wǎng)絡(luò)并加以監(jiān)控。若該CPU連續(xù)10秒運行正常,則系統(tǒng)重新恢復(fù)為三余度,反之則表示恢復(fù)失敗,將該CPU板卡置永久故障,系統(tǒng)維持雙機運行狀態(tài)。同理,雙機運行狀態(tài)下出現(xiàn)CPU故障,系統(tǒng)繼續(xù)降級為單機工作模式。系統(tǒng)降級與恢復(fù)邏輯如圖5所示。
圖5 系統(tǒng)降級與恢復(fù)邏輯
由于系統(tǒng)采用分布式架構(gòu)設(shè)計,各板卡之間的信息與資源交互均通過三路CAN總線實現(xiàn),所以總線的可靠度尤為重要,總線冗余必不可少。本系統(tǒng)中,三路CAN總線以熱備份的工作模式進行冗余,優(yōu)先級由高到低為CAN0、CAN1、CAN2。初始使用CAN0通信,當故障檢測判斷總線故障,則降級為雙總線熱備份,使用CAN1通信,再發(fā)生故障時進入CAN2單總線工作模式。降級過程中,將故障總線重新初始化并通過總線檢測幀檢查其狀態(tài),檢測正常則重新加入總線網(wǎng)絡(luò),同時置優(yōu)先級為最低,否則該總線判故,不再使用。
為了驗證所設(shè)計的余度管理策略的合理性,本文對上述各關(guān)鍵環(huán)節(jié)進行單獨測試,通過測試結(jié)果驗證設(shè)計方案。
三機同步是余度管理的前提條件,為了便于觀察,在三塊CPU中運行周期為10 ms的同步測試任務(wù),每個任務(wù)周期開始時輸出高電平信號,同步完成后輸出低電平信號。在無故障運行狀態(tài)下,通過示波器監(jiān)控三塊CPU的GPIO口電平,得到的輸出情況如圖6(a)所示。由于時鐘異步度是時漂長時間累積的過程,所以為了在短時間內(nèi)得到測試結(jié)果,人為地將CPU_B的時鐘節(jié)拍調(diào)慢,經(jīng)過一段時間的運行后,時鐘偏差的累積超過了1 ms,時鐘同步任務(wù)檢測到異步度超出允許范圍,進行時鐘同步操作,使時鐘偏差縮小到1 ms內(nèi)。如圖6(b)所示,CPU之間的異步度經(jīng)過時鐘同步操作縮小到了0.4 ms內(nèi),此時定周期運行的同步測試任務(wù)通過任務(wù)同步算法將時間異步度進一步縮小至0.1 ms內(nèi),二者協(xié)同完成了本輪時間同步的操作。在無故障運行狀態(tài)下,三塊CPU運行的測試任務(wù)分別調(diào)用不同的延時任務(wù),使各CPU處于異步狀態(tài),通過示波器監(jiān)控3個GPIO口電平,得到的輸出情況如圖6所示,其中(a)為三機電平信號波形圖,(b)為其中一個任務(wù)周期同步過程放大后的波形圖。
封裝表決是余度管理的重要實施環(huán)節(jié),為了便于觀察,將余度管理層表決處理模塊單獨提出,通過輸入各CPU實際數(shù)據(jù),在開發(fā)工具Visual Studio 2008上運行表決模塊,將表決過程中的關(guān)鍵數(shù)據(jù)打印輸出,驗證表決算法。其中待表決數(shù)據(jù)為執(zhí)行機構(gòu)控制量,判決閾值H為100,數(shù)據(jù)精度要求R為0.01。
圖6 同步測試驗證結(jié)果
運行結(jié)果如圖7所示,從圖(a)中可以看出,在注入三塊CPU輸出的原始數(shù)據(jù)的情況下,表決計算得出CPU之間的數(shù)據(jù)總差均小于判別閾值H,因而三塊CPU得票數(shù)均為2,CPU_A由于優(yōu)先級最高而勝出,決策輸出CPU_A的數(shù)據(jù),其余兩CPU落選;接著向CPU_A和CPU_C中注入常規(guī)故障數(shù)據(jù)后,根據(jù)表決算法,應(yīng)該決策輸出CPU_B的數(shù)據(jù),由圖(b)可以看出,CPU_A和CPU_C得票數(shù)均降至1票,CPU_B勝出,與預(yù)測結(jié)果一致;同理,如圖(c)所示,單獨向CPU_B注入嚴重錯誤數(shù)據(jù)后,CPU_B得票數(shù)降為0,CPU_A勝出且置CPU_B一次瞬態(tài)故障,與設(shè)計結(jié)果一致;最后,將上述故障分別注入三塊CPU,由圖(d)可以看出,各CPU得票數(shù)均為0,因而其輸出均不可信,表決結(jié)果在輸出安全值的同時記三塊CPU各一次瞬態(tài)故障,與算法設(shè)計相符。其中(a)為原始無故障數(shù)據(jù)表決結(jié)果,(b)為向CPU_A、CPU_C注入常規(guī)故障數(shù)據(jù)后的表決結(jié)果,(c)為向CPU_B單獨注入嚴重故障數(shù)據(jù)后的表決結(jié)果,(d)為綜合注入上述故障數(shù)據(jù)后的表決結(jié)果。
圖7 封裝表決測試驗證結(jié)果
分析上述測試結(jié)果可以得知,同步算法可以實現(xiàn)三機的任務(wù)級時間同步,同步精度小于0.1 ms,同步過程耗時小于0.8 ms,多次執(zhí)行同步任務(wù)后沒有出現(xiàn)時漂誤差的累積,滿足系統(tǒng)控制需求。封裝表決算法可以很好地完成表決功能,多次測試結(jié)果無誤,可以用于實現(xiàn)余度管理策略。
本文基于樣例三余度飛行控制計算機,結(jié)合VxWorks實時嵌入式操作系統(tǒng),設(shè)計了余度管理策略,并通過測試驗證了所設(shè)計的余度管理策略。試驗結(jié)果表明,設(shè)計合理有效,余度管理策略各關(guān)鍵環(huán)節(jié)可很好地完成相應(yīng)功能,提高了飛行控制系統(tǒng)的容錯能力和可靠度。
[1] 胡靖楓, 陳 楸, 段曉軍. 無人機3×1架構(gòu)余度管理軟件設(shè)計與開發(fā)[J]. 計算機測量與控制, 2013, 21(3):809-810.
[2] Kristina Ahlstrom, Jan Torin. Future architecture for flight control system[A]. The 20th Digital Avionics Systems Conference [C]. Daytona Beach: IEEE, 2001.
[3] 楊文濤, 李志宇, 李洪冬. 基于PowerPC和x86非相似余度無人機飛控計算機設(shè)計[J]. 計算機測量與控制, 2013(2):451-453.
[4] 孫 波, 石 鑫. 非相似余度計算機的研究[J]. 裝備制造技術(shù), 2015(4):257-259.
[5] 安金霞, 朱紀洪, 王國慶,等. 多余度飛控計算機系統(tǒng)分級組合可靠性建模方法[J]. 航空學(xué)報, 2010, 31(2):301-309.
[6] 雷 霖. 現(xiàn)場總線控制網(wǎng)絡(luò)技術(shù).第2版[M]. 北京:電子工業(yè)出版社, 2015.
[7] 孟 沖. 小型無人機負荷分擔式容錯飛行控制軟件設(shè)計[D]. 南京:南京航空航天大學(xué), 2015.
[8] 尹永鑫. 針對長航時無人機的簡易余度飛控系統(tǒng)故障重構(gòu)方法: CN, CN 103529692 A[P]. 2014.
[9] Ganeriwal S, Kumar R, Srivastava M B. Timing-sync Protocol for Sensor Networks[A].International Conference on Embedded Networked Sensor Systems[C]. ACM, 2004:138-149.
[10] 張 楊, 于銀濤. VxWorks內(nèi)核、設(shè)備驅(qū)動與BSP開發(fā)詳解.第2版[M]. 北京:人民郵電出版社, 2011.