盧月,李維波,李巍,李齊,孫萬峰
武漢理工大學 自動化學院,湖北 武漢 430070
電站是現代艦船的重要組成部分,其可靠性和穩定性將直接影響艦船電力系統的生命力。雙CPU冗余技術作為提高系統可靠性的有效手段之一,已廣泛應用于艦船電站的控制系統。在雙CPU冗余系統的不同工作模式中,目前應用最為廣泛的是相對簡單、高效的熱備冗余模式[1-2],其工作方式是2個CPU同時上電運行,并且雙方實時進行信息交互。在正常工況下,主CPU承擔輸出任務,備用CPU僅接收不輸出,同時監控主CPU是否正常,以便及時發現故障并迅速切換。由熱備冗余的工作原理可知,故障檢測是雙CPU熱備冗余系統可靠性的重要保證,只有及時地檢查出故障,才能達到冗余容錯的目的。
為此,呂聰等[3]采用了看門狗設計,即主CPU通過串口通信,每隔一個周期向從CPU發送喂狗信號,如果從CPU在一定時間內未收到喂狗信號,則立即將整個主CPU復位。徐一鳳等[4]采用了主/從CPU之間的心跳檢測,即周期性互發心跳值,如果主CPU沒有收到從CPU的心跳信號,則主CPU仍然正常運行;如果從CPU沒有收到主CPU的心跳信號,則將從CPU切換為主CPU。鄒見效[5]結合PUSH和PULL心跳檢測模式改進了心跳檢測算法,即如果從CPU在一個時間周期內收到主CPU的心跳信號,則進入下一個定時周期;如果沒有收到,則立刻對主CPU進行檢測,判斷其是否失效;如果在下一個周期內仍未收到主CPU的響應信息和心跳信息,則可以判定主CPU失效。以上3種方法均基于主CPU故障檢測的角度出發,而沒有考慮硬件問題。在實際工作中,當2個CPU之間的通信線路出現故障時,則有可能被誤判為主CPU故障,即在主CPU還正常工作時,從CPU也開始執行任務,從而出現“雙主機現象”。
為了避免這種情況,張軍永等[6]采用了雙冗余心跳檢測機制,即2個CPU之間通過2根信號線來檢測故障狀態,因為2根信號線同時出現故障的概率很低,所以僅有1根信號線出現心跳故障時,即判定為該信號線故障;只有當2根信號線均出現故障時,才判定為CPU故障。雖然該方法在一定程度上避免了“雙主機現象”,但其增加了1根信號線,就相當于增加了系統架構的復雜度和維修量,以及投入成本。
綜上所述,目前的故障檢測方法主要集中于CPU能否通過通信線路正常地發送監控CPU所需要的信息,以及研究如何避免通信線路故障對CPU故障判斷的影響。對于雙CPU冗余系統來說,2個CPU之間的正常通信并不能代表整個冗余系統工作正常,CPU能否正常地接收、發出指令與CPU本身是否正常一樣重要。因此,為了對雙CPU冗余系統進行故障檢測,本文擬提出一種雙CPU冗余通信架構下的混成式故障檢測方法,通過將網絡故障檢測法和第三方監控心跳法集成一體,形成混成式故障檢測機制,以提高CPU故障檢測的速度與精確性,從而提高艦船電站控制系統的可靠性,并更好地適應艦船電站設備多、工況繁雜等情況。
雙CPU冗余通信系統的整體架構如圖1所示,由2個CPU通過互冗余方式組成,每個CPU均通過一路以太網與集控臺進行雙向通信,完成分/合閘、報警故障等重要指令的上傳功能,同時這2個CPU之間也通過以太網進行信息交互。由于控制器與集控臺之間的距離較遠,所以控制器(底層)與集控臺(頂層)之間也采用以太網進行數據通信。以太網采用光作為介質,抗干擾能力強、傳遞數據多、傳輸速度快,可以保證高速數據傳輸信號的可靠性[7-8]。
圖1中的2個CPU都經由1路控制器局域網絡(controller area network, CAN )與底層設備進行雙向通信,且這2路CAN都在一條CAN總線上。由于CAN是一種可以有效支持分布式控制或實時控制的串行通信網絡,所以在眾多子節點的情況下,CAN總線具有很大的優勢,它能夠完成通信數據的成幀處理、位填充、數據塊編碼、優先級判別、CRC校驗等工作。由于其報文采用短幀結構,所以傳輸時間短,不易受到環境干擾,具有較高的可靠性。同時,CAN總線采用了多主控制,即所有的單元都可以發送消息,根據單元的標識符比較,即可實現優先級高的發送消息,其他設備接收消息,而不用區分主/從設備,以便在總線上添加其他CAN單元;在電氣負載允許的情況下,可以添加多個CAN單元模塊[9-10]。
由于艦船電站控制系統底層控制器的數量眾多,需要采集、發送大量的輸入/輸出(I/O)指令信號和狀態信號,所以本文將采用基于I2C總線的I/O端口擴展芯片來實現數字量信號集成化。2個CPU分別通過2路普通I/O口模擬的I2C總線信號與I/O擴展芯片相連,再經由擴展芯片與底層設備相連[11]。
在正常情況下,2個CPU都可以接收指令和數據,但只有1個CPU可以發出指令,另一個處于備份狀態,參與故障檢測并隨時準備故障切換。
為了提高艦船電站控制系統的可靠性,通信系統應具備一定的容錯能力。一旦出現故障,通信系統應準確地檢測、定位故障并進行實時處理,所以通信系統需要一種穩定、可靠的故障檢測方案。為此,本文擬提出混成式故障檢測方法,即將網絡故障檢測和第三方監控心跳集成一體的新型檢測方法。
網絡故障檢測法可以對雙CPU熱備冗余系統進行定時、全面的檢查,以確保整個冗余系統(包括CPU、通信線和外設)都正常運行。所謂網絡故障檢測法,即將系統中的CPU、外設等均視為節點,將通信總線視為連接各個節點的線,這樣就可以將圖1中的系統架構抽象化為一個網絡,如圖2所示,其中:CPU1,CPU2為主節點a,b;外設集控臺和底層設備為子節點c,d;λ1a,λ1b分別為集控臺與CPU1,CPU2之間的以太網連線;λ2為2個CPU之間的以太網連線;λ3a,λ3b分別為底層設備與CPU1,CPU2之間的CAN連線;λ4a,λ4b分別為底層設備與CPU1,CPU2之間的I2C連線。

圖 2 雙CPU冗余系統的網絡圖Fig.2 Network diagram of dual CPU redundant system
設定節點狀態為0時表示節點正常,為1時則表示節點故障。連線λ的狀態同理,可以根據與其相連的兩端節點通信是否正常來判斷,例如,CPU1通過以太網向集控臺發送信號,如果連續2個周期未收到回復,則a與c之間的連線λ1a狀態為1。為便于理解,本文采用a,b,c,d,λ1a,λ1b,λ2,λ3a,λ3b,λ4a,λ4b分別表示4個節點和其間連線的運行狀態,因此,各個節點狀態的計算公式為

由式(1)~式(4)可知,如果與一個節點相連的所有連線狀態λ均為1,即故障,則可判定該節點故障。根據網絡故障檢測法的原理,CPU與所有外設通信的過程實際上就是連線狀態檢測的過程,當通信結束之后,通信線路和各個節點的狀態都得以更新,所以該方法兼具全面性和便捷性。
由于網絡故障檢測法是系統、全面的檢測,所以需占用一定的時間成本,如果檢測過于頻繁,則將影響系統通信的時效性,因此,該方法適用于系統的定期檢查,而不是實時故障檢測。CPU作為艦船電站控制系統的重要設備,如果僅依靠網絡故障檢測法,則可能無法及時檢測故障,這對于系統來說是致命的設計缺陷,因此,還需要采用一種專門為CPU進行故障檢測的第三方監控心跳法。
傳統的心跳檢測法采用了單一線路進行故障檢測,所以會出現“雙主機現象”,而第三方監控心跳法可以解決這一問題。在不改變現有通信系統架構的前提下,僅需引入系統中的第三方設備——與2個CPU均相連的集控臺,即可形成雙重心跳檢測保障機制,如圖3所示。

圖 3 第三方監控的心跳檢測示意圖Fig.3 Heartbeat detection diagram of third party monitoring
由圖3可知,主/從CPU之間僅有1路心跳檢測,當主CPU向從CPU發送心跳信號的同時,也會向集控臺同步心跳狀態,包括心跳信息和更新時間。如果從CPU在規定時間內未收到心跳信息,則將主動向集控臺查詢,以確定主CPU是否故障;如果確定是主CPU故障,則立即切換;如果不是,則標記通信線路故障。由于第三方查詢的加入,實現了多點、多重檢測,以避免因依靠單一通信線路而誤判的CPU故障,從而提高了故障判斷的精準度。與傳統的心跳檢測方法相比,第三方監控心跳法在正常情況下的故障監測時間并未延長,僅在未收到主CPU心跳信息時,多了一項查詢時間;由于該檢測周期很短,所以對系統通信的實時性并無影響。
2種故障檢測方法均利用定時器產生中斷的方式進行周期性檢查,其中網絡故障檢測法的檢測周期大于第三方監控心跳法。當系統上電初始化之后,應先利用網絡檢測法進行上電檢查,以確保系統可以正常運行,然后再進入主循環。
由網絡故障檢測法的原理可知,通過分析所有通信線的連線狀態λ,即可掌握CPU和所有外設的工作狀態,其故障檢測過程分為3類,簡述如下:
1) 通信線故障檢測。
CPU通過與其相連的總線向外設發送數據,如果在2個周期內收到正確的應答,則將該總線對應的連線狀態λ設為0,即表示該通信線正常。如果在2個周期內未收到應答或應答不正確,則將其連線狀態λ設為1,其檢測流程如圖4所示。
2) CPU故障檢測。
CPU依次通過與其相連的總線向外設發送數據,如果在2個周期內均通信失敗,即未收到正確的應答,則表明該CPU故障,應將其對應的節點狀態設為1。
3) 外設故障檢測。

圖 4 通信線檢測的流程圖Fig.4 Flow chart of communication thread detection
如果2個CPU都收不到任何與該外設相連的總線數據,則表明該外設故障,應將其對應的節點狀態設為1;如果只是無法通過總線接收數據,則表明該總線故障,應將該總線對應的連線狀態λ設為1。
因此,通過綜合通信線、CPU和外設的故障檢測結果,即可準確定位故障部件,從而及時切換并部署維修。
相較于傳統的心跳檢測法,第三方監控心跳法在軟件流程上多了主CPU向第三方發送心跳信息和從CPU向第三方查詢心跳信息的過程,其檢測過程如圖5所示。

圖 5 第三方監控的心跳檢測流程圖Fig.5 Flow chart of third-party monitoring heartbeat detection
上電之后,主CPU在每個周期都會向從CPU發送特定的數據,即心跳信號;與此同時,主CPU也會向集控臺同步心跳信息,包括發送內容和發送時間。如果從CPU定期接收到正確的數據,則繼續保持備機狀態;如果從CPU連續2個心跳周期沒有收到數據或收到錯誤的主CPU數據,則從CPU將主動查詢集控臺中的主CPU心跳同步信息。如果查詢到主CPU的同步信息正常,則判定為2個CPU之間的通信線故障;若查詢到主CPU最近一次的同步時間大于1個心跳周期,則將主CPU進行復位,同時從CPU獲得控制權,開始承擔系統的主CPU任務。對于復位后的主CPU,將采用網絡故障檢測法進行評估判斷,如果其仍處于故障狀態,則立即更換;如果可以正常工作,則處于備機狀態。

圖 6 雙CPU主板的原理框圖Fig.6 Principle block diagram of dual CPU main board
本文通信裝置所采用的CPU芯片為STM32 F417ZGT6,這是一款由ST公司發行的基于ARM Cortex-M4內核的32位處理器,其最大的優勢是配置了硬件FPU單元和DSP指令集,且其主頻頻率高達168 MHz;該芯片擁有15個通信接口,其中包括3個SPI,2個CAN以及3個I2C接口。本通信裝置的CAN和以太網均外接了隔離芯片,且以太網采用了4芯接插件。
本通信裝置包括5塊PCB板,分別為2塊獨立的CPU主板、1塊DI板和2塊DO板,其中CPU主板上配置了通信模塊、復位模塊、電源模塊和存儲模塊,如圖6所示。由于2塊CPU主板都需要外接相同的DI/DO板,所以采用了便于裝拆和維修的雙層物理架構,如圖7所示。
除了雙CPU主板之外,其他3塊板卡也采用了上下雙層物理結構,且置于主板上方。這5塊PCB板均封裝于一個金屬箱內,如圖8所示,該金屬箱具有很好的密閉性,可以避免該器件在艦船的潮濕環境中失效。
基于硬件電路,應按照現場裝置的實際運行要求編寫主程序,并依據故障檢測軟件的設計思路編寫故障檢測子程序。主程序為基本的裝置初始化,DI/DO的開入/開出和對外通信,同時通過設置周期性中斷,從而在中斷服務函數中完成裝置的定時故障檢測與判斷。本通信裝置程序的重要技術參數如下:以太網通信周期為2 ms/次;CAN通信周期為10 ms/次;由于第三方監控心跳檢測是通過以太網進行通信,所以其故障檢測周期與以太網的通信周期一致;考慮到網絡故障檢測法需占用一定的通信時間,參考CAN通信周期,將其設置為20 ms/次,以避免影響通信的時效性。

圖 8 通信裝置的實物圖Fig.8 Physical diagram of communication device
為了驗證本文冗余系統的可靠性,即能否及時發現故障并進行處理,本文將人為制造故障并實時監測系統的運行情況。根據系統的設計需求,其故障檢測的技術指標如表1所示。

表 1 故障檢測指標Table 1 Fault detection indexes
本文搭建了如圖9所示的簡易測試平臺,即2個CPU均通過1路CAN與電腦相連,而電腦通過CANMonitor軟件對CAN通信進行監測。由于本系統的核心是雙CPU冗余,所以本文將在系統上電運行一段時間之后,人為對處于正常工作狀態的主CPU進行復位,并根據CAN通信的監測結果來判斷CAN通信是否受到了影響。如果CAN通信未受到影響且持續通信,則表明該系統可以及時切換故障CPU。

圖 9 CAN通信系統的實物圖和測試結果Fig.9 Physical diagram of CAN communication system and its test results
通過修改CAN通信的相關程序,將主CPU的CAN幀ID設為0x06,從CPU設為0x92。上電之后,主CPU發送02 04 08 16 32 64 B1 B6的8位數據,從CPU處于監測狀態;如果從CPU接替工作,則發送A5 5A 05 82 00 03 00 01的8字節數據。由圖9(b)的測試結果可知,在主CPU發送了一段時間的數據之后,從CPU接替了其工作,從而保證了主CPU故障之后的CAN通信不中斷。
在現有的故障檢測方法中,雙冗余心跳檢測法可以在一定程度上避免“雙主機現象”,為了驗證本文所提出的混成式故障檢測法的優勢,將開展故障檢測能力對比。在相同的裝置中分別下載2套檢測程序,且2種故障檢測的周期一致。通過模擬不同工況下的故障,對2種檢測方法進行多次測試,其對比結果如表2所示。由于雙冗余心跳檢測法只能檢測出CPU之間通信的以太網線故障,所以未計算其平均故障響應時間。從表2中可以看出,混成式故障檢測法更為完善,準確性相對較高,且故障響應時間也表現尚可。

表 2 故障檢測結果Table 2 Results of fault detection
針對雙CPU冗余系統的故障問題,本文提出了網絡故障檢測法和第三方監控心跳法相結合的混成式故障檢測機制。在沒有增加硬件的情況下,第三方監控心跳法實現了雙重心跳檢測保障,從而避免了“雙主機現象”,這對于艦船特殊的環境條件而言很有優勢。通過將2種不同特點的故障檢測方式相結合,就構成了一個比較完備的故障檢測體系,其工程驗證結果也表明了該故障體系的精確度與全面性。