宋宏江 高何 盧成志 何曉宇 白少華
(北京空間飛行器總體設計部,北京 100094)
航天器綜合測試是衛星研制流程中的重要環節,測試期間需要頻繁向航天器上注遙控指令,同時通過遙測反饋檢查航天器動作執行的正確性。目前,各類航天器均設計了大量遙控指令(二進制碼格式),需要在航天器綜合測試現場進行指令編制和簽字復核,主要包括間接指令、星務指令、總線指令、數據注入指令以及由上述指令組合而成的任務級指令序列等,用于實現航天器的動作執行及任務操控[1]。這些事先難于準備和充分驗證,同時制作的指令數量過多,使用時難于檢索和實時上注,無法滿足航天器快速測試驗證需求。因此本文提出基于Lua腳本的航天器遙控快速測試驗證技術,將遙控指令注冊為Lua函數,航天器綜合測試過程中需要上注指令時,由綜合測試平臺中的指令控制臺發送遙控指令參數,再通過綜合測試平臺集成并擴展的Lua解釋器將腳本語言轉換為能夠生成遙控指令的函數語言完成指令碼字的生成、校驗并進行實時上注。
Lua[2-4]是一種嵌入式腳本語言,由標準C編寫而成,具備可擴展性好、簡單、高效的特點,在其類庫的支持下,Lua腳本語言可非常方便地與C語言結合,完成遙控指令生成的流程控制,基于Lua腳本的航天器遙控快速測試驗證方法,應用了Lua的下列特點。
(1)Lua腳本語言是基于關聯數組和可擴展語法結構設計的語言,具有變量無類型、動態定義類型、面向對象結構、編譯產生中間代碼和內存自動回收等特點,所以常被作為一種腳本嵌入于其它主系統中。
(2)Lua腳本模塊作為一個獨立的線程,與主程序和其他線程互不影響地同時工作。Lua腳本模塊位于主程序的進程內部,可容易地訪問主程序內部的變量和函數。
(3)Lua腳本程序可很好地創建接口,定義數據結構,編碼和解碼每條指令。由于Lua本身是一種解釋性的語言,因此,不需要編譯過程,大大縮短了動態鏈接庫方式的程序語言的編寫、編譯、鏈接和運行的時間,允許用戶運行時編寫應用程序,這樣,主程序變得更加靈活和實用,非常適合實時性要求高、運行環境多樣的場合。

圖1 綜合測試平臺與Lua腳本的調用關系圖Fig.1 Relationship between integrated test platform and Lua script
本文中綜合測試平臺與Lua腳本的調用關系[5]如圖1所示。航天器綜合測試平臺作為測試處理服務器,Lua作為嵌入式腳本,嵌入到宿主語言實現的綜合測試平臺遙控指令生成模塊中,為綜合測試平臺的遙控指令快速生成功能提供參數配置和邏輯描述;同時綜合測試平臺遙控指令生成模塊又作為Lua的底層擴展庫,支撐Lua腳本訪問航天器綜合測試系統中各種數據和計算資源。
遙控指令快速生成系統遵循平臺化思想,在航天器綜合測試系統基礎上深度融合Lua腳本,通過Lua用來描述各類指令的模型和生成算法,屏蔽各型號指令生成接口協議和數據格式的多樣性,實現了航天器綜合測試平臺和Lua腳本之間的交互通信,解決了航天器綜合測試遙控指令快速生成的難題。
設計思路如下:
(1)遙控指令快速生成系統創建一個獨立的進程用于完成航天器遙控指令的快速生成任務,該進程啟動時加載動態指令生成模塊。
(2)當遙控指令快速生成系統收到用戶發送的遙控指令生成命令后,對命令進行解析,調用Lua語言提供的luaL_newstate接口函數創建Lua解釋器,然后調用lua_checkstack接口擴展Lua的堆棧容量,用來接收用戶的指令參數,調用luaL_openlibs接口加載Lua通用擴展庫,最后調用lua_register接口向Lua解釋器注冊遙控指令快速生成的擴展函數。本系統中設計的Lua擴展有:①getparamhex是獲取實時參數的函數,供Lua指令文件使用,該函數含有兩個參數,第一個參數是DATE.A001形式,第二個參數是%08x形式;②savefile是將數據存儲至遙控指令快速生成系統型號目錄下,第一個參數為要存儲的數據,第二個參數為要存儲的文件名;③isocompute是計算字符串的ISO校驗,參數為要計算的字符串,返回值為需要計算的字符串加上校驗碼;④crccompute是計算字符串的CRC校驗,參數為要計算的字符串,返回值為需要計算的字符串加上校驗碼;⑤paramreverse是將字符串按照字節反轉的函數,供Lua指令文件調用。
(3)按照Lua語法以及已經在Lua解釋器中擴展的包含各種獲取航天器綜合測試系統資源的Lua命令將航天器自動化測試需要的動態指令的生成邏輯編寫到Lua腳本中,保存為klu.lua文件。
(4)獲取用戶發送的指令生成命令的參數,包括指令生成的規則名稱和參數數值,并傳遞給遙控指令快速生成系統的Lua解釋器,然后系統調用lua_pcall動態生成指令,期間如果指令需要獲取實時遙測數據作為其參數,利用系統擴展的getparamhex函數訂閱遙測工程值,最后系統通過lua_tostring獲取腳本生成的指令字符串。
(5)整個指令生成過程的差錯控制首先由系統調用luaL_loadfile接口將Lua腳本文件加載到遙控指令快速生成系統的Lua解釋器中,調用lua_pcall對Lua腳本文件進行語法和詞法檢查,返回航天器綜合測試系統靜態檢查信息;然后再是指令生成過程中系統對指令參數及生成邏輯進行合法性判斷和差錯控制;最后指令字符串生成后,遙控指令快速生成系統將字符串轉換成二進制數據返回給測試系統判斷并處理,當返回結果為0時表示指令生成腳本邏輯有錯,不做上星處理,當返回結果為非0數值時,則系統生成二進制碼流由前端設備上注至航天器,實現航天器遙控指令的快速生成及上注執行。遙控指令生成過程如圖2所示。

圖2 遙控指令快速生成過程Fig.2 Fast generation process of remote control command
本文以高分七號衛星綜合測試平臺[6-8]為例介紹遙控指令快速生成驗證方法,如圖3所示。
高分七號指令快速生成主要涉及:前端設備、指令控制臺以及遙控指令快速生成系統3部分。
(1)前端設備接收衛星下傳的遙測信息并送入遙控指令快速生成系統中。
(2)指令控制臺提供用戶操作界面,實現指令參數輸入的可視化效果,傳遞遙控指令生成所需參數給遙控指令快速生成系統。
(3)遙控指令快速生成系統包括遙測解析模塊、動態指令生成模塊:遙測解析模塊將遙測信息從數據源碼狀態處理為數據工程值狀態;動態指令生成模塊加載Lua腳本文件,完成Lua腳本函數注冊,當需要進行遙控指令上注時,動態指令生成模塊傳遞遙控指令生成所需參數給Lua解釋器,Lua解釋器對所述Lua腳本文件進行解釋執行,生成指令二進制碼并實時發送給前端設備,最終送達衛星。
測試驗證過程如下。
1)指令腳本創建
創建高分七號動態指令腳本邏輯文件klu.lua[9-10],編寫動態指令的生成邏輯,如某功能指令-載荷單站回放DZHF,其腳本如圖4所示。
圖4中,DZHF為指令函數名,對應測試系統傳遞的指令名稱;(p1…)為傳遞的參數數量及內容;crccompute() 等為在測試系統中用C語言定義的擴展函數,用來計算校驗和;string.format( )等為Lua內置函數及運算符,實現對指令字符串的格式轉換及數學計算等,最終返回生成的字符串結果至測試系統。

圖3 遙控指令快速生成系統Fig.3 Fast generation and test system of remote control command

圖4 動態指令生成腳本Fig.4 Dynamic instruction generation script
2)遙控指令發送
測試系統指令操作臺界面選擇載荷單站回放(DZHF)指令,填寫相應參數,并發送指令,如圖5所示。
3)遙控指令生成
遙控指令快速生成系統收到指令控制臺傳遞的載荷單站回放(DZHF)指令參數后,調用kua.lua中的DZHF函數生成載荷單站回放(DZHF)的指令碼。
通過上述測試驗證系統,將高分七號衛星模式測試中96個指令序列模板抽象為8個Lua函數腳本,使指令模板數量降低了90%以上,指令生成和上注時間由原來的5~30 min縮短為10~30 s。試驗表明:基于Lua腳本的航天器遙控指令快速生成方法利用Lua擴展性、高效率的特點,獲取實時遙測使遙控指令更加真實可信,不需重新編譯可即時調整腳本邏輯,提高了測試效率與驗證的充分性,簡化了生成步驟,最終較好地完成了遙控指令實時生成及上注的需求(見圖5)。

圖5 指令發送示意圖Fig.5 Instruction sending diagram
本文提出的基于Lua腳本的航天器遙控指令快速生成方法,實現了指令參數與指令碼字、邏輯時序的映射關系,根據測試項目靈活選取指令參數,大幅降低測試準備時間,尤其適用于指令參數多、衍生需求大的遙感衛星載荷任務指令任務編排場景,現已在我國多個航天器綜合測試中推廣應用,無論是在整合指令模板數量方面,還是在縮短指令生成時間方面,其效率均顯著地提升達90%以上。
本文基于Lua腳本,提出了一種航天器遙控快速測試驗證技術,該技術通過測試前完成遙控指令Lua函數的注冊,測試時根據測試項目靈活選取指令參數,即可完成遙控指令傳參-生成-上傳-存儲-上注等一系列動作,大幅降低測試準備時間,解決了指令生成靈活性差的問題,同時利用Lua擴展性、高效率的特點,獲取實時遙測使遙控指令更加真實可信,不需重新編譯可即時調整腳本邏輯,有效保障了遙控指令執行的安全性,避免了人工重復制作或復核不到位等風險。實踐證明,該方法可以快速生成各類結構復雜的遙控指令,大幅提高了遙感衛星指令生成上注的測試效率。