宋宏江 高何 盧成志 何曉宇 白少華
(北京空間飛行器總體設(shè)計(jì)部,北京 100094)
航天器綜合測(cè)試是衛(wèi)星研制流程中的重要環(huán)節(jié),測(cè)試期間需要頻繁向航天器上注遙控指令,同時(shí)通過遙測(cè)反饋檢查航天器動(dòng)作執(zhí)行的正確性。目前,各類航天器均設(shè)計(jì)了大量遙控指令(二進(jìn)制碼格式),需要在航天器綜合測(cè)試現(xiàn)場(chǎng)進(jìn)行指令編制和簽字復(fù)核,主要包括間接指令、星務(wù)指令、總線指令、數(shù)據(jù)注入指令以及由上述指令組合而成的任務(wù)級(jí)指令序列等,用于實(shí)現(xiàn)航天器的動(dòng)作執(zhí)行及任務(wù)操控[1]。這些事先難于準(zhǔn)備和充分驗(yàn)證,同時(shí)制作的指令數(shù)量過多,使用時(shí)難于檢索和實(shí)時(shí)上注,無法滿足航天器快速測(cè)試驗(yàn)證需求。因此本文提出基于Lua腳本的航天器遙控快速測(cè)試驗(yàn)證技術(shù),將遙控指令注冊(cè)為L(zhǎng)ua函數(shù),航天器綜合測(cè)試過程中需要上注指令時(shí),由綜合測(cè)試平臺(tái)中的指令控制臺(tái)發(fā)送遙控指令參數(shù),再通過綜合測(cè)試平臺(tái)集成并擴(kuò)展的Lua解釋器將腳本語言轉(zhuǎn)換為能夠生成遙控指令的函數(shù)語言完成指令碼字的生成、校驗(yàn)并進(jìn)行實(shí)時(shí)上注。
Lua[2-4]是一種嵌入式腳本語言,由標(biāo)準(zhǔn)C編寫而成,具備可擴(kuò)展性好、簡(jiǎn)單、高效的特點(diǎn),在其類庫的支持下,Lua腳本語言可非常方便地與C語言結(jié)合,完成遙控指令生成的流程控制,基于Lua腳本的航天器遙控快速測(cè)試驗(yàn)證方法,應(yīng)用了Lua的下列特點(diǎn)。
(1)Lua腳本語言是基于關(guān)聯(lián)數(shù)組和可擴(kuò)展語法結(jié)構(gòu)設(shè)計(jì)的語言,具有變量無類型、動(dòng)態(tài)定義類型、面向?qū)ο蠼Y(jié)構(gòu)、編譯產(chǎn)生中間代碼和內(nèi)存自動(dòng)回收等特點(diǎn),所以常被作為一種腳本嵌入于其它主系統(tǒng)中。
(2)Lua腳本模塊作為一個(gè)獨(dú)立的線程,與主程序和其他線程互不影響地同時(shí)工作。Lua腳本模塊位于主程序的進(jìn)程內(nèi)部,可容易地訪問主程序內(nèi)部的變量和函數(shù)。
(3)Lua腳本程序可很好地創(chuàng)建接口,定義數(shù)據(jù)結(jié)構(gòu),編碼和解碼每條指令。由于Lua本身是一種解釋性的語言,因此,不需要編譯過程,大大縮短了動(dòng)態(tài)鏈接庫方式的程序語言的編寫、編譯、鏈接和運(yùn)行的時(shí)間,允許用戶運(yùn)行時(shí)編寫應(yīng)用程序,這樣,主程序變得更加靈活和實(shí)用,非常適合實(shí)時(shí)性要求高、運(yùn)行環(huán)境多樣的場(chǎng)合。
圖1 綜合測(cè)試平臺(tái)與Lua腳本的調(diào)用關(guān)系圖Fig.1 Relationship between integrated test platform and Lua script
本文中綜合測(cè)試平臺(tái)與Lua腳本的調(diào)用關(guān)系[5]如圖1所示。航天器綜合測(cè)試平臺(tái)作為測(cè)試處理服務(wù)器,Lua作為嵌入式腳本,嵌入到宿主語言實(shí)現(xiàn)的綜合測(cè)試平臺(tái)遙控指令生成模塊中,為綜合測(cè)試平臺(tái)的遙控指令快速生成功能提供參數(shù)配置和邏輯描述;同時(shí)綜合測(cè)試平臺(tái)遙控指令生成模塊又作為L(zhǎng)ua的底層擴(kuò)展庫,支撐Lua腳本訪問航天器綜合測(cè)試系統(tǒng)中各種數(shù)據(jù)和計(jì)算資源。
遙控指令快速生成系統(tǒng)遵循平臺(tái)化思想,在航天器綜合測(cè)試系統(tǒng)基礎(chǔ)上深度融合Lua腳本,通過Lua用來描述各類指令的模型和生成算法,屏蔽各型號(hào)指令生成接口協(xié)議和數(shù)據(jù)格式的多樣性,實(shí)現(xiàn)了航天器綜合測(cè)試平臺(tái)和Lua腳本之間的交互通信,解決了航天器綜合測(cè)試遙控指令快速生成的難題。
設(shè)計(jì)思路如下:
(1)遙控指令快速生成系統(tǒng)創(chuàng)建一個(gè)獨(dú)立的進(jìn)程用于完成航天器遙控指令的快速生成任務(wù),該進(jìn)程啟動(dòng)時(shí)加載動(dòng)態(tài)指令生成模塊。
(2)當(dāng)遙控指令快速生成系統(tǒng)收到用戶發(fā)送的遙控指令生成命令后,對(duì)命令進(jìn)行解析,調(diào)用Lua語言提供的luaL_newstate接口函數(shù)創(chuàng)建Lua解釋器,然后調(diào)用lua_checkstack接口擴(kuò)展Lua的堆棧容量,用來接收用戶的指令參數(shù),調(diào)用luaL_openlibs接口加載Lua通用擴(kuò)展庫,最后調(diào)用lua_register接口向Lua解釋器注冊(cè)遙控指令快速生成的擴(kuò)展函數(shù)。本系統(tǒng)中設(shè)計(jì)的Lua擴(kuò)展有:①getparamhex是獲取實(shí)時(shí)參數(shù)的函數(shù),供Lua指令文件使用,該函數(shù)含有兩個(gè)參數(shù),第一個(gè)參數(shù)是DATE.A001形式,第二個(gè)參數(shù)是%08x形式;②savefile是將數(shù)據(jù)存儲(chǔ)至遙控指令快速生成系統(tǒng)型號(hào)目錄下,第一個(gè)參數(shù)為要存儲(chǔ)的數(shù)據(jù),第二個(gè)參數(shù)為要存儲(chǔ)的文件名;③isocompute是計(jì)算字符串的ISO校驗(yàn),參數(shù)為要計(jì)算的字符串,返回值為需要計(jì)算的字符串加上校驗(yàn)碼;④crccompute是計(jì)算字符串的CRC校驗(yàn),參數(shù)為要計(jì)算的字符串,返回值為需要計(jì)算的字符串加上校驗(yàn)碼;⑤paramreverse是將字符串按照字節(jié)反轉(zhuǎn)的函數(shù),供Lua指令文件調(diào)用。
(3)按照Lua語法以及已經(jīng)在Lua解釋器中擴(kuò)展的包含各種獲取航天器綜合測(cè)試系統(tǒng)資源的Lua命令將航天器自動(dòng)化測(cè)試需要的動(dòng)態(tài)指令的生成邏輯編寫到Lua腳本中,保存為klu.lua文件。
(4)獲取用戶發(fā)送的指令生成命令的參數(shù),包括指令生成的規(guī)則名稱和參數(shù)數(shù)值,并傳遞給遙控指令快速生成系統(tǒng)的Lua解釋器,然后系統(tǒng)調(diào)用lua_pcall動(dòng)態(tài)生成指令,期間如果指令需要獲取實(shí)時(shí)遙測(cè)數(shù)據(jù)作為其參數(shù),利用系統(tǒng)擴(kuò)展的getparamhex函數(shù)訂閱遙測(cè)工程值,最后系統(tǒng)通過lua_tostring獲取腳本生成的指令字符串。
(5)整個(gè)指令生成過程的差錯(cuò)控制首先由系統(tǒng)調(diào)用luaL_loadfile接口將Lua腳本文件加載到遙控指令快速生成系統(tǒng)的Lua解釋器中,調(diào)用lua_pcall對(duì)Lua腳本文件進(jìn)行語法和詞法檢查,返回航天器綜合測(cè)試系統(tǒng)靜態(tài)檢查信息;然后再是指令生成過程中系統(tǒng)對(duì)指令參數(shù)及生成邏輯進(jìn)行合法性判斷和差錯(cuò)控制;最后指令字符串生成后,遙控指令快速生成系統(tǒng)將字符串轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)返回給測(cè)試系統(tǒng)判斷并處理,當(dāng)返回結(jié)果為0時(shí)表示指令生成腳本邏輯有錯(cuò),不做上星處理,當(dāng)返回結(jié)果為非0數(shù)值時(shí),則系統(tǒng)生成二進(jìn)制碼流由前端設(shè)備上注至航天器,實(shí)現(xiàn)航天器遙控指令的快速生成及上注執(zhí)行。遙控指令生成過程如圖2所示。
圖2 遙控指令快速生成過程Fig.2 Fast generation process of remote control command
本文以高分七號(hào)衛(wèi)星綜合測(cè)試平臺(tái)[6-8]為例介紹遙控指令快速生成驗(yàn)證方法,如圖3所示。
高分七號(hào)指令快速生成主要涉及:前端設(shè)備、指令控制臺(tái)以及遙控指令快速生成系統(tǒng)3部分。
(1)前端設(shè)備接收衛(wèi)星下傳的遙測(cè)信息并送入遙控指令快速生成系統(tǒng)中。
(2)指令控制臺(tái)提供用戶操作界面,實(shí)現(xiàn)指令參數(shù)輸入的可視化效果,傳遞遙控指令生成所需參數(shù)給遙控指令快速生成系統(tǒng)。
(3)遙控指令快速生成系統(tǒng)包括遙測(cè)解析模塊、動(dòng)態(tài)指令生成模塊:遙測(cè)解析模塊將遙測(cè)信息從數(shù)據(jù)源碼狀態(tài)處理為數(shù)據(jù)工程值狀態(tài);動(dòng)態(tài)指令生成模塊加載Lua腳本文件,完成Lua腳本函數(shù)注冊(cè),當(dāng)需要進(jìn)行遙控指令上注時(shí),動(dòng)態(tài)指令生成模塊傳遞遙控指令生成所需參數(shù)給Lua解釋器,Lua解釋器對(duì)所述Lua腳本文件進(jìn)行解釋執(zhí)行,生成指令二進(jìn)制碼并實(shí)時(shí)發(fā)送給前端設(shè)備,最終送達(dá)衛(wèi)星。
測(cè)試驗(yàn)證過程如下。
1)指令腳本創(chuàng)建
創(chuàng)建高分七號(hào)動(dòng)態(tài)指令腳本邏輯文件klu.lua[9-10],編寫動(dòng)態(tài)指令的生成邏輯,如某功能指令-載荷單站回放DZHF,其腳本如圖4所示。
圖4中,DZHF為指令函數(shù)名,對(duì)應(yīng)測(cè)試系統(tǒng)傳遞的指令名稱;(p1…)為傳遞的參數(shù)數(shù)量及內(nèi)容;crccompute() 等為在測(cè)試系統(tǒng)中用C語言定義的擴(kuò)展函數(shù),用來計(jì)算校驗(yàn)和;string.format( )等為L(zhǎng)ua內(nèi)置函數(shù)及運(yùn)算符,實(shí)現(xiàn)對(duì)指令字符串的格式轉(zhuǎn)換及數(shù)學(xué)計(jì)算等,最終返回生成的字符串結(jié)果至測(cè)試系統(tǒng)。
圖3 遙控指令快速生成系統(tǒng)Fig.3 Fast generation and test system of remote control command
圖4 動(dòng)態(tài)指令生成腳本Fig.4 Dynamic instruction generation script
2)遙控指令發(fā)送
測(cè)試系統(tǒng)指令操作臺(tái)界面選擇載荷單站回放(DZHF)指令,填寫相應(yīng)參數(shù),并發(fā)送指令,如圖5所示。
3)遙控指令生成
遙控指令快速生成系統(tǒng)收到指令控制臺(tái)傳遞的載荷單站回放(DZHF)指令參數(shù)后,調(diào)用kua.lua中的DZHF函數(shù)生成載荷單站回放(DZHF)的指令碼。
通過上述測(cè)試驗(yàn)證系統(tǒng),將高分七號(hào)衛(wèi)星模式測(cè)試中96個(gè)指令序列模板抽象為8個(gè)Lua函數(shù)腳本,使指令模板數(shù)量降低了90%以上,指令生成和上注時(shí)間由原來的5~30 min縮短為10~30 s。試驗(yàn)表明:基于Lua腳本的航天器遙控指令快速生成方法利用Lua擴(kuò)展性、高效率的特點(diǎn),獲取實(shí)時(shí)遙測(cè)使遙控指令更加真實(shí)可信,不需重新編譯可即時(shí)調(diào)整腳本邏輯,提高了測(cè)試效率與驗(yàn)證的充分性,簡(jiǎn)化了生成步驟,最終較好地完成了遙控指令實(shí)時(shí)生成及上注的需求(見圖5)。
圖5 指令發(fā)送示意圖Fig.5 Instruction sending diagram
本文提出的基于Lua腳本的航天器遙控指令快速生成方法,實(shí)現(xiàn)了指令參數(shù)與指令碼字、邏輯時(shí)序的映射關(guān)系,根據(jù)測(cè)試項(xiàng)目靈活選取指令參數(shù),大幅降低測(cè)試準(zhǔn)備時(shí)間,尤其適用于指令參數(shù)多、衍生需求大的遙感衛(wèi)星載荷任務(wù)指令任務(wù)編排場(chǎng)景,現(xiàn)已在我國(guó)多個(gè)航天器綜合測(cè)試中推廣應(yīng)用,無論是在整合指令模板數(shù)量方面,還是在縮短指令生成時(shí)間方面,其效率均顯著地提升達(dá)90%以上。
本文基于Lua腳本,提出了一種航天器遙控快速測(cè)試驗(yàn)證技術(shù),該技術(shù)通過測(cè)試前完成遙控指令Lua函數(shù)的注冊(cè),測(cè)試時(shí)根據(jù)測(cè)試項(xiàng)目靈活選取指令參數(shù),即可完成遙控指令傳參-生成-上傳-存儲(chǔ)-上注等一系列動(dòng)作,大幅降低測(cè)試準(zhǔn)備時(shí)間,解決了指令生成靈活性差的問題,同時(shí)利用Lua擴(kuò)展性、高效率的特點(diǎn),獲取實(shí)時(shí)遙測(cè)使遙控指令更加真實(shí)可信,不需重新編譯可即時(shí)調(diào)整腳本邏輯,有效保障了遙控指令執(zhí)行的安全性,避免了人工重復(fù)制作或復(fù)核不到位等風(fēng)險(xiǎn)。實(shí)踐證明,該方法可以快速生成各類結(jié)構(gòu)復(fù)雜的遙控指令,大幅提高了遙感衛(wèi)星指令生成上注的測(cè)試效率。