盧月,李維波,李巍,李齊,孫萬(wàn)峰
武漢理工大學(xué) 自動(dòng)化學(xué)院,湖北 武漢 430070
電站是現(xiàn)代艦船的重要組成部分,其可靠性和穩(wěn)定性將直接影響艦船電力系統(tǒng)的生命力。雙CPU冗余技術(shù)作為提高系統(tǒng)可靠性的有效手段之一,已廣泛應(yīng)用于艦船電站的控制系統(tǒng)。在雙CPU冗余系統(tǒng)的不同工作模式中,目前應(yīng)用最為廣泛的是相對(duì)簡(jiǎn)單、高效的熱備冗余模式[1-2],其工作方式是2個(gè)CPU同時(shí)上電運(yùn)行,并且雙方實(shí)時(shí)進(jìn)行信息交互。在正常工況下,主CPU承擔(dān)輸出任務(wù),備用CPU僅接收不輸出,同時(shí)監(jiān)控主CPU是否正常,以便及時(shí)發(fā)現(xiàn)故障并迅速切換。由熱備冗余的工作原理可知,故障檢測(cè)是雙CPU熱備冗余系統(tǒng)可靠性的重要保證,只有及時(shí)地檢查出故障,才能達(dá)到冗余容錯(cuò)的目的。
為此,呂聰?shù)萚3]采用了看門(mén)狗設(shè)計(jì),即主CPU通過(guò)串口通信,每隔一個(gè)周期向從CPU發(fā)送喂狗信號(hào),如果從CPU在一定時(shí)間內(nèi)未收到喂狗信號(hào),則立即將整個(gè)主CPU復(fù)位。徐一鳳等[4]采用了主/從CPU之間的心跳檢測(cè),即周期性互發(fā)心跳值,如果主CPU沒(méi)有收到從CPU的心跳信號(hào),則主CPU仍然正常運(yùn)行;如果從CPU沒(méi)有收到主CPU的心跳信號(hào),則將從CPU切換為主CPU。鄒見(jiàn)效[5]結(jié)合PUSH和PULL心跳檢測(cè)模式改進(jìn)了心跳檢測(cè)算法,即如果從CPU在一個(gè)時(shí)間周期內(nèi)收到主CPU的心跳信號(hào),則進(jìn)入下一個(gè)定時(shí)周期;如果沒(méi)有收到,則立刻對(duì)主CPU進(jìn)行檢測(cè),判斷其是否失效;如果在下一個(gè)周期內(nèi)仍未收到主CPU的響應(yīng)信息和心跳信息,則可以判定主CPU失效。以上3種方法均基于主CPU故障檢測(cè)的角度出發(fā),而沒(méi)有考慮硬件問(wèn)題。在實(shí)際工作中,當(dāng)2個(gè)CPU之間的通信線路出現(xiàn)故障時(shí),則有可能被誤判為主CPU故障,即在主CPU還正常工作時(shí),從CPU也開(kāi)始執(zhí)行任務(wù),從而出現(xiàn)“雙主機(jī)現(xiàn)象”。
為了避免這種情況,張軍永等[6]采用了雙冗余心跳檢測(cè)機(jī)制,即2個(gè)CPU之間通過(guò)2根信號(hào)線來(lái)檢測(cè)故障狀態(tài),因?yàn)?根信號(hào)線同時(shí)出現(xiàn)故障的概率很低,所以僅有1根信號(hào)線出現(xiàn)心跳故障時(shí),即判定為該信號(hào)線故障;只有當(dāng)2根信號(hào)線均出現(xiàn)故障時(shí),才判定為CPU故障。雖然該方法在一定程度上避免了“雙主機(jī)現(xiàn)象”,但其增加了1根信號(hào)線,就相當(dāng)于增加了系統(tǒng)架構(gòu)的復(fù)雜度和維修量,以及投入成本。
綜上所述,目前的故障檢測(cè)方法主要集中于CPU能否通過(guò)通信線路正常地發(fā)送監(jiān)控CPU所需要的信息,以及研究如何避免通信線路故障對(duì)CPU故障判斷的影響。對(duì)于雙CPU冗余系統(tǒng)來(lái)說(shuō),2個(gè)CPU之間的正常通信并不能代表整個(gè)冗余系統(tǒng)工作正常,CPU能否正常地接收、發(fā)出指令與CPU本身是否正常一樣重要。因此,為了對(duì)雙CPU冗余系統(tǒng)進(jìn)行故障檢測(cè),本文擬提出一種雙CPU冗余通信架構(gòu)下的混成式故障檢測(cè)方法,通過(guò)將網(wǎng)絡(luò)故障檢測(cè)法和第三方監(jiān)控心跳法集成一體,形成混成式故障檢測(cè)機(jī)制,以提高CPU故障檢測(cè)的速度與精確性,從而提高艦船電站控制系統(tǒng)的可靠性,并更好地適應(yīng)艦船電站設(shè)備多、工況繁雜等情況。
雙CPU冗余通信系統(tǒng)的整體架構(gòu)如圖1所示,由2個(gè)CPU通過(guò)互冗余方式組成,每個(gè)CPU均通過(guò)一路以太網(wǎng)與集控臺(tái)進(jìn)行雙向通信,完成分/合閘、報(bào)警故障等重要指令的上傳功能,同時(shí)這2個(gè)CPU之間也通過(guò)以太網(wǎng)進(jìn)行信息交互。由于控制器與集控臺(tái)之間的距離較遠(yuǎn),所以控制器(底層)與集控臺(tái)(頂層)之間也采用以太網(wǎng)進(jìn)行數(shù)據(jù)通信。以太網(wǎng)采用光作為介質(zhì),抗干擾能力強(qiáng)、傳遞數(shù)據(jù)多、傳輸速度快,可以保證高速數(shù)據(jù)傳輸信號(hào)的可靠性[7-8]。
圖1中的2個(gè)CPU都經(jīng)由1路控制器局域網(wǎng)絡(luò)(controller area network, CAN )與底層設(shè)備進(jìn)行雙向通信,且這2路CAN都在一條CAN總線上。由于CAN是一種可以有效支持分布式控制或?qū)崟r(shí)控制的串行通信網(wǎng)絡(luò),所以在眾多子節(jié)點(diǎn)的情況下,CAN總線具有很大的優(yōu)勢(shì),它能夠完成通信數(shù)據(jù)的成幀處理、位填充、數(shù)據(jù)塊編碼、優(yōu)先級(jí)判別、CRC校驗(yàn)等工作。由于其報(bào)文采用短幀結(jié)構(gòu),所以傳輸時(shí)間短,不易受到環(huán)境干擾,具有較高的可靠性。同時(shí),CAN總線采用了多主控制,即所有的單元都可以發(fā)送消息,根據(jù)單元的標(biāo)識(shí)符比較,即可實(shí)現(xiàn)優(yōu)先級(jí)高的發(fā)送消息,其他設(shè)備接收消息,而不用區(qū)分主/從設(shè)備,以便在總線上添加其他CAN單元;在電氣負(fù)載允許的情況下,可以添加多個(gè)CAN單元模塊[9-10]。
由于艦船電站控制系統(tǒng)底層控制器的數(shù)量眾多,需要采集、發(fā)送大量的輸入/輸出(I/O)指令信號(hào)和狀態(tài)信號(hào),所以本文將采用基于I2C總線的I/O端口擴(kuò)展芯片來(lái)實(shí)現(xiàn)數(shù)字量信號(hào)集成化。2個(gè)CPU分別通過(guò)2路普通I/O口模擬的I2C總線信號(hào)與I/O擴(kuò)展芯片相連,再經(jīng)由擴(kuò)展芯片與底層設(shè)備相連[11]。
在正常情況下,2個(gè)CPU都可以接收指令和數(shù)據(jù),但只有1個(gè)CPU可以發(fā)出指令,另一個(gè)處于備份狀態(tài),參與故障檢測(cè)并隨時(shí)準(zhǔn)備故障切換。
為了提高艦船電站控制系統(tǒng)的可靠性,通信系統(tǒng)應(yīng)具備一定的容錯(cuò)能力。一旦出現(xiàn)故障,通信系統(tǒng)應(yīng)準(zhǔn)確地檢測(cè)、定位故障并進(jìn)行實(shí)時(shí)處理,所以通信系統(tǒng)需要一種穩(wěn)定、可靠的故障檢測(cè)方案。為此,本文擬提出混成式故障檢測(cè)方法,即將網(wǎng)絡(luò)故障檢測(cè)和第三方監(jiān)控心跳集成一體的新型檢測(cè)方法。
網(wǎng)絡(luò)故障檢測(cè)法可以對(duì)雙CPU熱備冗余系統(tǒng)進(jìn)行定時(shí)、全面的檢查,以確保整個(gè)冗余系統(tǒng)(包括CPU、通信線和外設(shè))都正常運(yùn)行。所謂網(wǎng)絡(luò)故障檢測(cè)法,即將系統(tǒng)中的CPU、外設(shè)等均視為節(jié)點(diǎn),將通信總線視為連接各個(gè)節(jié)點(diǎn)的線,這樣就可以將圖1中的系統(tǒng)架構(gòu)抽象化為一個(gè)網(wǎng)絡(luò),如圖2所示,其中:CPU1,CPU2為主節(jié)點(diǎn)a,b;外設(shè)集控臺(tái)和底層設(shè)備為子節(jié)點(diǎn)c,d;λ1a,λ1b分別為集控臺(tái)與CPU1,CPU2之間的以太網(wǎng)連線;λ2為2個(gè)CPU之間的以太網(wǎng)連線;λ3a,λ3b分別為底層設(shè)備與CPU1,CPU2之間的CAN連線;λ4a,λ4b分別為底層設(shè)備與CPU1,CPU2之間的I2C連線。
圖 2 雙CPU冗余系統(tǒng)的網(wǎng)絡(luò)圖Fig.2 Network diagram of dual CPU redundant system
設(shè)定節(jié)點(diǎn)狀態(tài)為0時(shí)表示節(jié)點(diǎn)正常,為1時(shí)則表示節(jié)點(diǎn)故障。連線λ的狀態(tài)同理,可以根據(jù)與其相連的兩端節(jié)點(diǎn)通信是否正常來(lái)判斷,例如,CPU1通過(guò)以太網(wǎng)向集控臺(tái)發(fā)送信號(hào),如果連續(xù)2個(gè)周期未收到回復(fù),則a與c之間的連線λ1a狀態(tài)為1。為便于理解,本文采用a,b,c,d,λ1a,λ1b,λ2,λ3a,λ3b,λ4a,λ4b分別表示4個(gè)節(jié)點(diǎn)和其間連線的運(yùn)行狀態(tài),因此,各個(gè)節(jié)點(diǎn)狀態(tài)的計(jì)算公式為
由式(1)~式(4)可知,如果與一個(gè)節(jié)點(diǎn)相連的所有連線狀態(tài)λ均為1,即故障,則可判定該節(jié)點(diǎn)故障。根據(jù)網(wǎng)絡(luò)故障檢測(cè)法的原理,CPU與所有外設(shè)通信的過(guò)程實(shí)際上就是連線狀態(tài)檢測(cè)的過(guò)程,當(dāng)通信結(jié)束之后,通信線路和各個(gè)節(jié)點(diǎn)的狀態(tài)都得以更新,所以該方法兼具全面性和便捷性。
由于網(wǎng)絡(luò)故障檢測(cè)法是系統(tǒng)、全面的檢測(cè),所以需占用一定的時(shí)間成本,如果檢測(cè)過(guò)于頻繁,則將影響系統(tǒng)通信的時(shí)效性,因此,該方法適用于系統(tǒng)的定期檢查,而不是實(shí)時(shí)故障檢測(cè)。CPU作為艦船電站控制系統(tǒng)的重要設(shè)備,如果僅依靠網(wǎng)絡(luò)故障檢測(cè)法,則可能無(wú)法及時(shí)檢測(cè)故障,這對(duì)于系統(tǒng)來(lái)說(shuō)是致命的設(shè)計(jì)缺陷,因此,還需要采用一種專門(mén)為CPU進(jìn)行故障檢測(cè)的第三方監(jiān)控心跳法。
傳統(tǒng)的心跳檢測(cè)法采用了單一線路進(jìn)行故障檢測(cè),所以會(huì)出現(xiàn)“雙主機(jī)現(xiàn)象”,而第三方監(jiān)控心跳法可以解決這一問(wèn)題。在不改變現(xiàn)有通信系統(tǒng)架構(gòu)的前提下,僅需引入系統(tǒng)中的第三方設(shè)備——與2個(gè)CPU均相連的集控臺(tái),即可形成雙重心跳檢測(cè)保障機(jī)制,如圖3所示。
圖 3 第三方監(jiān)控的心跳檢測(cè)示意圖Fig.3 Heartbeat detection diagram of third party monitoring
由圖3可知,主/從CPU之間僅有1路心跳檢測(cè),當(dāng)主CPU向從CPU發(fā)送心跳信號(hào)的同時(shí),也會(huì)向集控臺(tái)同步心跳狀態(tài),包括心跳信息和更新時(shí)間。如果從CPU在規(guī)定時(shí)間內(nèi)未收到心跳信息,則將主動(dòng)向集控臺(tái)查詢,以確定主CPU是否故障;如果確定是主CPU故障,則立即切換;如果不是,則標(biāo)記通信線路故障。由于第三方查詢的加入,實(shí)現(xiàn)了多點(diǎn)、多重檢測(cè),以避免因依靠單一通信線路而誤判的CPU故障,從而提高了故障判斷的精準(zhǔn)度。與傳統(tǒng)的心跳檢測(cè)方法相比,第三方監(jiān)控心跳法在正常情況下的故障監(jiān)測(cè)時(shí)間并未延長(zhǎng),僅在未收到主CPU心跳信息時(shí),多了一項(xiàng)查詢時(shí)間;由于該檢測(cè)周期很短,所以對(duì)系統(tǒng)通信的實(shí)時(shí)性并無(wú)影響。
2種故障檢測(cè)方法均利用定時(shí)器產(chǎn)生中斷的方式進(jìn)行周期性檢查,其中網(wǎng)絡(luò)故障檢測(cè)法的檢測(cè)周期大于第三方監(jiān)控心跳法。當(dāng)系統(tǒng)上電初始化之后,應(yīng)先利用網(wǎng)絡(luò)檢測(cè)法進(jìn)行上電檢查,以確保系統(tǒng)可以正常運(yùn)行,然后再進(jìn)入主循環(huán)。
由網(wǎng)絡(luò)故障檢測(cè)法的原理可知,通過(guò)分析所有通信線的連線狀態(tài)λ,即可掌握CPU和所有外設(shè)的工作狀態(tài),其故障檢測(cè)過(guò)程分為3類,簡(jiǎn)述如下:
1) 通信線故障檢測(cè)。
CPU通過(guò)與其相連的總線向外設(shè)發(fā)送數(shù)據(jù),如果在2個(gè)周期內(nèi)收到正確的應(yīng)答,則將該總線對(duì)應(yīng)的連線狀態(tài)λ設(shè)為0,即表示該通信線正常。如果在2個(gè)周期內(nèi)未收到應(yīng)答或應(yīng)答不正確,則將其連線狀態(tài)λ設(shè)為1,其檢測(cè)流程如圖4所示。
2) CPU故障檢測(cè)。
CPU依次通過(guò)與其相連的總線向外設(shè)發(fā)送數(shù)據(jù),如果在2個(gè)周期內(nèi)均通信失敗,即未收到正確的應(yīng)答,則表明該CPU故障,應(yīng)將其對(duì)應(yīng)的節(jié)點(diǎn)狀態(tài)設(shè)為1。
3) 外設(shè)故障檢測(cè)。
圖 4 通信線檢測(cè)的流程圖Fig.4 Flow chart of communication thread detection
如果2個(gè)CPU都收不到任何與該外設(shè)相連的總線數(shù)據(jù),則表明該外設(shè)故障,應(yīng)將其對(duì)應(yīng)的節(jié)點(diǎn)狀態(tài)設(shè)為1;如果只是無(wú)法通過(guò)總線接收數(shù)據(jù),則表明該總線故障,應(yīng)將該總線對(duì)應(yīng)的連線狀態(tài)λ設(shè)為1。
因此,通過(guò)綜合通信線、CPU和外設(shè)的故障檢測(cè)結(jié)果,即可準(zhǔn)確定位故障部件,從而及時(shí)切換并部署維修。
相較于傳統(tǒng)的心跳檢測(cè)法,第三方監(jiān)控心跳法在軟件流程上多了主CPU向第三方發(fā)送心跳信息和從CPU向第三方查詢心跳信息的過(guò)程,其檢測(cè)過(guò)程如圖5所示。
圖 5 第三方監(jiān)控的心跳檢測(cè)流程圖Fig.5 Flow chart of third-party monitoring heartbeat detection
上電之后,主CPU在每個(gè)周期都會(huì)向從CPU發(fā)送特定的數(shù)據(jù),即心跳信號(hào);與此同時(shí),主CPU也會(huì)向集控臺(tái)同步心跳信息,包括發(fā)送內(nèi)容和發(fā)送時(shí)間。如果從CPU定期接收到正確的數(shù)據(jù),則繼續(xù)保持備機(jī)狀態(tài);如果從CPU連續(xù)2個(gè)心跳周期沒(méi)有收到數(shù)據(jù)或收到錯(cuò)誤的主CPU數(shù)據(jù),則從CPU將主動(dòng)查詢集控臺(tái)中的主CPU心跳同步信息。如果查詢到主CPU的同步信息正常,則判定為2個(gè)CPU之間的通信線故障;若查詢到主CPU最近一次的同步時(shí)間大于1個(gè)心跳周期,則將主CPU進(jìn)行復(fù)位,同時(shí)從CPU獲得控制權(quán),開(kāi)始承擔(dān)系統(tǒng)的主CPU任務(wù)。對(duì)于復(fù)位后的主CPU,將采用網(wǎng)絡(luò)故障檢測(cè)法進(jìn)行評(píng)估判斷,如果其仍處于故障狀態(tài),則立即更換;如果可以正常工作,則處于備機(jī)狀態(tài)。
圖 6 雙CPU主板的原理框圖Fig.6 Principle block diagram of dual CPU main board
本文通信裝置所采用的CPU芯片為STM32 F417ZGT6,這是一款由ST公司發(fā)行的基于ARM Cortex-M4內(nèi)核的32位處理器,其最大的優(yōu)勢(shì)是配置了硬件FPU單元和DSP指令集,且其主頻頻率高達(dá)168 MHz;該芯片擁有15個(gè)通信接口,其中包括3個(gè)SPI,2個(gè)CAN以及3個(gè)I2C接口。本通信裝置的CAN和以太網(wǎng)均外接了隔離芯片,且以太網(wǎng)采用了4芯接插件。
本通信裝置包括5塊PCB板,分別為2塊獨(dú)立的CPU主板、1塊DI板和2塊DO板,其中CPU主板上配置了通信模塊、復(fù)位模塊、電源模塊和存儲(chǔ)模塊,如圖6所示。由于2塊CPU主板都需要外接相同的DI/DO板,所以采用了便于裝拆和維修的雙層物理架構(gòu),如圖7所示。
除了雙CPU主板之外,其他3塊板卡也采用了上下雙層物理結(jié)構(gòu),且置于主板上方。這5塊PCB板均封裝于一個(gè)金屬箱內(nèi),如圖8所示,該金屬箱具有很好的密閉性,可以避免該器件在艦船的潮濕環(huán)境中失效。
基于硬件電路,應(yīng)按照現(xiàn)場(chǎng)裝置的實(shí)際運(yùn)行要求編寫(xiě)主程序,并依據(jù)故障檢測(cè)軟件的設(shè)計(jì)思路編寫(xiě)故障檢測(cè)子程序。主程序?yàn)榛镜难b置初始化,DI/DO的開(kāi)入/開(kāi)出和對(duì)外通信,同時(shí)通過(guò)設(shè)置周期性中斷,從而在中斷服務(wù)函數(shù)中完成裝置的定時(shí)故障檢測(cè)與判斷。本通信裝置程序的重要技術(shù)參數(shù)如下:以太網(wǎng)通信周期為2 ms/次;CAN通信周期為10 ms/次;由于第三方監(jiān)控心跳檢測(cè)是通過(guò)以太網(wǎng)進(jìn)行通信,所以其故障檢測(cè)周期與以太網(wǎng)的通信周期一致;考慮到網(wǎng)絡(luò)故障檢測(cè)法需占用一定的通信時(shí)間,參考CAN通信周期,將其設(shè)置為20 ms/次,以避免影響通信的時(shí)效性。
圖 8 通信裝置的實(shí)物圖Fig.8 Physical diagram of communication device
為了驗(yàn)證本文冗余系統(tǒng)的可靠性,即能否及時(shí)發(fā)現(xiàn)故障并進(jìn)行處理,本文將人為制造故障并實(shí)時(shí)監(jiān)測(cè)系統(tǒng)的運(yùn)行情況。根據(jù)系統(tǒng)的設(shè)計(jì)需求,其故障檢測(cè)的技術(shù)指標(biāo)如表1所示。
表 1 故障檢測(cè)指標(biāo)Table 1 Fault detection indexes
本文搭建了如圖9所示的簡(jiǎn)易測(cè)試平臺(tái),即2個(gè)CPU均通過(guò)1路CAN與電腦相連,而電腦通過(guò)CANMonitor軟件對(duì)CAN通信進(jìn)行監(jiān)測(cè)。由于本系統(tǒng)的核心是雙CPU冗余,所以本文將在系統(tǒng)上電運(yùn)行一段時(shí)間之后,人為對(duì)處于正常工作狀態(tài)的主CPU進(jìn)行復(fù)位,并根據(jù)CAN通信的監(jiān)測(cè)結(jié)果來(lái)判斷CAN通信是否受到了影響。如果CAN通信未受到影響且持續(xù)通信,則表明該系統(tǒng)可以及時(shí)切換故障CPU。
圖 9 CAN通信系統(tǒng)的實(shí)物圖和測(cè)試結(jié)果Fig.9 Physical diagram of CAN communication system and its test results
通過(guò)修改CAN通信的相關(guān)程序,將主CPU的CAN幀ID設(shè)為0x06,從CPU設(shè)為0x92。上電之后,主CPU發(fā)送02 04 08 16 32 64 B1 B6的8位數(shù)據(jù),從CPU處于監(jiān)測(cè)狀態(tài);如果從CPU接替工作,則發(fā)送A5 5A 05 82 00 03 00 01的8字節(jié)數(shù)據(jù)。由圖9(b)的測(cè)試結(jié)果可知,在主CPU發(fā)送了一段時(shí)間的數(shù)據(jù)之后,從CPU接替了其工作,從而保證了主CPU故障之后的CAN通信不中斷。
在現(xiàn)有的故障檢測(cè)方法中,雙冗余心跳檢測(cè)法可以在一定程度上避免“雙主機(jī)現(xiàn)象”,為了驗(yàn)證本文所提出的混成式故障檢測(cè)法的優(yōu)勢(shì),將開(kāi)展故障檢測(cè)能力對(duì)比。在相同的裝置中分別下載2套檢測(cè)程序,且2種故障檢測(cè)的周期一致。通過(guò)模擬不同工況下的故障,對(duì)2種檢測(cè)方法進(jìn)行多次測(cè)試,其對(duì)比結(jié)果如表2所示。由于雙冗余心跳檢測(cè)法只能檢測(cè)出CPU之間通信的以太網(wǎng)線故障,所以未計(jì)算其平均故障響應(yīng)時(shí)間。從表2中可以看出,混成式故障檢測(cè)法更為完善,準(zhǔn)確性相對(duì)較高,且故障響應(yīng)時(shí)間也表現(xiàn)尚可。
表 2 故障檢測(cè)結(jié)果Table 2 Results of fault detection
針對(duì)雙CPU冗余系統(tǒng)的故障問(wèn)題,本文提出了網(wǎng)絡(luò)故障檢測(cè)法和第三方監(jiān)控心跳法相結(jié)合的混成式故障檢測(cè)機(jī)制。在沒(méi)有增加硬件的情況下,第三方監(jiān)控心跳法實(shí)現(xiàn)了雙重心跳檢測(cè)保障,從而避免了“雙主機(jī)現(xiàn)象”,這對(duì)于艦船特殊的環(huán)境條件而言很有優(yōu)勢(shì)。通過(guò)將2種不同特點(diǎn)的故障檢測(cè)方式相結(jié)合,就構(gòu)成了一個(gè)比較完備的故障檢測(cè)體系,其工程驗(yàn)證結(jié)果也表明了該故障體系的精確度與全面性。