陸 琦,郝 波,周學勛
(中車株洲電力機車研究所有限公司, 湖南 株洲 412001)
列車通信網(wǎng)絡(luò)主要用于列車控制、狀態(tài)監(jiān)視、故障診斷、車載信息服務(wù)及視頻監(jiān)控等方面的數(shù)據(jù)傳輸,是保證列車行車安全與提升軌道交通服務(wù)質(zhì)量水平的重要系統(tǒng)之一[1]。在機箱式結(jié)構(gòu)列車通信網(wǎng)絡(luò)系統(tǒng)中,主控板通過背板總線和IO子板進行數(shù)據(jù)交互,實現(xiàn)數(shù)據(jù)的收集、分析、處理以及控制指令發(fā)送的功能[2];其作為整個系統(tǒng)的“大腦”,存在單點失效隱患,一旦發(fā)生故障,會引起整個系統(tǒng)失效甚至癱瘓,嚴重影響行車安全,因此可采用冗余主控板架構(gòu)來提高系統(tǒng)的可靠性。兩塊主控板互相監(jiān)測對方的狀態(tài),一旦工作中的主控板發(fā)生故障,備用主控板就能立刻接管整個系統(tǒng)的工作,實現(xiàn)快速無縫的切換[3-4]。雖然冗余主控板的架構(gòu)可用來提高系統(tǒng)的可靠性,但如果冗余主控板之間缺乏一種合理的競爭以及切換機制的約束,反而會導致系統(tǒng)控制的混亂。因此,需要設(shè)計一種快速可靠的機制來保障系統(tǒng)運行的正確性和可靠性[5-6]。
目前比較常規(guī)的切換方法是兩個互為冗余的處理器通過相應的協(xié)議進行互相監(jiān)視,比如監(jiān)視對方的心跳和狀態(tài)等[7]。但這種方法有一定的弊端:CPU的任務(wù)受資源占用和調(diào)度優(yōu)先級的影響,監(jiān)視程序有失效的風險;實時性不強,如需要進行主備切換,切換時間過長,可能會出現(xiàn)短暫的系統(tǒng)紊亂現(xiàn)象。為了提高冗余系統(tǒng)的可靠性,本文提出一種基于可編程邏輯器件(complex programmable logic device,CPLD)實現(xiàn)主控冗余切換的機制,并進行了相關(guān)的通信協(xié)議和切換狀態(tài)機的設(shè)計。由于CPLD具有可并行操作的特點,相比CPU,其可實現(xiàn)異常情況下更快速的主控切換,實時性大幅提高,且平穩(wěn)的冗余切換機制不會帶來錯誤切換、頻繁切換等問題,提高了系統(tǒng)的可靠性。
冗余主控板架構(gòu)如圖1所示,兩塊主控板被分別插在機箱背板的不同槽位,并通過背板上硬線實現(xiàn)兩塊主控板CPLD的交叉連接。
圖1 主控板冗余示意圖Fig.1 Schematic diagram of main control redundancy
通過4根硬線可進行冗余主控板之間的全雙工通信,一個主控板的輸出是另一個主控板的輸入,具體如表1所示。
表1 信號說明Tab.1 Signal description
在冗余主控板之間設(shè)計一種通信協(xié)議,可將自身的狀態(tài)信息傳送給對方;對方主控板可接收此狀態(tài)信息,并與自身的狀態(tài)信息進行比較。上電初始化時,可抉擇出性能更好的主控板對系統(tǒng)進行控制;運行過程中,可判斷當前工作的主控板是否出現(xiàn)故障,若有故障,則需進行切換,由備用主控板接管系統(tǒng)。主控板的故障大致有以下幾種類型:CPU啟動異常、CPU生命信號異常和CPLD生命信號異常等。另外,也可根據(jù)實際需要,主動進行切換主控板的操作。圖2示出主控板冗余切換邏輯。
圖2 主控板冗余切邏輯Fig.2 Redundant logic of main control board
下面對整個主備切換過程進行簡單的邏輯梳理和說明:
(1)主控板初始化爭主。兩塊主控板同時啟動,若初始化狀態(tài)都正常,則取槽位號小的主控板為工作主控板,槽位號大的為備用主控板;若槽位號小的主控板初始化狀態(tài)異常,則取槽位號大且狀態(tài)正常的主控板為工作主控板。
(2)工作主控板切主。工作主控板在運行過程中一旦狀態(tài)異常,則隨即轉(zhuǎn)入錯誤狀態(tài),放棄對整個系統(tǒng)的控制,并將自身狀態(tài)信息發(fā)送至備用主控板;即使之后狀態(tài)正常,其也只能先轉(zhuǎn)為備用主控板。
(3)備用主控板升主。當備用主控板獲知工作主控板狀態(tài)異常后,若自身狀態(tài)正常,則立即由備用狀態(tài)轉(zhuǎn)為工作狀態(tài),接管整個系統(tǒng)。
冗余主控板之間狀態(tài)信息的傳輸。采用類似串行外設(shè)接口(serial peripheral interface,SPI)的通信方式[8],通信數(shù)據(jù)幀結(jié)構(gòu)(圖3)包括幀頭、槽位號、CPLD生命信號、主備狀態(tài)和CRC校驗[9],具體如下:
圖3 通信數(shù)據(jù)幀格式Fig.3 Communication data frame format
(1)幀頭,字節(jié)長度為8 bit,用于實現(xiàn)數(shù)據(jù)幀的同步與識別。
(2)槽位號,字節(jié)長度為6 bit,為主控板槽位信息,同等條件下槽位號小的主控板優(yōu)先。
(3)生命信號,字節(jié)長度為7 bit,為CPLD生命信號。
(4)主備狀態(tài),字節(jié)長度為3 bit,包括初始化狀態(tài)、工作主狀態(tài)、備用主狀態(tài)、錯誤狀態(tài)等信息。
(5)CRC校驗,字節(jié)長度為8 bit,用于數(shù)據(jù)校驗。
冗余主控板之間的通信時序如圖4所示。其中,一根線傳輸時鐘信號(clk_out),另一根線傳輸數(shù)據(jù)信號(d_out);交叉連接之后,一塊主控板輸出的時鐘和數(shù)據(jù)信號能輸入另一塊主控板并被采集。發(fā)送數(shù)據(jù)時,在時鐘的下降沿發(fā)送有效的數(shù)據(jù);接收數(shù)據(jù)時,確保在時鐘的上升沿能采集到正確的有效數(shù)據(jù)[10]。數(shù)據(jù)以幀為單位被周期性地發(fā)送,傳輸周期可根據(jù)應用需求進行調(diào)整,從而實現(xiàn)快速無縫地切換。
圖4 通信時序示意圖Fig.4 Schematic diagram of communication sequences
兩塊主控板的切換機制非常重要,錯誤切換、頻繁切換、過慢切換都會導致系統(tǒng)錯誤,降低系統(tǒng)的安全性和可靠性。主備切換機制由CPLD內(nèi)所設(shè)計的狀態(tài)機實現(xiàn)[11-12]。根據(jù)冗余主控板的競爭和切換條件,將整個狀態(tài)機流轉(zhuǎn)流程按以下幾種情況分別進行闡述。
初始化分兩種情況:上電啟動初始化和軟復位啟動初始化。
當兩塊主控板上電啟動時,其同時處于初始化狀態(tài)。若啟動狀態(tài)都正常,取槽位號小的主控板為工作主控板,槽位號大的為備用主控板。若某個主控板啟動狀態(tài)異常,則進入故障狀態(tài),另外一塊正常啟動的主控板為工作主控板。
某主控板軟復位重啟時,初始化成功后則需判斷對方主控板狀態(tài):若對方已是工作主控板,則進入備用主控板狀態(tài);若對方狀態(tài)異常,則升為工作主控板;若對方剛好也處于初始化狀態(tài),則參照上電啟動進行判斷。
初始化狀態(tài)機流轉(zhuǎn)流程如圖5所示,具體如下:
圖5 初始化狀態(tài)流轉(zhuǎn)示意圖Fig.5 Schematic diagram of the initialization state flow
(1)IDLE(初始化狀態(tài))。上電或軟件復位重啟時,主控板處于初始化狀態(tài),不進行控制和數(shù)據(jù)處理。若啟動正常,進入CPU_ON狀態(tài);否則,則進入CPU_DOWN狀態(tài)。
(2)CPU_DOWN(CPU初始化異常狀態(tài))。該狀態(tài)下,主控板被置為錯誤狀態(tài),并將此狀態(tài)信息發(fā)送至對方主控板;若之后CPU恢復正常,再轉(zhuǎn)入CPU_ON狀態(tài)。
(3)CPU_ON(CPU初始化正常狀態(tài))。該狀態(tài)下,若收到對方主控板發(fā)送的數(shù)據(jù),則進入COMP狀態(tài);若長時間未獲取對方主控板的狀態(tài)信息,則認為對方主控板未插入或未正常工作,于是進入MASTER狀態(tài)。
(4)COMP(比較狀態(tài))。該狀態(tài)下,系統(tǒng)首先通過幀頭和CRC校驗信息判斷所接收的數(shù)據(jù)幀是否正確,若正確,則獲取對方的槽位號、CPLD生命信號及主備狀態(tài)等信息,并與自身狀態(tài)信息進行比較。自身槽位號小,則優(yōu)先級高,如果對方已是工作主控板狀態(tài),則進入備用主控板狀態(tài)(SLAVE);否則,進入工作主控板狀態(tài)(MASTER)。若自身槽位號大,則優(yōu)先級低,當且僅當對方主控板的狀態(tài)為錯誤時,才進入MASTER狀態(tài);否則,進入SLAVE狀態(tài)。
若接收的數(shù)據(jù)幀不正確,為防止出現(xiàn)多主的情況,暫時還是會進入SLAVE狀態(tài),等待下一幀數(shù)據(jù)的到來,但會產(chǎn)生中斷告知處理器,兩個主控板之間的通信不可信,無法抉擇出工作主控板;若之后多次接收到的數(shù)據(jù)幀都不正確,則需通知上層應用檢查硬件狀態(tài)。
(5)SLAVE狀態(tài)。該狀態(tài)下,備用主控板一直監(jiān)測自身以及工作主控板的狀態(tài)信息;若工作主控板有異常情況,則需要進行升主操作。
(6)MASTER狀態(tài)。該狀態(tài)下,工作主控板接管整個系統(tǒng)的工作且需實時監(jiān)測自身的狀態(tài);若有異常,則要進行切主操作。
主控板處于備用主控板狀態(tài)時,需實時監(jiān)測自身以及工作主控板的狀態(tài)信息。若工作主控板有異常但自身正常,則需要進行升主操作。備用主控板的狀態(tài)機流轉(zhuǎn)流程如圖6所示,具體如下:
圖6 備用主控板狀態(tài)流轉(zhuǎn)示意Fig.6 Schematic diagram of the slave state flow
(1)SLAVE狀態(tài)。當監(jiān)測到SLAVE異常時,進入ERROR狀態(tài),并將此故障狀態(tài)信息發(fā)送至工作主控板;若長時間未獲取工作主控板的狀態(tài)信息,則認為工作主控板已掉電或異常,進入MASTER狀態(tài);接收到工作主控板發(fā)送的數(shù)據(jù)后,進入工作主控板狀態(tài)信息獲?。–OMP1)狀態(tài),獲取工作主控板的狀態(tài)信息。
(2)COMP1狀態(tài)。該狀態(tài)下,首先通過幀頭和CRC校驗判斷所接收的幀是否正確,若正確,則獲取工作主控板的狀態(tài)信息。當工作主控板的狀態(tài)為錯誤時,進入MASTER狀態(tài);否則,進入SLAVE狀態(tài)。若接收的數(shù)據(jù)幀不正確,為防止出現(xiàn)多主的情況,暫時還是會進入SLAVE狀態(tài),等待下一幀數(shù)據(jù)的到來,但是會產(chǎn)生中斷告知處理器,所接收到的數(shù)據(jù)幀不可信。若之后多次接收到的數(shù)據(jù)幀都不正確,則需通知上層應用檢查硬件狀態(tài)。
(3)MASTER狀態(tài)。該狀態(tài)下,備用主控板作為工作主控板接管整個系統(tǒng)的工作。
(4)ERROR狀態(tài)。該狀態(tài)下,需將“狀態(tài)異常”信息告知工作主控板;當狀態(tài)恢復正常后,隨即進入SLAVE狀態(tài)。
主控板為工作主控板狀態(tài)時,接管整個系統(tǒng)的工作。此時主設(shè)備需實時監(jiān)測自身的狀態(tài),且需接受應用的切主指令,若自身狀態(tài)有異?;蚪邮盏角兄髦噶?,則要進行切主操作。主狀態(tài)流轉(zhuǎn)流程如圖7所示,具體如下:
圖7 主狀態(tài)流轉(zhuǎn)示意圖Fig.7 Schematic diagram of the master state flow
(1)MASTER狀態(tài)。該狀態(tài)下,主控板接管整個系統(tǒng)的工作,當自身狀態(tài)異常時,進入ERROR狀態(tài),并將此故障狀態(tài)發(fā)送至備用主控板;當應用出現(xiàn)切換指令時,進入切換狀態(tài)(SWITCH),并判斷備用主控板是否符合升主條件。
(2)SWITCH狀態(tài)。該狀態(tài)下,應判斷SLAVE狀態(tài),若其正常,則進入切主狀態(tài)(SW_S);若異常,則進入保持主狀態(tài)(HOLD_MASTER)。
(3)HOLD_MASTER狀態(tài)。在得到應用軟件切主指令后,發(fā)現(xiàn)SLAVE狀態(tài)異常,不滿足切換條件,需維持主狀態(tài),且告知應用不具備切主條件,隨即進入MASTER狀態(tài)。
(4)SW_S狀態(tài)。在得到應用軟件的切主指令后,發(fā)現(xiàn)備用主控板狀態(tài)正常,滿足切主條件,在切換成功后隨即進入SLAVE狀態(tài)。
(5)SLAVE狀態(tài)。此時工作主控板完成切主,處于SLAVE狀態(tài),并監(jiān)測新的工作主控板的狀態(tài)信息。
(6)ERROR狀態(tài)。此狀態(tài)下,主控板自身狀態(tài)異常且需通知備用主控板;當自身狀態(tài)恢復正常后,隨即進入SLAVE狀態(tài)。
由于數(shù)據(jù)幀的通信周期為亞毫秒級別,因此系統(tǒng)能快速地獲取、比較兩塊主控板的狀態(tài)信息,并在主控板故障時迅速實現(xiàn)冗余主控板的切換,做到無縫切換[8]。以上機制保證了上電初始狀態(tài)下主設(shè)備的正確競爭以及故障或應用切換條件下的有序安全的切換,大大提高了整個系統(tǒng)的安全性和可靠性。
功能仿真可以用來檢查設(shè)計行為的正確性,一般通過編寫測試平臺(testbench)來實現(xiàn)。測試平臺是給待驗證的設(shè)計添加激勵,并且通過仿真工具來觀察輸出響應是否符合設(shè)計要求[13]。為驗證上述切換機制的有效性和正確性,本文針對上述狀態(tài)機編寫測試平臺,并采用ModelSim仿真工具對切換過程中常見的幾種情況進行了功能仿真[14]。
上電,兩塊主控板都正常啟動,槽位號小的主控板經(jīng)過狀態(tài)對比后升級為工作主控板,槽位號大的主控板經(jīng)過狀態(tài)對比后進入備用主控板狀態(tài),如圖8和圖9所示。
圖8 槽位號小的主控板啟動仿真Fig.8 Start-up simulation of the main control board with small slot number
圖9 槽位號大的主控板啟動仿真Fig.9 Start-up simulation of the main control board with large slot number
主控板處于備用狀態(tài),不斷地監(jiān)視工作主控板的狀態(tài)。若工作主控板狀態(tài)正常,則保持備用主控板狀態(tài)不變;若工作主控板狀態(tài)異常而備用主控板自身狀態(tài)正常,則備用主控板升級為工作主控板,如圖10和圖11所示。
圖10 工作主控板狀態(tài)正常仿真Fig.10 Simulation as the status of the working main control board is normal
圖11 工作主控板狀態(tài)異常仿真Fig.11 Simulation as the status of the working main control board is abnormal
當主控板處于工作主控板狀態(tài),若應用使能切主指令,則其會進行切主判斷:若備用主控板狀態(tài)正常,則進行正常切主;若備用主控板狀態(tài)不正常,則通知系統(tǒng)“應用切主條件不滿足”,繼續(xù)保持工作主狀態(tài),如圖12和圖13所示。
圖12 正常切主仿真Fig.12 Simulation of normal switching of the working main control board
圖13 切主條件不滿足仿真Fig.13 Simulation as switching condition of the working main control board are not met
在實驗室中,取一個機箱,插入2塊功能正常的主控板并分別標識為A主控板(簡稱“A板”)和B主控板(簡稱“B板”),其中A板槽位號小。經(jīng)測試,背板硬線連接正常。正常運行時,A板為工作主控板,B板為備用主控板。針對本文提出的主控冗余及切換機制,主要進行上電啟動、故障切換和應用切主實驗,并記錄實驗結(jié)果。
主控板面板配有工作主控板指示燈,若主控板為工作主控板,則燈亮;若主控板為備用主控板,則燈滅。
(1)正常啟動試驗
試驗時,對插入互為冗余的A板和B板的機箱進行多次上下電啟動,觀察現(xiàn)象,要求“A板由于槽位號小而優(yōu)先級高,每次都競爭為工作主控板”。試驗結(jié)果顯示,每次啟動完成后,都是A板指示燈亮(指示為工作主控板),符合設(shè)計要求。
(2)異常啟動試驗
試驗時,將A板在啟動過程中卡滯,B板正常啟動,要求“雖然A板槽位號小,但啟動異常;B板優(yōu)先級低,正常啟動后監(jiān)測到A板異常,也會競爭為工作主控板”。試驗結(jié)果顯示,每次啟動完成后,都是B板上指示燈亮,符合設(shè)計要求。
該測試分為以下步驟:
(1)對正常運行的機箱,中止A板生命信號,要求“A板狀態(tài)異常,喪失主控資格;備用B板自身狀態(tài)正常,一旦監(jiān)測到A板狀態(tài)異常,B板則立即升級為工作主控板”。試驗結(jié)果顯示,中止A板生命信號后,A板立即發(fā)生切主動作,同時B板升級為工作主控板,符合設(shè)計要求。
(2)將B板升級為工作主控板,恢復A板的生命信號,要求“雖然A板狀態(tài)恢復正常,但只要B板狀態(tài)正常,A板也只會先進入備用主控板狀態(tài),不會發(fā)生頻繁切主的情況”。試驗結(jié)果顯示,B板沒有發(fā)生切主動作,符合設(shè)計要求。
(3)中止B板生命信號,要求“A板雖然狀態(tài)恢復正常,但只在B板狀態(tài)異常情況下才會進入工作主控板狀態(tài),不會發(fā)生錯誤切主的情況”。試驗結(jié)果顯示,中止生命信號后,B板立即發(fā)生切主動作,同時A板升級為工作主控板,符合設(shè)計要求。
多次重復上述故障切主試驗過程,結(jié)果顯示,工作主控板沒有出現(xiàn)錯誤切換、頻繁切換現(xiàn)象。
該測試過程如下:
(1)對正常運行的機箱,在A板上輸入切主指令,要求“A板能響應切主指令且觀測到B板狀態(tài)正常后會切主進入備用主控板狀態(tài),同時B板升級為工作主控板”。試驗結(jié)果顯示,A板得到切主指令后,立即完成切主任務(wù),同時B板升級為工作主控板,符合設(shè)計要求。
(2)若B板升為工作主控板,中止A板的生命信號,同時在B板上輸入切主指令,要求“B板響應切主指令,觀測到A板狀態(tài)異常,不會切主進入備用主控板狀態(tài),但保持為工作主控板”。試驗結(jié)果顯示,B板并沒有發(fā)生切主動作,且產(chǎn)生中斷并通知系統(tǒng)“應用切主條件不滿足”,符合設(shè)計要求。
(3)恢復A板生命信號,同時在B板上輸入切主指令,要求“B板響應切主指令且觀測到A板狀態(tài)恢復正常后,B板進入備用主控板狀態(tài),A板升級為工作主控板”。試驗結(jié)果顯示,B板立即完成切主,且A板升級為工作主控板。
經(jīng)實驗室測試,采用本機制后,異常工況下主控切換時間為亞毫秒級,相比既往系統(tǒng)數(shù)十毫秒的切換時間,實時性大幅提升。綜上可知,本機制不僅可實現(xiàn)更快速的主控切換,而且平穩(wěn)的冗余切換機制不會帶來錯誤切換、頻繁切換等問題,也提高了系統(tǒng)的可靠性。
目前,此冗余機制已在城市軌道交通領(lǐng)域進行小批量應用且運行效果良好。
本文提出一種快速、可靠的主控冗余及切換機制,其通過CPLD實現(xiàn),機箱內(nèi)的兩塊冗余主控板通過背板通信協(xié)議來實現(xiàn)互相監(jiān)測。仿真和應用結(jié)果顯示,采用該機制后,當系統(tǒng)主控板發(fā)生故障時,備用主控板能實現(xiàn)無縫切換,且再沒出現(xiàn)以往常見的多主、錯誤搶主、切換不及時等故障現(xiàn)象,大大提高了系統(tǒng)的安全性和可靠性。
后續(xù)還可通過配置對所設(shè)計的切換機制進行故障模式注入,以適配不同應用場景需求,同時記錄主控切換原因并形成診斷日志,進一步提高可移植性和可診斷性。