程小軍,林回祥
(中國電子科技集團公司第三十八研究所 軟件系統研究部,安徽 合肥 230031)
浮空器在升空過程中會處于不同的環境中[1-2],地面與浮空器之間甚至艇載軟件之間的指令信號都容易受到干擾。盡管通過指令編碼和校驗方式可以在一定程度上減輕錯誤指令出現的概率[3],但為了進一步確保指令的正確性,還需要增加其他手段[4-5],比較常見的有“3”判“2”或者“5”判“3”甚至更大數量的余度指令判別法。這種判別方法是:在規定的時間內連續接收到多組指令,只要其中有規定數量的相同指令A,指令A就是有效的。
本文根據實際應用需要,研究了一種基于滑窗的余度指令判別算法。
在浮空器關鍵指令處理過程中,特別是在下位機(控制執行機構)對關鍵指令進行處理時,不但需要根據幀頭、幀尾、數據長度、指令標簽以及校驗和等多個特征點對指令進行合理性判斷,還要求上位機能在規定時間內發出多條相同指令,從而以“3”判“2”或者“5”判“3”來獲取有效指令。一般多余度指令處理模型如圖1所示。
圖1 多余度指令處理模型
值得注意的是,實際應用情況要比理想狀態要復雜得多。比如,接收的指令可能有連續多組關鍵指令,或者是一般指令和關鍵指令交叉存在。于是,干擾問題和時序問題會造成多條相同指令之間夾雜著其他指令的現象,這時普通的多余度指令處理方法就可能會失效。失效情況如圖2所示。對關鍵指令采取“5”判“3”判斷,假設在第N-1個余度判斷時,下位機收到5個指令(編號為奇數的指令為關鍵指令),分別是指令1、指令1、指令2、指令3、指令3,即關鍵指令在該次判斷里不能得到執行,因而被拋棄。在第N個余度判斷里,接著接收后面的指令,分別為指令3、指令3(指令3丟失1個)、指令4、指令5、指令5,同樣,關鍵指令仍不能得到執行。第N+1個余度判斷情況與第N個余度判斷一樣(指令5丟失1個)。可以看出,只要關鍵指令丟失一個,就容易造成執行不成功的情況。若在相同的5個關鍵指令中間還存在其他指令,就更容易出現失效情況。另外,對于非關鍵指令,究竟是當作干擾還是當作正確指令予以執行也是個需要思考的問題。
本文正是基于這些失效情況的考慮,提出一種新的判別算法。
圖2 普通多余度指令處理失效情況
針對普通余度指令算法存在的不足,本文給出一種基于滑窗的余度指令判別算法。該算法分為以下幾步,其流程圖如圖3所示。
圖3 基于滑窗的余度指令判別算法流程
步驟1:判斷接收到的指令是否是關鍵指令,若不是,則直接執行該指令;若是,則將其放入緩存(一共可以保存5個指令)中。
步驟2:如果緩存滿,則執行“5”判“3”規則,未滿則繼續接收指令。
步驟3:如果其中有3個相同的關鍵指令,則執行對應的關鍵指令。移除最舊指令(若存在多個連續的指令,則全部移除),將未移除的指令向前移動,留出的緩存空間繼續接收關鍵指令。
步驟4:步驟1—步驟3往復進行。如果在規定的時間內沒有關鍵指令到來,則清空緩存。
在滑窗移動過程中,可以確保連續指令(只要大于三個就可以)得到執行。注意到,如果關鍵指令要能夠得到執行,其中間最多可以夾雜2個其他關鍵指令。當中間夾雜的其他關鍵指令超過2個時(比如,地面遙控時,指令因為信號不好導致部分指令丟失嚴重的情況),該算法就難以應付了。這與我們的“5”判“3”規則有關。如果規則要求只要在規定的時間內接收到三組同樣的關鍵指令就可以執行相應的控制,則可以采取多個余度指令緩存接收不同指令的方式或者采取更大緩存空間的方式。本文對此不作展開論述。
為了驗證本文所提算法的有效性,本節通過大量的測試用例給予說明。在指令輸入端,分別輸入10萬組指令,并在傳輸過程注入一定概率的指令錯誤。在指令接收端通過冗余指令判別算法提取指令。通過對普通算法和本文算法的比較,展示本文算法的優勢。針對指令錯誤概率分別為10%、 0.1%、以及無錯誤等3種情況進行仿真,輸入指令包括4組關鍵指令和4組普通指令,隨機選取這8組指令之一輸入到系統,并且保證每次輸入關鍵指令時都能連續輸入5組以利于“5”判“3”的實現,得到表1-表3的運行結果。
表1 指令錯誤為10%下的測試結果
續表1
指令傳輸錯誤率10%(10萬組)第1次采樣(指令個數)第2次采樣(指令個數)第3次采樣(指令個數)輸入指令普通指令冗余解算本文指令冗余解算輸入指令普通指令冗余解算本文指令冗余解算輸入指令普通指令冗余解算本文指令冗余解算一般指令1534148024802523946794679534048044804一般指令2494444564456493144424442489744114411一般指令3481043504350481143304330491144074407一般指令4498444634463501045374537494144314431
表2 指令錯誤為0.1%下的測試結果
表3 無指令錯誤下的測試結果
為了針對性地展示結果,表1-表3所得結果要求系統不可將兩個相同的關鍵指令組挨在一起(表4所對應的條件卻可以),從表中所展示的數據可以看出:
(1)本文所給出的算法相比普通指令不易丟失指令;
(2)兩種算法對普通指令都能夠順利提取;
(3)隨著指令錯誤概率的降低,兩種算法都趨于完全提取出指令,在無錯誤注入時能完全解析出所有指令。
對于第(3)條結論,是建立在系統在輸入指令時不可將兩個相同的關鍵指令組挨在一起的條件下(中間可以有普通指令),對于違反這個條件的情況見表4。
從表4可以看出,普通冗余算法得到的關鍵指令個數竟然超出了輸入的關鍵指令數,這是因為兩組關鍵指令一共有10個,如果中間有其他指令,則普通冗余算法根據其接收的先后順序會將關鍵指令拆成三個部分,導致根據“5”判“3”所解算的指令個數超出實際組數。然而,本文所提算法卻并未出現這種情況。
表4 關鍵指令組挨在一起的測試結果
本文針對普通余度指令判斷算法存在的問題,提出了一種基于滑窗的余度指令判斷算法。該算法能夠避免連續指令得不到執行的問題,在處理關鍵指令問題上具有一定優勢。且在浮空器的關鍵指令執行為應用平臺進行驗證過程中,大量的測試用例成功執行表明該算法具有較大的工程實用價值。
[1] 王蓮英,楊柳,張功學,等.浮空器的關鍵技術探討[J].飛航導彈,2013(7):30-33.
[2] 楊秉,楊健,李小將,等.臨近空間浮空器運行環境及其影響[J].航天器環境工程,2008,25(6):555-557.
[3] 賁宗玉.某型無人機導航控制研究與軟件實現[D].西安:西北工業大學,2007.
[4] 楊柳慶,肖前貴,劉久富. 無人機飛控軟件抗干擾設計[J].微計算機信息,2008,24(5):52-53.
[5] 楊林芳.無人機容錯飛行控制系統研究[D].南京:南京航空航天大學,2007.