安占新 許傳明 王曉玲
北京航天自動控制研究所,北京 100854
目前,航天控制領域普遍采用冗余方案進行系統設計,使用3臺計算機三冗余,或者使用2臺計算機熱備份。每臺計算機的輸入數據完全相同,并完成相同的計算和控制功能,比如三冗余的箭載計算機、三冗余的時序控制計算機、熱備份的1553B總線控制器以及無備份的組合導航計算機。
三冗余飛行控制軟件運行在箭載計算機上;熱備份的總線控制器軟件運行在1553B總線控制器計算機上;組合導航軟件運行在組合導航計算機上。這些軟件之間通過1553B總線、RS485總線、雙口RAM進行交互,通過共用時鐘和周期中斷進行同步[1],組成了多模式、異構軟件系統[2]。系統中的各軟件需要協同工作,以完成飛行控制功能,因此,軟件設計人員需要進行冗余設計,比如,飛行控制軟件需要確保在同一個計算周期進入飛行控制狀態,每個計算周期內獲得的輸入數據要一致;總線控制器軟件需要確保在進行主備機狀態切換后,發送的控制指令完整、不丟失、不重復。
本文對三冗軟件之間、三冗余軟件與不冗余軟件之間以及三冗余軟件與熱備份軟件之間實時交互數據的同步性和一致性進行分析,找出造成多模異構冗余軟件系統不同步的時機、方式等影響因素,在此基礎上提出消除這些因素的軟件設計思想,給出確保冗余軟件系統同步和一致的設計方案。
根據冗余軟件系統的結構模式,多模異構冗余軟件系統不同步的方式主要有3種:三冗余軟件間的不同步、三冗余軟件與不冗余軟件之間的不同步、三冗余軟件與熱備份軟件之間的不同步。根據不同步的內容,多模異構冗余軟件系統不同步的方式主要有3種:軟件運行不同步、信號或者數據輸入不同步、軟件控制輸出不同步。
三冗余軟件之間存在軟件運行不同步、信號或者數據輸入不同步。三冗余軟件與不冗余軟件之間存在信號或者數據輸入不同步、軟件控制輸出不同步。三冗余軟件與熱備份軟件之間存在信號或者數據輸入不同步、軟件控制輸出不同步。
1)軟件運行不同步。
三冗余軟件分別運行在相同的3臺計算機上,由于軟件運行在不同的CPU上,上電順序、上電過程存在不確定性,使得三冗余軟件運行不會完全同步[3]。因此,可能會導致在計算周期N,三冗余軟件中的一個軟件開始計時,進行周期為S的周期控制,而三冗余軟件中的其他2個軟件由于已經錯過了本周期N的周期控制信號S,需要在計算周期N+1開始計時,進行周期為S的周期控制。這樣三冗余軟件系統出現了計時不一致,開始運算的初始輸入不同,可能導致三冗余軟件每周期的計算結果不同,控制輸出信號不同。

圖1 三冗余軟件間運行不同步
2)信號或者數據輸入不同步
三冗余軟件在完成同一測試項目時,由于測試控制命令的隨機性以及軟件運行方式的限制,可能存在三冗余軟件中的某一個軟件或者2個軟件在控制周期N查詢收到了測試命令M,而另外2個軟件或者1個軟件在控制周期N+1查詢收到了測試命令M,從而導致三冗余軟件執行測試命令M的時刻不同,它們的測試結果會有所差別。

圖2 三冗余軟件間信號或數據輸入不同步
1)信號或者數據輸入不同步
由于三冗余軟件與熱備份軟件運行不同步,在熱備份軟件切換前后,三冗余軟件正在獲取熱備份軟件的狀態信息,可能會出現:三冗余軟件的某1個或者2個軟件獲取到切換前熱備份軟件1為主機,而另外2個軟件或者1個軟件獲取到切換后熱備份軟件2為主機。這樣三冗余軟件在本控制周期內從不同的熱備份軟件錄取控制計算周期內的輸入信號或者數據,導致三冗余軟件計算不一致。

圖3 三冗余軟件與熱備份軟件間信號或者數據輸入不同步
2)軟件控制輸出不同步。
三冗余軟件的控制指令通過熱備份軟件中的主機軟件輸出到執行機構執行,因此,當熱備份軟件發生切換時,切換后的軟件在本控制周期內可能會因未收到三冗余軟件的控制指令而不執行相應的控制功能。
在控制周期N,三冗軟件向熱備份軟件的主機軟件發出了控制命令L,熱備份軟件的主機軟件在本周期內執行了控制命令L。而在控制周期M,三冗余軟件向熱備份軟件的主機軟件發出了控制命令K,此時,熱備份軟件進行了主輻機切換,在控制周期M內,切換后的主機軟件沒有收到控制命令K,因此,不會執行控制命令K,導致控制命令K丟失,未執行。

圖4 三冗余軟件與熱備份軟件間控制輸出不同步
由于三冗余軟件運行的不同步性,三冗余軟件獲取不冗余軟件輸入的數據或者信號可能不同步,導致三冗余軟件的計算結果存在偏差。
控制周期N,在不冗余軟件向三冗余軟件輸出數據或者信號之前,三冗余軟件1和3已經執行了獲取不冗余軟件數據或者信號的操作,因此,三冗余軟件1和3本周期未錄取到不冗余軟件的數據或者信號。而三冗余軟件2在不冗余軟件向三冗余軟件輸出數據或者信號之后,執行獲取不冗余軟件數據或者信號的操作,因此三冗余軟件2錄取到了不冗余軟件的輸入數據或者信號,在本控制周期內參與了控制。因此,三冗余軟件2與軟件1和3的計算結果可能會存在差異。

圖5 三冗余軟件與不冗余軟件間不同步
三冗余軟件間軟件運行不同步的特點是:運行速度慢的軟件必須完成當前正在進行的工作才能進行后續工作。因此,運行較快的軟件必須延時等待運行較慢的軟件,以便達到同步運行的目的。
在延時等待的過程中,運行較快的軟件需要實時查詢運行較慢軟件的狀態,一旦得知其它2個軟件已經準備好,則借助硬件S周期同步信號進行計時,進入周期運算。冗余軟件之間交互狀態可以通過雙口RAM、FIFO或者狀態量。
如圖6所示,在第N周期,三冗余軟件2已經初始化完畢,但是,若其未獲得三冗余軟件1和三冗余軟件3初始化完畢的信號,則需要等待,直到第N+1周期,三冗余軟件才一起同步進行計時,開始周期運算。

圖6 三冗余軟件間延時等待同步策略
三冗余軟件間信號或者數據輸入不同步的特點是:三冗余軟件未在同一個運算周期開始測試。因此,三冗余軟件通過雙口RAM、FIFO或者狀態量進行測試命令交互[4-5],以便在同一測試周期開始測試。
如圖7所示,在周期控制信號S到達時刻,三冗余軟件交互地面測試命令。因此,雖然控制信號在第N周期內到來,但是,在第N周期開始時刻,三冗余軟件交互的地面測試命令無測試M命令;在第N周期,軟件查詢冗余后的測試命令,但無法查詢到進行測試M命令。在第N+1周期的開始時刻,三冗余軟件交互測試命令,能夠查詢到冗余后測試M命令,三冗余軟件在同一周期進行同步測試。

圖7 三冗余軟件間交互表決同步策略
三冗余軟件與熱備份軟件間信號或者數據輸入不同步、三冗余軟件與不冗余軟件間不同步的特點是:軟件操作時間點沖突。因此,如果在控制周期T內將軟件操作串行進行,則能夠避免軟件操作沖突。以三冗余軟件與不冗余軟件間不同步為例進行說明。
在控制周期T開始時刻,不冗余軟件向三冗余軟件輸出數據或者信號,在控制周期內的T/3時刻,三冗余軟件獲取不冗余軟件的數據或者信號,這樣,三冗余軟件獲取的數據和信號就是一致的。

圖8 三冗余軟件與熱備份軟件及不冗余軟件間串行同步策略
三冗余軟件與熱備份軟件間軟件控制輸出不同步的特點是:由于熱備份軟件切換時刻與冗余軟件計算輸出時刻相同,導致切換后熱備份軟件中主機不能發送冗余軟件的命令。因此,三冗余軟件在發送命令時需要同時發送給熱備份軟件中的主機和輔機。熱備份軟件收到冗余軟件的命令后,保存此命令,如果本機是主機,且此命令尚未發送,則發送此命令。發送完畢后,主機記錄此命令已經發送完畢;同時,輔機可以通過1553B總線MT監測此命令,如果監測到總線上主機發送此命令成功,則記錄此命令已經完成發送。
如圖9所示,在發生故障時,熱備份軟件主輔機切換,切換前的主機未發送控制命令K。切換后的主機檢測到:三冗余軟件已經發送命令K;控制命令K未發送成功。切換后的主機根據上述情況以及本機為主機的狀態,發送控制命令K,直至發送成功。硬件切換機制保證熱備份軟件在同一時刻僅一個軟件能夠發送控制命令。

圖9 三冗余軟件與熱備份軟件記憶重發策略
在分析造成多模異構冗余軟件系統不同步的時機、方式等影響因素的基礎上,根據影響因素的不同特點提出了確保冗余軟件系統數據同步和一致的延時等待、交互表決、串行操作以及記憶重發的同步控制策略。經過工程實踐證明,這些控制策略簡單易行,對其它軟件冗余系統進行同步控制設計有一定的借鑒意義。