謝 望,蘭旭東,高 飛,趙新航,衛(wèi)吉祥,徐 昕
(上海航天電子技術(shù)研究所,上海 201109)
地面測(cè)發(fā)控系統(tǒng)是運(yùn)載火箭地面系統(tǒng)的重要組成部分,負(fù)責(zé)完成運(yùn)載火箭的集成綜合測(cè)試和發(fā)射試驗(yàn)[1-5]。而在運(yùn)載火箭地面測(cè)發(fā)控系統(tǒng)中,軟件是重要的一環(huán)。軟件質(zhì)量和軟件的可靠性是軟件生存的基本條件[6-7],也是軟件人員追求的目標(biāo),提高軟件質(zhì)量是軟件開(kāi)發(fā)過(guò)程中的關(guān)鍵問(wèn)題[8]。提高軟件質(zhì)量和可靠性通常有兩種方法:避開(kāi)錯(cuò)誤和容錯(cuò)。任何軟件都不能做到?jīng)]有錯(cuò)誤,因此完全避開(kāi)錯(cuò)誤是不可能的,容錯(cuò)技術(shù)可以使錯(cuò)誤發(fā)生時(shí)系統(tǒng)不受影響或受到的損害最小,冗余技術(shù)是容錯(cuò)方法中的主要技術(shù)[9-11]。
為了避免某個(gè)部件故障給系統(tǒng)工作帶來(lái)影響,通常采用部件的備份冗余設(shè)計(jì)方案,在多軟件協(xié)同工作系統(tǒng)中,任何一個(gè)軟件發(fā)生故障,都與可能導(dǎo)致整個(gè)軟件系統(tǒng)無(wú)法正常工作,而通常軟件也可以進(jìn)行備份冗余設(shè)計(jì)。在多軟件組成的軟件系統(tǒng)中,可以對(duì)某個(gè)軟件進(jìn)行備份,如果這個(gè)軟件發(fā)生故障,則可以立即啟動(dòng)備份計(jì)算機(jī)上的備份軟件繼續(xù)工作,達(dá)到不影響整體軟件系統(tǒng)運(yùn)行的效果[12-13]。
目前航天八院運(yùn)載地面測(cè)發(fā)控系統(tǒng)領(lǐng)域,還未開(kāi)展核心軟件熱備冗余自主切換設(shè)計(jì),地面核心軟件運(yùn)行故障會(huì)直接導(dǎo)致試驗(yàn)停滯,影響試驗(yàn)進(jìn)度及測(cè)試效率。隨著航天事業(yè)的迅猛發(fā)展,航天發(fā)射任務(wù)日益繁重,呈現(xiàn)任務(wù)高密度常態(tài)化、任務(wù)并行多和技術(shù)狀態(tài)新等新特點(diǎn),對(duì)地面核心軟件系統(tǒng)的可靠性提出了更高要求,如何解決核心關(guān)鍵軟件可靠性問(wèn)題是本論文研究的重點(diǎn)。
在運(yùn)載火箭試驗(yàn)中,地面測(cè)發(fā)控系統(tǒng)的前置測(cè)控軟件具有實(shí)時(shí)性強(qiáng)、可靠性高、數(shù)據(jù)量大和接口關(guān)系復(fù)雜等特性,主要完成測(cè)量數(shù)據(jù)實(shí)時(shí)采集、實(shí)時(shí)數(shù)據(jù)處理、狀態(tài)顯示和通道控制等任務(wù),其重要性不言而喻。前置測(cè)控軟件的可靠運(yùn)行,對(duì)實(shí)現(xiàn)實(shí)時(shí)測(cè)量與控制至關(guān)重要,如果前置測(cè)控軟件發(fā)生故障,則會(huì)直接導(dǎo)致試驗(yàn)的停止。
在上述背景下,本論文從提升核心軟件可靠性方向出發(fā),研究在線熱備冗余切換技術(shù),在軟件一度故障情況下,可實(shí)現(xiàn)軟件冗余系統(tǒng)自主切換,提升軟件系統(tǒng)整體可靠性,降低個(gè)別軟件運(yùn)行故障對(duì)試驗(yàn)整體進(jìn)程的影響,取消依托人工更換備份設(shè)備的模式。
本論文設(shè)計(jì)的軟件冗余為主備雙軟件冗余,前置測(cè)控軟件分為主前置測(cè)控軟件和備前置測(cè)控軟件兩份,在正常工作狀態(tài)下,主前置測(cè)控軟件保持在工作狀態(tài),備前置測(cè)控軟件保持在待機(jī)狀態(tài)。若主前置測(cè)控軟件發(fā)生故障,熱備冗余系統(tǒng)可以及時(shí)發(fā)現(xiàn)故障并進(jìn)行處理,備前置測(cè)控軟件在要求的時(shí)間內(nèi),可以從待機(jī)狀態(tài)切換為工作狀態(tài),繼續(xù)接替原來(lái)的主前置測(cè)控軟件進(jìn)行工作。
在進(jìn)行數(shù)據(jù)鏈路的設(shè)計(jì)之前,需要將主前置測(cè)控軟件和主備前置測(cè)控軟件以及地面測(cè)發(fā)控軟件系統(tǒng)之間的信息流進(jìn)行梳理:如圖1所示,在沒(méi)有故障發(fā)生的正常狀態(tài)下,一條控制指令的執(zhí)行會(huì)產(chǎn)生5條數(shù)據(jù)流,下面按照?qǐng)D中的編號(hào)順序進(jìn)行說(shuō)明,數(shù)據(jù)流①是從主機(jī)控制軟件發(fā)送到服務(wù)器軟件的控制指令的數(shù)據(jù)流,主機(jī)控制軟件每發(fā)送一條控制指令,就會(huì)出現(xiàn)一條數(shù)據(jù)流①,當(dāng)數(shù)據(jù)流①到達(dá)服務(wù)器軟件之后,服務(wù)器軟件會(huì)對(duì)數(shù)據(jù)流①進(jìn)行解析,重點(diǎn)關(guān)注的是數(shù)據(jù)流①中包含的信宿信息,信宿信息代表了此條指令最終需要到達(dá)的目的地。在主備前置測(cè)控軟件均開(kāi)啟之后,它們都會(huì)主動(dòng)和服務(wù)器軟件進(jìn)行網(wǎng)絡(luò)連接。服務(wù)器軟件會(huì)將主備前置測(cè)控軟件的信宿設(shè)置為相同,那么服務(wù)器軟件在解析數(shù)據(jù)流①之后,會(huì)給主前置測(cè)控軟件和備前置測(cè)控均進(jìn)行轉(zhuǎn)發(fā)數(shù)據(jù),也就產(chǎn)生了數(shù)據(jù)流②和數(shù)據(jù)流③,這兩份數(shù)據(jù)流中的信息完全相同,均從服務(wù)器軟件發(fā)出,到達(dá)主前置測(cè)控軟件和備前置測(cè)控軟件。主前置測(cè)控軟件在收到數(shù)據(jù)流②之后,主前置測(cè)控軟件根據(jù)自身的 “主”狀態(tài),進(jìn)行數(shù)據(jù)流②的解析,解析之后獲取數(shù)據(jù)流②中包含的控制指令,然后根據(jù)控制指令對(duì)下游硬件板卡進(jìn)行相應(yīng)的控制,控制指令執(zhí)行結(jié)束之后,主前置測(cè)控軟件會(huì)在軟件頁(yè)面上進(jìn)行控制指令的流程顯示,這樣試驗(yàn)人員就可以清楚地知道控制指令的執(zhí)行進(jìn)度。除了進(jìn)行控制指令的顯示之外,主前置測(cè)控軟件還要將指令執(zhí)行結(jié)果進(jìn)行回令,因此主前置測(cè)控軟件會(huì)進(jìn)行數(shù)據(jù)流④的發(fā)送。數(shù)據(jù)流④到達(dá)服務(wù)器軟件之后,服務(wù)器軟件會(huì)解析數(shù)據(jù)流④中包含的信宿信息,主前置測(cè)控軟件在組織數(shù)據(jù)流④的時(shí)候,會(huì)在信宿信息中填入主機(jī)控制軟件的信宿編號(hào),因此服務(wù)器軟件就會(huì)將數(shù)據(jù)流④轉(zhuǎn)發(fā)給主機(jī)控制軟件,因此也就有了數(shù)據(jù)流⑤,也就是從服務(wù)器軟件到主機(jī)控制軟件的控制回令。主機(jī)控制軟件在收到數(shù)據(jù)流⑤之后,進(jìn)行數(shù)據(jù)流⑤的解析,在確認(rèn)控制回令的正確性之后,這條控制指令的執(zhí)行才算正式結(jié)束。需要注意的是,備前置測(cè)控軟件在收到數(shù)據(jù)流③之后,備前置測(cè)控軟件根據(jù)自身的 “備”狀態(tài),也會(huì)進(jìn)行數(shù)據(jù)流③的解析,解析之后獲取數(shù)據(jù)流③中包含的控制指令,但是它并不會(huì)對(duì)下游硬件板卡進(jìn)行控制,并且備前置測(cè)控軟件也不會(huì)發(fā)送回令數(shù)據(jù)流。從圖1 也可以發(fā)現(xiàn),從服務(wù)器軟件到備前置測(cè)控軟件的信息流是單向的。解析完數(shù)據(jù)流②之后,備前置測(cè)控軟件會(huì)在頁(yè)面上進(jìn)行控制指令的流程顯示,這樣試驗(yàn)人員也可以清楚的在備前置測(cè)控軟件的頁(yè)面上獲取當(dāng)前控制指令的執(zhí)行進(jìn)度。
圖1 熱備冗余系統(tǒng)數(shù)據(jù)鏈路圖
在設(shè)計(jì)了雙軟件冗余之后,自動(dòng)控制組合之間需要進(jìn)行狀態(tài)同步、故障監(jiān)測(cè)和狀態(tài)切換,因此主前置測(cè)控軟件和備前置測(cè)控軟件之間也需要進(jìn)行網(wǎng)絡(luò)通信。主前置測(cè)控軟件和備前置測(cè)控軟件之間,除了需要隨時(shí)知道彼此的故障與否,還需要知道對(duì)方目前的工作狀態(tài),以便進(jìn)行主備軟件切換判斷和工作流程進(jìn)度上的接續(xù)。因此,主前置測(cè)控軟件和備前置測(cè)控軟件之間,設(shè)計(jì)了從主前置測(cè)控軟件到備前置測(cè)控軟件的實(shí)時(shí) “心跳”信號(hào),根據(jù) “心跳”信號(hào),備前置測(cè)控軟件就
能實(shí)時(shí)地獲取到主前置測(cè)控軟件的狀態(tài)和是否出現(xiàn)故障信息。主前置測(cè)控軟件和備前置測(cè)控軟件之間,除了“心跳”信號(hào)之外,有時(shí)候還需要進(jìn)行其他信息的交換,所以主前置測(cè)控軟件和備前置測(cè)控軟件之間也是需要設(shè)計(jì)通信數(shù)據(jù)鏈路。因此,就形成了主機(jī)控制軟件、主前置測(cè)控軟件和備前置測(cè)控軟件三者之間的數(shù)據(jù)鏈路。
在設(shè)計(jì)完熱備冗余系統(tǒng)數(shù)據(jù)鏈路之后,前置測(cè)控軟件就需要增加之前沒(méi)有的模塊,除了它本身的初始化PXI板卡、接受并解析控制指令和執(zhí)行控制指令之外,為了實(shí)現(xiàn)熱備冗余系統(tǒng),需要增加 “心跳”信號(hào)發(fā)送模塊、“心跳”信號(hào)解析模塊、主備切換模塊和時(shí)串計(jì)數(shù)發(fā)送模塊。因此此處介紹一下前置測(cè)控軟件的模塊劃分,如圖2所示:前置測(cè)控軟件的核心功能是下游PXI硬件板卡的控制和數(shù)據(jù)監(jiān)測(cè),圖中的控制指令接收模塊、控制指令解析模塊和控制指令執(zhí)行模塊用于PXI硬件板卡的控制,PXI板卡初始化模塊用于對(duì)PXI硬件板卡的初始化工作,工作過(guò)程中PXI硬件板卡的數(shù)據(jù)會(huì)上傳到前置測(cè)控軟件內(nèi)部的監(jiān)測(cè)模塊,實(shí)現(xiàn)對(duì)PXI硬件板卡的數(shù)據(jù)實(shí)時(shí)監(jiān)測(cè)。新增的用于熱備冗余系統(tǒng)的模塊包括:軟件初始化模塊、主備狀態(tài)切換模塊、“心跳”信號(hào)發(fā)送接收模塊和時(shí)串計(jì)數(shù)接收發(fā)送模塊,軟件初始化模塊除了進(jìn)行軟件和硬件的初始化之外,還用于熱備冗余系統(tǒng)的熱備冗余機(jī)制啟動(dòng)。主備狀態(tài)切換模塊,接收“心跳”信號(hào)接收模塊傳遞過(guò)來(lái)的 “心跳”信號(hào)和時(shí)串計(jì)數(shù)接收模塊發(fā)送過(guò)來(lái)的時(shí)串計(jì)數(shù)信號(hào),根據(jù)“心跳”信號(hào)決定前置測(cè)控軟件的主備狀態(tài)和后續(xù)的跳變動(dòng)作執(zhí)行。上述幾個(gè)模塊就是前置測(cè)控軟件的主體部分,使得前置測(cè)控軟件具備了測(cè)控和主備切換的功能。
圖2 前置測(cè)控軟件內(nèi)部模塊示意圖
在1.1中已經(jīng)說(shuō)明,主備前置測(cè)控軟件之間同樣也需要進(jìn)行通信,其目的是為了讓互相冗余的軟件知道彼此的狀態(tài),進(jìn)而決定自己的工作狀態(tài)和后續(xù)動(dòng)作。設(shè)計(jì)的系統(tǒng)中,將主備前置測(cè)控軟件之間的通信信號(hào)稱(chēng)為 “心跳”信號(hào)。在正常工作情況下,主前置測(cè)控軟件通過(guò)UDP單播方式向備前置測(cè)控軟件發(fā)送 “心跳”信號(hào),備前置測(cè)控軟件接收主前置測(cè)控軟件發(fā)來(lái)的 “心跳”信號(hào)并進(jìn)行解析,通過(guò)“心跳”信號(hào)獲取對(duì)方的工作狀態(tài)。當(dāng)備前置測(cè)控軟件切換成主前置測(cè)控軟件之后也需要對(duì)外發(fā)送 “心跳”信號(hào),因此主備前置測(cè)控軟件都要能夠具備發(fā)送 “心跳”信號(hào)和接收解析對(duì)方發(fā)來(lái)的“心跳”信號(hào)的功能。
在設(shè)計(jì)的軟件熱備冗余系統(tǒng)中,在正常狀態(tài)下,主前置測(cè)控軟件正常工作,除了進(jìn)行工作操作之外,還向備前置測(cè)控軟件發(fā)出正常的 “心跳”信號(hào),備前置測(cè)控軟件在正常狀態(tài)下,接收到主前置測(cè)控軟件發(fā)來(lái)的 “心跳”信號(hào)。如果主前置測(cè)控軟件下游的硬件發(fā)生了故障,主前置測(cè)控軟件監(jiān)測(cè)并發(fā)現(xiàn)了故障,此時(shí)主前置軟件本身沒(méi)有出現(xiàn)故障,依然能對(duì)外發(fā)送 “心跳”信號(hào),但此時(shí)需要改變發(fā)送的“心跳”信號(hào)的內(nèi)容,改為發(fā)送異常 “心跳”信號(hào)。而對(duì)于備前置測(cè)控軟件來(lái)說(shuō),不管是正常的 “心跳”信號(hào)還是異常的“心跳”信號(hào),都需要進(jìn)行接收和解析。
下面進(jìn)行 “心跳”信號(hào)的內(nèi)容和判別算法的說(shuō)明,設(shè)計(jì)的“心跳”信號(hào)數(shù)據(jù)幀為10個(gè)字節(jié),數(shù)據(jù)幀的內(nèi)容如表1所示。
表1 心跳信號(hào)數(shù)據(jù)幀內(nèi)容
幀頭采用運(yùn)載火箭地面測(cè)發(fā)控系統(tǒng)的幀頭,第一個(gè)字節(jié)為0XEB,第二個(gè)字節(jié)為0x90,作為一個(gè)數(shù)據(jù)幀的開(kāi)始,數(shù)據(jù)幀發(fā)送時(shí)間一共4個(gè)字節(jié),填充這個(gè)數(shù)據(jù)幀的發(fā)送時(shí)間,心跳內(nèi)容一共分為2種,在正常情況下,“心跳”信號(hào)中的心跳內(nèi)容字節(jié)填充的是0x00,異常情況下 “心跳”信號(hào)中填充的心跳內(nèi)容為0x55。檢驗(yàn)和占據(jù)2個(gè)字節(jié),將整個(gè)數(shù)據(jù)幀除去這2個(gè)字節(jié)的其他8個(gè)字節(jié)進(jìn)行累和之后按位取反再加1,將計(jì)算結(jié)果填入這2個(gè)字節(jié)之中,幀尾為1個(gè)字節(jié),填入0xDD,表明這個(gè)數(shù)據(jù)幀的結(jié)束。在設(shè)計(jì)的主前置測(cè)控軟件中,以200ms一幀的速率定時(shí)向備前置測(cè)控軟件發(fā)送“心跳”信號(hào)數(shù)據(jù)幀,備前置測(cè)控軟件進(jìn)行 “心跳”信號(hào)的接收和解析,而關(guān)于心跳信號(hào)的判別算法,在1.3中進(jìn)行詳細(xì)描述。
圖3和圖4分別是設(shè)計(jì)的主前置測(cè)控軟和備前置測(cè)控軟件工作流程圖。切換系統(tǒng)是根據(jù) “心跳”信號(hào)進(jìn)行工作的。對(duì)于主前置測(cè)控軟件來(lái)說(shuō),在工作的過(guò)程中需要對(duì)軟件下游硬件是否進(jìn)行故障進(jìn)行判斷,如果沒(méi)有出現(xiàn)故障,則發(fā)送正常的“心跳”信號(hào)給備前置測(cè)控軟件,并正常執(zhí)行工作流程,對(duì)主機(jī)控制軟件發(fā)來(lái)的控制指令進(jìn)行解析,對(duì)軟件下游硬件下達(dá)執(zhí)行指令,實(shí)時(shí)顯示執(zhí)行的流程進(jìn)度,同時(shí)按照主機(jī)控制軟件的要求給主機(jī)控制軟件進(jìn)行每一條指令的回令。如果監(jiān)測(cè)中發(fā)現(xiàn)了軟件下游的硬件故障,則主前置測(cè)控軟件立即給備前置測(cè)控軟件發(fā)送異常的 “心跳”信號(hào)。
圖3 主前置測(cè)控軟件工作流程圖
圖4 備前置測(cè)控軟件工作流程圖
對(duì)于備前置測(cè)控軟件來(lái)說(shuō),在沒(méi)有切換成主前置測(cè)控軟件之前,同樣會(huì)收到主機(jī)控制軟件的指令信息,不同于主前置測(cè)控軟件,備前置測(cè)控軟件在收到控制指令并解析之后并不會(huì)對(duì)下游硬件下達(dá)執(zhí)行指令,也不會(huì)對(duì)主機(jī)控制軟件進(jìn)行回令,只是實(shí)時(shí)顯示收到的流程進(jìn)度,保證了系統(tǒng)中的三個(gè)軟件均能對(duì)外顯示系統(tǒng)中的工作執(zhí)行進(jìn)度。
備前置測(cè)控軟件會(huì)實(shí)時(shí)接收主前置測(cè)控軟件發(fā)來(lái)的“心跳”信號(hào)并進(jìn)行檢測(cè),因?yàn)橹髑爸脺y(cè)控軟件發(fā)生故障之后,會(huì)發(fā)送出異常的 “心跳”信號(hào)給備前置測(cè)控軟件,備前置測(cè)控軟件在解析 “心跳”信號(hào)數(shù)據(jù)幀的時(shí)候,解析出來(lái)的心跳內(nèi)容如果為0x00,則表明這幀 “心跳”信號(hào)為正常的心跳信號(hào),如果解析出來(lái)的數(shù)據(jù)幀中的心跳內(nèi)容為0x55,則可以判定這幀“心跳”信號(hào)為異常 “心跳”信號(hào)。此時(shí)備前置測(cè)控軟件就會(huì)進(jìn)行主備狀態(tài)的切換,在切換完成之后,由備前置測(cè)控軟件代替原來(lái)的主前置測(cè)控軟件參與工作,此時(shí)對(duì)接受到的主機(jī)控制軟件發(fā)送來(lái)的指令進(jìn)行解析,并對(duì)下游硬件發(fā)送控制指令,同時(shí)給主機(jī)控制軟件發(fā)送回令,并且繼續(xù)顯示執(zhí)行的流程進(jìn)度,這樣就保證了工作流程進(jìn)度的持續(xù)和完整。除此之外,切換之后的軟件也會(huì)和故障前的主前置測(cè)控軟件一樣,對(duì)外發(fā)送 “心跳”信號(hào),表明本軟件已經(jīng)切換為主軟件狀態(tài),如果此時(shí)有新的前置測(cè)控軟件增加到系統(tǒng)中來(lái),也會(huì)收到 “心跳”信號(hào),就可以獲取到此時(shí)系統(tǒng)中的主前置測(cè)控軟件的存在信息。
如果主前置測(cè)控軟件發(fā)生運(yùn)行異常退出、宕機(jī),或者是主前置測(cè)控軟件發(fā)生網(wǎng)絡(luò)異常,無(wú)法連接上局域網(wǎng),無(wú)法對(duì)外發(fā)送網(wǎng)絡(luò)信號(hào),都會(huì)影響到 “心跳”信號(hào)的發(fā)送,則此時(shí)備前置測(cè)控軟件就無(wú)法接收到 “心跳”信號(hào),對(duì)于備前置測(cè)控軟件來(lái)說(shuō)也就是 “心跳”信號(hào)暫停,備前置測(cè)控軟件設(shè)計(jì)的解析 “心跳”信號(hào)模塊中,會(huì)首先解析 “心跳”信號(hào)的心跳內(nèi)容,如果心跳內(nèi)容為0x00,則表明這個(gè)心跳信號(hào)目前為正常的心跳信號(hào),再進(jìn)行下面的 “心跳”信號(hào)中包含的時(shí)間信息的解析,將 “心跳”信號(hào)中的4個(gè)字節(jié)表示的信息幀的發(fā)送時(shí)間解析出來(lái),并和當(dāng)前的備前置測(cè)控軟件這臺(tái)計(jì)算機(jī)上的系統(tǒng)時(shí)間進(jìn)行比對(duì),如果時(shí)間誤差在20ms以為,則認(rèn)為此時(shí)的 “心跳”信號(hào)的時(shí)間正常,如果沒(méi)有收到 “心跳”信號(hào),則隨著備前置測(cè)控軟件所在的計(jì)算機(jī)上的系統(tǒng)時(shí)間的更新,則計(jì)算出來(lái)的時(shí)長(zhǎng)也就會(huì)逐漸變大,然后對(duì)時(shí)長(zhǎng)進(jìn)行判斷,設(shè)定的時(shí)長(zhǎng)閾值為5秒,在超出時(shí)間閾值之后,備前置測(cè)控軟件就可以判定主前置測(cè)控軟件發(fā)生了運(yùn)行異常退出、宕機(jī),或者是網(wǎng)絡(luò)異常,此時(shí)備前置測(cè)控軟件就進(jìn)行切換成主前置測(cè)控軟件進(jìn)行后續(xù)工作。設(shè)計(jì)的時(shí)長(zhǎng)閾值進(jìn)行了可配置設(shè)置,針對(duì)不同的系統(tǒng),可以靈活設(shè)置不同的時(shí)長(zhǎng)閾值,保證了不同系統(tǒng)都能在有效并且合適的時(shí)間內(nèi)完成切換。
在工作人員發(fā)現(xiàn)故障并進(jìn)行故障的排除之后,重新啟動(dòng)軟件,此時(shí)系統(tǒng)中已經(jīng)存在主前置測(cè)控軟件并以相同的速率對(duì)外發(fā)送“心跳”信號(hào),在接收到 “心跳”信號(hào)之后,重新啟動(dòng)的軟件自動(dòng)設(shè)置自身模式為備份狀態(tài),成為此時(shí)系統(tǒng)中的備前置測(cè)控軟件,對(duì)此時(shí)系統(tǒng)中正在工作的主前置測(cè)控軟件進(jìn)行冗余備份,和之前的備前置測(cè)控軟件完全一樣,在收到控制指令并解析之后并不會(huì)對(duì)下游硬件下達(dá)執(zhí)行指令,也不會(huì)對(duì)主機(jī)控制軟件進(jìn)行回令,只是實(shí)時(shí)顯示收到的流程進(jìn)度。圖3和圖4是主前置測(cè)控軟件和備前置測(cè)控軟件的工作流程圖。
在實(shí)際進(jìn)入工作狀態(tài)之前,需要將整個(gè)熱備冗余系統(tǒng)進(jìn)行啟動(dòng),并進(jìn)行初始化。在初始化階段,不論是主前置測(cè)控軟件還是備前置測(cè)控軟件,初始化的時(shí)間點(diǎn),初始化所需要的時(shí)長(zhǎng)均不固定,此時(shí)在初始化之前,熱備冗余系統(tǒng)容易產(chǎn)生誤判,如果工作人員首先開(kāi)啟備前置測(cè)控軟件,備前置測(cè)控軟件在開(kāi)啟之后的一段時(shí)間內(nèi)均沒(méi)有開(kāi)啟主前置測(cè)控軟件,那么按照熱備冗余系統(tǒng)的設(shè)計(jì),在5秒鐘沒(méi)有接收到“心跳”信號(hào)之后,備前置測(cè)控軟件就會(huì)自動(dòng)的切換自身的狀態(tài)變?yōu)橹髑爸脺y(cè)控軟件,如果此時(shí)工作人員繼續(xù)開(kāi)啟主前置測(cè)控軟件,主前置測(cè)控軟件初始化之后監(jiān)測(cè)到自己收到了 “心跳”信號(hào),則會(huì)將自身的狀態(tài)切換成備份狀態(tài),這種跳變就屬于是無(wú)效跳變,不僅會(huì)浪費(fèi)時(shí)間并且可能會(huì)對(duì)試驗(yàn)進(jìn)程造成影響。為了讓設(shè)計(jì)的熱備冗余系統(tǒng)的跳變更加的靈活和實(shí)用,將主備熱備冗余軟件設(shè)計(jì)成在初始化之后的檢測(cè)和跳變?cè)O(shè)置為非使能狀態(tài),換言之在主備前置測(cè)控軟件初始化的時(shí)候,不進(jìn)行故障狀態(tài)的監(jiān)測(cè)和切換,而在主機(jī)控制軟件中添加一條熱備冗余機(jī)制開(kāi)啟指令,只有在工作人員將這條指令發(fā)送給初始化完成好的主備前置測(cè)控軟件之后,主備前置測(cè)控軟件在收到這條控制指令之后,才會(huì)開(kāi)啟故障監(jiān)測(cè)和心跳模塊,讓熱備冗余切換變得更加的有規(guī)律和穩(wěn)定,消除了初始化過(guò)程中容易出現(xiàn)的問(wèn)題。
下面對(duì)設(shè)計(jì)的熱備冗余系統(tǒng)的初始化進(jìn)行描述,首先開(kāi)啟服務(wù)器軟件,然后開(kāi)啟主機(jī)控制軟件并和服務(wù)器軟件進(jìn)行網(wǎng)絡(luò)連接,然后開(kāi)啟主前置測(cè)控組合的計(jì)算機(jī),開(kāi)啟主前置測(cè)控軟件,等待初始化PXI板卡完畢,然后主前置測(cè)控軟件連接服務(wù)器軟件,連接完成之后再開(kāi)啟備前置測(cè)控組合的計(jì)算機(jī),開(kāi)啟備前置測(cè)控軟件,同樣等待初始化PXI板卡完畢,再和服務(wù)器軟件進(jìn)行網(wǎng)絡(luò)連接,網(wǎng)絡(luò)連接都完成之后,從主機(jī)控制軟件上向主備前置測(cè)控軟件發(fā)送熱備冗余機(jī)制開(kāi)啟指令,將主備前置測(cè)控軟件的熱備冗余機(jī)制開(kāi)啟,至此主備前置監(jiān)測(cè)組合的初始化工作才算完成。
在實(shí)際的前置測(cè)控軟件熱備冗余系統(tǒng)中,結(jié)合運(yùn)載火箭地面測(cè)發(fā)控系統(tǒng)日常工作,從硬件和軟件層面,總結(jié)出如下6種故障模式,列舉在表2中。
表2 故障類(lèi)型說(shuō)明
在梳理了這幾種故障類(lèi)型之后,在實(shí)驗(yàn)室進(jìn)行這幾種故障類(lèi)型的模擬,用于檢測(cè)設(shè)計(jì)的熱備冗余系統(tǒng)是否可以監(jiān)測(cè)到故障并完成熱備冗余的切換。故障的模擬的試驗(yàn)在實(shí)驗(yàn)室手動(dòng)進(jìn)行,考慮到前置測(cè)控軟件的實(shí)際工作狀態(tài),將模擬試驗(yàn)的前置條件均設(shè)置為如下兩種情況:第一種是主機(jī)控制軟件還沒(méi)有給主前置測(cè)控軟件發(fā)控制指令,指令執(zhí)行流程并沒(méi)有開(kāi)始,第二種是主機(jī)控制軟件已經(jīng)開(kāi)始給主前置測(cè)控軟件發(fā)送控制指令了,在某條指令的執(zhí)行流程完全結(jié)束之后進(jìn)行故障類(lèi)型的模擬。
1)前置測(cè)控軟件異常退出和前置測(cè)控軟件異常宕機(jī):這兩種故障情況是考慮到軟件本身層面和硬件層面,因?yàn)檫\(yùn)載火箭試驗(yàn)時(shí)間久,指令多,在上位機(jī)上長(zhǎng)時(shí)間運(yùn)行的前置測(cè)控軟件可能會(huì)出現(xiàn)異常崩潰退出,或者出現(xiàn)異常宕機(jī)的情況。在實(shí)驗(yàn)室進(jìn)行這種故障類(lèi)型的模擬,分為如下幾種情況,第一種是將主前置測(cè)控軟件所在的計(jì)算機(jī)進(jìn)行突然掉電處理,第二種是將主前置測(cè)控軟件進(jìn)程強(qiáng)制關(guān)閉,第三種是使用主前置測(cè)控軟件提供的 “主軟件異常關(guān)閉”故障模擬按鈕進(jìn)行這種故障的模擬,這個(gè)按鈕的底層實(shí)現(xiàn)邏輯也是將本軟件的進(jìn)程強(qiáng)制關(guān)閉。在實(shí)驗(yàn)室中進(jìn)行兩種前置條件下的三種不同故障方式的模擬。主前置測(cè)控軟件在出現(xiàn)異常之后,備前置測(cè)控軟件會(huì)在較短的時(shí)間內(nèi)進(jìn)行狀態(tài)切換,從 “備”狀態(tài)切換為 “主”狀態(tài),然后繼續(xù)和其他系統(tǒng)軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因如下:主前置測(cè)控軟件出現(xiàn)了異常退出或者宕機(jī)的情況,影響到整個(gè)主前置測(cè)控軟件的運(yùn)行,那么此時(shí)主前置測(cè)控軟件對(duì)外發(fā)送 “心跳”信號(hào)的動(dòng)作也就無(wú)法完成了,此時(shí)系統(tǒng)中從主前置測(cè)控軟件發(fā)往備前置測(cè)控軟件的 “心跳”信號(hào)也會(huì)消失。待機(jī)狀態(tài)的備前置測(cè)控軟件在沒(méi)收到 “心跳”信號(hào)之后,進(jìn)行時(shí)長(zhǎng)統(tǒng)計(jì),如果未收到的時(shí)長(zhǎng)超過(guò)5秒鐘,也就是說(shuō)主前置測(cè)控軟件出現(xiàn)了超過(guò)5秒鐘的軟件異常退出或者宕機(jī),則可以判定為主前置測(cè)控軟件發(fā)生了軟件故障,就會(huì)進(jìn)行后續(xù)主備狀態(tài)切換處理。
2)前置測(cè)控組合網(wǎng)卡故障:這種故障情況是考慮到前置測(cè)控軟件所在的上位機(jī)的網(wǎng)卡可能會(huì)在長(zhǎng)時(shí)間工作的過(guò)程中出現(xiàn)硬件和驅(qū)動(dòng)上的問(wèn)題,通過(guò)在上位機(jī)上進(jìn)行網(wǎng)卡適配器突然禁止使用的方法進(jìn)行這種故障的模擬。在實(shí)驗(yàn)室中進(jìn)行兩種前置條件下的這種故障方式的模擬,試驗(yàn)的結(jié)果是主前置測(cè)控軟件在出現(xiàn)異常之后,備前置測(cè)控軟件會(huì)在較短的時(shí)間內(nèi)進(jìn)行狀態(tài)切換,從 “備”狀態(tài)切換為“主”狀態(tài),然后繼續(xù)和其他系統(tǒng)軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因和1)相同,在出現(xiàn)網(wǎng)卡故障之后,主前置測(cè)控軟件同樣無(wú)法對(duì)外發(fā)送“心跳”信號(hào),那么備前置測(cè)控軟件超過(guò)5秒鐘沒(méi)有收到心跳信號(hào),則也可以判定為前置測(cè)控軟件發(fā)生了網(wǎng)絡(luò)故障,同樣進(jìn)行后續(xù)主備狀態(tài)切換處理。
3)前置測(cè)控組合通信網(wǎng)線物理?yè)p壞:這種故障情況是考慮到在試驗(yàn)的過(guò)程中,使用的網(wǎng)線可能會(huì)出現(xiàn)老化故障,或者是外界物理因素導(dǎo)致網(wǎng)線物理?yè)p壞,失去網(wǎng)絡(luò)通信功能。實(shí)驗(yàn)室中進(jìn)行了兩種不同的故障模擬方法,第一種是直接將主前置測(cè)控軟件所在的上位機(jī)和地面測(cè)發(fā)控系統(tǒng)交換機(jī)之間的網(wǎng)線進(jìn)行剪斷,第二種是手動(dòng)將主前置測(cè)控軟件所在的計(jì)算機(jī)和測(cè)發(fā)控系統(tǒng)交換機(jī)之間的網(wǎng)線進(jìn)行斷開(kāi)物理連接。在實(shí)驗(yàn)室中進(jìn)行兩種前置條件下的這兩種故障方式的模擬,試驗(yàn)的結(jié)果是主前置測(cè)控軟件在出現(xiàn)這種網(wǎng)絡(luò)故障之后,備前置測(cè)控軟件會(huì)在較短的時(shí)間內(nèi)進(jìn)行狀態(tài)切換,從 “備”狀態(tài)切換為 “主”狀態(tài),然后繼續(xù)和其他系統(tǒng)軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因也和1)相同,在出現(xiàn)網(wǎng)線故障之后,主前置測(cè)控軟件同樣無(wú)法對(duì)外發(fā)送 “心跳”信號(hào),那么備前置測(cè)控軟件超過(guò)5秒鐘沒(méi)有收到心跳信號(hào),則也可以判定為主前置測(cè)控軟件發(fā)生了網(wǎng)絡(luò)故障,同樣進(jìn)行后續(xù)主備狀態(tài)切換處理。
4)PXI硬件板卡檢測(cè)到數(shù)據(jù)邊界值溢出:在試驗(yàn)的進(jìn)行過(guò)程中,前置測(cè)控軟件不僅僅是對(duì)PXI硬件板卡下達(dá)控制指令,還需要監(jiān)測(cè)外界系統(tǒng)電纜傳遞過(guò)來(lái)的較多的數(shù)據(jù)信息,前置測(cè)控軟件在設(shè)計(jì)的過(guò)程中需要提前將需要監(jiān)測(cè)的各項(xiàng)數(shù)據(jù)的邊界值進(jìn)行預(yù)設(shè),當(dāng)數(shù)據(jù)到達(dá)PXI硬件板卡之后,前置測(cè)控軟件的監(jiān)測(cè)模塊會(huì)對(duì)板卡采集到的數(shù)據(jù)進(jìn)行判斷,如果數(shù)據(jù)在預(yù)先設(shè)計(jì)的范圍之內(nèi),那么認(rèn)為這這個(gè)數(shù)據(jù)是正常的,如果收到的數(shù)據(jù)在預(yù)先設(shè)置的范圍之外,此時(shí)無(wú)法確定是傳遞過(guò)來(lái)的數(shù)據(jù)異常還是PXI硬件板卡的采集出現(xiàn)問(wèn)題,那么此時(shí)前置測(cè)控軟件均可以認(rèn)為是PXI硬件板卡出現(xiàn)故障,那么此時(shí)也應(yīng)該進(jìn)行主備軟件的跳變切換。對(duì)于這種故障類(lèi)型,實(shí)驗(yàn)室中進(jìn)行的方法是將輸入PXI機(jī)箱的某幾項(xiàng)數(shù)據(jù)手動(dòng)的設(shè)置超出最大值的數(shù)據(jù)值,觀察到主前置測(cè)控軟件在監(jiān)測(cè)到異常數(shù)據(jù)值之后,備前置測(cè)控軟件在較短時(shí)間內(nèi)從 “備”狀態(tài)切換為 “主”狀態(tài),然后繼續(xù)和其他系統(tǒng)軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因是因?yàn)橹髑爸脺y(cè)控軟件在監(jiān)測(cè)到異常的數(shù)據(jù)之后,判定是主前置PXI硬件板卡故障,然后立即對(duì)備前置測(cè)控軟件發(fā)送異常的 “心跳”信號(hào),備前置測(cè)控軟件在收到異常的 “心跳”信號(hào)之后,可以認(rèn)為主前置測(cè)控軟件發(fā)生了網(wǎng)絡(luò)故障,同樣進(jìn)行后續(xù)主備狀態(tài)切換處理。
5)PXI硬件板卡控制接口返回值不正確:在試驗(yàn)的進(jìn)行過(guò)程中,前置測(cè)控軟件需要對(duì)PXI硬件板卡下達(dá)控制指令,但是控制指令的執(zhí)行可能成功也有可能失敗,PXI硬件板卡的驅(qū)動(dòng)提供的底層執(zhí)行函數(shù)上,通過(guò)函數(shù)的返回值來(lái)判斷控制指令的執(zhí)行成功與否,因此前置測(cè)控軟件在調(diào)用PXI硬件板卡驅(qū)動(dòng)提供的執(zhí)行函數(shù)之后,需要對(duì)某些執(zhí)行函數(shù)的返回值進(jìn)行判斷,如果執(zhí)行的函數(shù)返回值表明函數(shù)執(zhí)行失敗,那么表明此時(shí)前置測(cè)控軟件的這條控制指令就沒(méi)有執(zhí)行成功,此時(shí)前置測(cè)控軟件就可以判定PXI硬件板卡出現(xiàn)了故障,那么此時(shí)也應(yīng)該進(jìn)行主備軟件的跳變切換。對(duì)于這種故障類(lèi)型,實(shí)驗(yàn)室中進(jìn)行的方法是在代碼中將PXI硬件板卡的驅(qū)動(dòng)的底層執(zhí)行函數(shù)的返回值進(jìn)行手動(dòng)取反之后再提供給前置測(cè)控軟件的調(diào)用函數(shù),這樣前置測(cè)控軟件的調(diào)用函數(shù)接收到的返回值就出現(xiàn)了異常,觀察到主前置測(cè)控軟件在監(jiān)測(cè)到異常的PXI硬件板卡控制接口返回值之后,備前置測(cè)控軟件在較短時(shí)間內(nèi)從 “備”狀態(tài)切換為“主”狀態(tài),然后繼續(xù)和其他系統(tǒng)軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因是因?yàn)橹髑爸脺y(cè)控軟件在監(jiān)測(cè)到異常的接口返回值之后,判定是主前置PXI硬件板卡故障,然后立即對(duì)備前置測(cè)控軟件發(fā)送異常的“心跳”信號(hào),備前置測(cè)控軟件在收到異常的“心跳”信號(hào)之后,可以認(rèn)為主前置測(cè)控軟件發(fā)生了網(wǎng)絡(luò)故障,同樣進(jìn)行后續(xù)主備狀態(tài)切換處理。
6)PXI硬件板卡初始化失?。涸谠囼?yàn)的開(kāi)始階段,前置測(cè)控軟件需要進(jìn)行PXI硬件板卡初始化,PXI硬件板卡初始化工作完成之后,前置測(cè)控軟件才能和PXI硬件板卡配合工作,但是初始化工作可能會(huì)出現(xiàn)某塊板卡初始化失敗的情況,因此在主前置測(cè)控軟件的代碼中對(duì)PXI硬件板卡初始化函數(shù)的返回值進(jìn)行判斷,如果返回值不正確或者PXI硬件板卡的初始化函數(shù)無(wú)法調(diào)用,則前置測(cè)控軟件也可以認(rèn)為出現(xiàn)了PXI硬件板卡故障,那么此時(shí)也應(yīng)該進(jìn)行主備軟件的跳變切換。對(duì)于這種故障類(lèi)型,實(shí)驗(yàn)室中進(jìn)行的方法是將某塊PXI硬件板卡的驅(qū)動(dòng)進(jìn)行單獨(dú)卸載,然后正常啟動(dòng)前置測(cè)控軟件去嘗試初始化所有的PXI硬件板卡,出現(xiàn)的現(xiàn)象是軟件在啟動(dòng)完畢后,卸載了驅(qū)動(dòng)的PXI硬件板卡會(huì)出現(xiàn)初始化失敗,后續(xù)備前置測(cè)控軟件會(huì)在較短時(shí)間內(nèi)從“備”狀態(tài)切換為 “主”狀態(tài),然后繼續(xù)和主機(jī)控制軟件,服務(wù)器軟件一起準(zhǔn)備進(jìn)入工作狀態(tài)或者是繼續(xù)工作狀態(tài)。這種故障能及時(shí)切換的原因是因?yàn)橹髑爸脺y(cè)控軟件在監(jiān)測(cè)到PXI硬件板卡初始化失敗之后,判定是主前置PXI硬件板卡故障,然后立即對(duì)備前置測(cè)控軟件發(fā)送異常的“心跳”信號(hào),備前置測(cè)控軟件在收到異常的 “心跳”信號(hào)之后,可以認(rèn)為主前置PXI硬件板卡發(fā)生了故障,同樣進(jìn)行后續(xù)主備狀態(tài)切換處理。
圖5是對(duì)上文描述的6種故障的分類(lèi)圖示,根據(jù)故障模塊將6種故障類(lèi)型分為3大類(lèi),分別是前置測(cè)控軟件故障、前置測(cè)控組合網(wǎng)卡或者網(wǎng)線故障和PXI硬件故障。其中前面兩種故障大類(lèi)包含故障類(lèi)型1)-3),這3種故障類(lèi)型對(duì)系統(tǒng)中心跳信號(hào)的影響都是會(huì)使得心跳信號(hào)的消失,第三種故障大類(lèi)包含故障類(lèi)型4)-6),這3種故障類(lèi)型對(duì)系統(tǒng)中心跳信號(hào)的影響是使得心跳信號(hào)從正常信號(hào)變?yōu)楫惓P盘?hào),在實(shí)驗(yàn)室的故障模擬中熱備冗余系統(tǒng)均能出現(xiàn)正確及時(shí)的故障監(jiān)測(cè)并進(jìn)行主備前置測(cè)控軟件的跳變,保證系統(tǒng)的工作不受影響。
圖5 模擬故障類(lèi)型列舉
需要說(shuō)明的是,本論文設(shè)計(jì)的熱備冗余系統(tǒng)中的主備軟件中的 “主”和 “備”不是固定的,而是互為主備,主備軟件的代碼設(shè)計(jì)完全相同,軟件初次啟動(dòng)的時(shí)候通過(guò)讀取配置文件的方式來(lái)確定主備狀態(tài),或者是通過(guò)主機(jī)控制軟件來(lái)進(jìn)行遠(yuǎn)程控制軟件的主備狀態(tài)。在主前置測(cè)控軟件出現(xiàn)故障之后,主前置測(cè)控軟件從系統(tǒng)中暫時(shí)脫離,此時(shí)備前置測(cè)控軟件切換為主軟件狀態(tài),而當(dāng)工作人員將原來(lái)的主前置測(cè)控軟件中的故障進(jìn)行恢復(fù)之后,重新啟動(dòng)軟件,此時(shí)啟動(dòng)的軟件能夠收到系統(tǒng)中的現(xiàn)存的主前置測(cè)控軟件發(fā)來(lái)的“心跳”信號(hào),即使此時(shí)讀取的配置文件信息為主軟件狀態(tài),但是設(shè)定 “心跳”信號(hào)的優(yōu)先級(jí)更高,因此重新啟動(dòng)的軟件將保持為 “備”狀態(tài)。如果此時(shí)系統(tǒng)中正常工作的主前置測(cè)控軟件再次出現(xiàn)故障,那么此時(shí)重新啟動(dòng)之后保持為備用狀態(tài)的前置測(cè)控軟件也可以切換為 “主”狀態(tài)進(jìn)行工作,實(shí)現(xiàn)主備冗余的互相切換,保證了系統(tǒng)工作的穩(wěn)定性。
實(shí)際的前置測(cè)控軟件,不僅需要接受主機(jī)控制軟件的控制指令并回令,也會(huì)給主機(jī)控制軟件發(fā)送時(shí)串,如果在發(fā)送時(shí)串的過(guò)程中出現(xiàn)故障,無(wú)論是軟件異常退出或者宕機(jī)、前置測(cè)控軟件出現(xiàn)網(wǎng)絡(luò)中斷和前置測(cè)控軟件下游的硬件異常中的哪一種故障模式,主前置測(cè)控軟件的時(shí)串發(fā)送過(guò)程都會(huì)中斷。
為了發(fā)生故障之后不影響時(shí)串發(fā)送,備前置測(cè)控軟件切換主備狀態(tài)之后不僅僅需要繼續(xù)給主機(jī)控制軟件發(fā)送時(shí)串,并且要準(zhǔn)確的知道時(shí)串的發(fā)送進(jìn)度,需要從下一個(gè)還沒(méi)有發(fā)送的時(shí)串處開(kāi)始進(jìn)行發(fā)送,不能出現(xiàn)某一條時(shí)串的重復(fù)發(fā)送,同樣也不能出現(xiàn)時(shí)串的發(fā)送遺漏。因此在主前置測(cè)控軟件給主機(jī)控制軟件發(fā)送時(shí)串的同時(shí),需要在 “心跳”信號(hào)中添加已經(jīng)發(fā)送的時(shí)串計(jì)數(shù),而備前置測(cè)控軟件在接受到“心跳”信號(hào)并檢測(cè)的同時(shí),需要將時(shí)串計(jì)數(shù)保存,每次收到“心跳”信號(hào)之后都會(huì)進(jìn)行時(shí)串計(jì)數(shù)的更新,保證此時(shí)此刻軟件中存儲(chǔ)的時(shí)串計(jì)數(shù)都是最新的。如果在主前置測(cè)控軟件在發(fā)送時(shí)串的過(guò)程中發(fā)生故障導(dǎo)致時(shí)串發(fā)送停止,那么在備前置測(cè)控軟件切換成主狀態(tài)之后,需要繼續(xù)給主機(jī)控制軟件發(fā)送時(shí)串,根據(jù)之前在 “心跳”信號(hào)中保存下來(lái)的時(shí)串計(jì)數(shù),此時(shí)的切換主備狀態(tài)之后的前置測(cè)控軟件就可以從時(shí)串序列計(jì)數(shù)的下一個(gè)時(shí)串處開(kāi)始發(fā)送,能夠保證時(shí)串的不中斷不重復(fù)發(fā)送,保證時(shí)串發(fā)送工作的連續(xù)性和完整性。圖6是主前置測(cè)控軟件發(fā)送時(shí)串時(shí)發(fā)生異常導(dǎo)致發(fā)送中斷之后的切換示意圖。
圖6 時(shí)串發(fā)送中止后切換示意圖
設(shè)計(jì)的熱備冗余軟件系統(tǒng)用于實(shí)際工作過(guò)程中,主備軟件的切換時(shí)間需要進(jìn)行嚴(yán)格要求,在軟件出現(xiàn)故障之后,要在一定的時(shí)間內(nèi)進(jìn)行切換,這樣才能盡可能小地減少軟件發(fā)生故障對(duì)系統(tǒng)和試驗(yàn)流程的影響。在代碼設(shè)計(jì)過(guò)程中,如上文所述將心跳信號(hào)為主備切換的依據(jù),代碼設(shè)計(jì)的時(shí)候,在發(fā)生長(zhǎng)時(shí)間的心跳信號(hào)消失或者是心跳信號(hào)跳變,那么在進(jìn)行判斷之后如果確實(shí)符合主備切換的條件,則立即進(jìn)行軟件中主備切換模塊的函數(shù)調(diào)用,中間不進(jìn)行任何不必要的執(zhí)行過(guò)程,以節(jié)省切換的時(shí)間。除此之外,在心跳信號(hào)接收和解析部分的代碼中,網(wǎng)絡(luò)數(shù)據(jù)的處理上也采用延遲最低的一級(jí)緩存模式,采用兩個(gè)獨(dú)立的線程,其中一個(gè)進(jìn)行心跳信號(hào)數(shù)據(jù)的接收和存儲(chǔ),另外一個(gè)線程進(jìn)行心跳信號(hào)的處理,網(wǎng)絡(luò)數(shù)據(jù)只經(jīng)過(guò)一次緩存,最大限度地減少處理數(shù)據(jù)過(guò)程中的時(shí)間消耗。而在熱備冗余系統(tǒng)設(shè)計(jì)完成之后,進(jìn)行系統(tǒng)的切換試驗(yàn),首先在所內(nèi)實(shí)驗(yàn)室中進(jìn)行人工計(jì)時(shí)的方式記錄軟件切換的時(shí)間,記錄結(jié)果為切換時(shí)間在1秒之內(nèi)。為了更精確的進(jìn)行切換時(shí)間的對(duì)比,在代碼設(shè)計(jì)中添加心跳信號(hào)的發(fā)送時(shí)間戳、接收時(shí)間戳和切換時(shí)間戳的記錄并保存在本地文件中,在試驗(yàn)結(jié)束之后,進(jìn)行接收時(shí)間戳和切換時(shí)間戳的比對(duì),得到的結(jié)果為實(shí)際切換時(shí)間約為0.7秒。表3是在6種故障類(lèi)型完成之后,心跳信號(hào)的3種時(shí)間戳記錄表,表中的數(shù)據(jù)是從主備前置測(cè)控軟件的心跳信號(hào)本地存盤(pán)文件中獲取的,從表3也可以看出,這6種故障類(lèi)型下,主備前置測(cè)控軟件的實(shí)際切換時(shí)間為0.7秒左右,能夠很好地滿(mǎn)足目前運(yùn)載火箭地面測(cè)發(fā)控系統(tǒng)的試驗(yàn)要求。
表3 心跳信號(hào)時(shí)間戳記錄表
設(shè)計(jì)完成的軟件系統(tǒng)具備了在線熱備自主切換的能力,能夠?qū)崿F(xiàn)故障之后不需要人工進(jìn)行軟件切換。在系統(tǒng)開(kāi)啟后,主機(jī)控制軟件也可以根據(jù)實(shí)際情況修改不同計(jì)算機(jī)上的軟件的主備優(yōu)先級(jí)。軟件冗余系統(tǒng)可以對(duì)主備軟件運(yùn)行狀態(tài)進(jìn)行實(shí)時(shí)監(jiān)測(cè),如果出現(xiàn)軟件故障可以及時(shí)發(fā)現(xiàn)并采取處理。主備前置測(cè)控軟件之間通過(guò)狀態(tài)同步、故障監(jiān)測(cè)和狀態(tài)切換能實(shí)現(xiàn)雙機(jī)熱備冗余系統(tǒng),每個(gè)前置測(cè)控軟件都具備自檢功能,可以根據(jù)自身和系統(tǒng)的當(dāng)前狀態(tài)確定主備狀態(tài)。通過(guò)試驗(yàn)驗(yàn)證,確定在發(fā)生故障之后,3秒鐘之內(nèi)完成軟件的主備切換,并且故障軟件的工作狀態(tài)信息也能進(jìn)行保存,保證了主備軟件工作的連續(xù)性和準(zhǔn)確性,提升了運(yùn)載火箭地面測(cè)發(fā)控軟件系統(tǒng)的穩(wěn)定性。