李宏亮 賈茹 張悅 潘順良
(中國空間技術(shù)研究院載人航天總體部,北京 100094)
航天器綜合測試是航天器研制流程中的重要環(huán)節(jié),利用遙控指令、程控指令、控制命令等形成測試指令序列是航天器測試的主要手段[1]。當前我國航天器發(fā)射密度不斷提高,對航天器測試自動化、智能化的需求日益突出,特別是以載人航天、北斗導航為代表的國家重大航天項目,面臨著型號批產(chǎn)化、發(fā)射密集化的任務態(tài)勢,航天器綜合測試壓力巨大。
目前國內(nèi)對航天器自動化測試已開展了部分實施和應用。按照測試單元和顆粒度劃分,覆蓋了電纜、單機、軟件、系統(tǒng)等各層級[2-4];按照測試環(huán)節(jié)劃分,從測試需求、測試設計、測試實施、測試評估等航天器測試主要環(huán)節(jié)均有不同程度的自動化手段介入[5-7]。然而,航天器測試準備環(huán)節(jié)的自動化程度相對較低。當前,用于航天器綜合測試的直接依據(jù)類文件即測試細則的生成仍然需要測試人員花費大量的時間、精力編寫,工作量大,容易出錯;更重要的是,編寫完成的細則僅是測試實施輸入性文件,大量測試準備工作需要在測試細則的基礎(chǔ)上形成指令測試序列、遙控注入數(shù)據(jù)等測試實施輸出文件,用于執(zhí)行航天器綜合測試。
以載人航天器模擬飛行(簡稱模飛)測試準備為例,需要按照被測試航天器的具體模飛細則,形成注入數(shù)據(jù)序列文件,按照測試細則規(guī)定的指令發(fā)送時間、發(fā)送次數(shù)、發(fā)送間隔、所在注入文件編號形成模飛測試所需注入數(shù)據(jù)。傳統(tǒng)的注入數(shù)據(jù)序列生成全部依靠人工進行,需要測試人員對照測試細則,逐步檢取需要添加程控指令相關(guān)信息,費時費力,且容易出現(xiàn)遺漏或誤添加指令的問題,產(chǎn)出效率低,已無法適應高強度載人航天器綜合測試需求。
為解決上述問題,本文提出一種航天器測試注入數(shù)據(jù)序列自動生成方法,設計并實現(xiàn)了航天器綜合測試注入數(shù)據(jù)序列自動生成軟件,通過運行此軟件實現(xiàn)注入數(shù)據(jù)序列自動化生成,提高了序列文件生成效率和準確度。該方法可以與航天器綜合測試系統(tǒng)的自動化設計進行有機結(jié)合,提高綜合測試系統(tǒng)的整體運行效率。
航天器測試注入數(shù)據(jù)序列生成以相應測試細則為輸入條件。細則按照航天器飛行程序,以一定時間比例安排了整個測試的關(guān)鍵事件,并詳細規(guī)定了各個事件過程中航天器需要執(zhí)行的指令類型、指令內(nèi)容、時刻、次數(shù)、指令間的時間間隔等具體要求。細則中包含的指令包括測控通信系統(tǒng)發(fā)出的遙控指令、航天器數(shù)管分系統(tǒng)按照飛行程序自主發(fā)出的程控指令、制導導航與控制(Guidance Navigation and Control, GNC)等分系統(tǒng)發(fā)出的手控指令等不同類型。注入數(shù)據(jù)序列生成是將細則中規(guī)定由航天器數(shù)管分系統(tǒng)自主發(fā)出的程控指令及注入數(shù)據(jù)全部篩選出來,按照一定格式形成序列文件,并將若干數(shù)量指令分配至特定序號的注入文件中,以便于其它測試工具進一步完成注入數(shù)據(jù)的過程。
注入數(shù)據(jù)序列生成過程需要完成以下功能。
(1)篩選航天器測試細則中,需要由器上數(shù)管分系統(tǒng)自主發(fā)出的指令集合。
(2)具備對測試細則的時間順序校對功能,以檢查細則中的指令發(fā)送時間是否正確(即是否出現(xiàn)排序在后的指令時間先于排序在前的指令時間的現(xiàn)象)。
(3)具備對測試細則的時間格式校對功能,以檢查細則中的時間格式是否正確,并兼容時間單位大小寫、同一時間量的不同表達方式(即是否出現(xiàn)時間單位不完整、大小寫混用、同一時間量綱采用不同單位表述的現(xiàn)象)。
(4)具備對生成的注入數(shù)據(jù)序列進行自校對功能。受航天器測試方法約束,包含有若干條程控指令的注入數(shù)據(jù)的發(fā)送時刻必須晚于該注入數(shù)據(jù)所包含指令的最晚發(fā)送時刻(若不滿足該條件,會造成程控指令漏發(fā),影響航天器測試的正常進行),自校對功能將用于檢查生成的序列文件中是否存在違背上述約束的指令分配情況。
航天器測試注入數(shù)據(jù)序列生成由注入數(shù)據(jù)序列生成軟件實現(xiàn)。該軟件讀取測試細則,檢索細則中的特定關(guān)鍵字,輸出注入數(shù)據(jù)序列文件,并提示生成序列文件的正確性。
注入數(shù)據(jù)序列生成軟件主要由4個功能模塊構(gòu)成,如圖1所示。顯示模塊用于顯示軟件界面,提供人機交互接口;文件讀取模塊用于從外部讀取細則文件,按照設計的規(guī)則檢索關(guān)鍵字;校對模塊在文件讀取過程后,對細則中的時間順序、時間格式及指令與注入數(shù)據(jù)塊的相對時序進行逐一校核,若存在錯誤,則向用戶給出醒目提示;序列輸出模塊在校對模塊完成校對后,完成注入數(shù)據(jù)序列文件的輸出。
圖1 注入數(shù)據(jù)序列生成軟件模塊組成
2.2.1 軟件輸入
得益于自動化測試程序的應用,航天器測試細則文件按照相對標準化的程序進行編寫,所有的測試用例均表達為一個.xls格式的表格文件。該表格文件的每一列代表一組測試細則信息,例如執(zhí)行序號、測試操作時間、測試操作碼、測試操作碼參數(shù)等。每一個測試操作碼可以包含一個或多個測試子操作,且可以包含參數(shù),常見的操作碼內(nèi)容包括:發(fā)送指令、發(fā)送注入數(shù)據(jù)、判讀遙測參數(shù)等[8]。程序化的細則文件格式為注入數(shù)據(jù)序列生成軟件直接讀取該文件提供了便利。
以載人航天器測試細則為例,注入數(shù)據(jù)序列生成軟件的直接輸入是類似于表1的測試程序表格。
表1 載人航天器測試程序表格
表1中,序號列為對應某一行的操作序號,由1開始逐行遞增;時間列為對應某一行操作執(zhí)行時間,通常以秒為單位從0開始計算;程控指令列為對應某一需要執(zhí)行的程控指令代號;遙控指令列為對應某一需要執(zhí)行的遙控指令代號;特殊指令列為對應某一需要執(zhí)行的特殊指令代號;手控指令列為對應某一需要執(zhí)行的手控指令代號;指令名稱為對應指令的名稱;事件說明為通常用于說明測試用例模擬的航天器飛行事件,包括航天器自主處置和地面測試系統(tǒng)輔助處置的事件;指令屏蔽為根據(jù)測試用例安排,為保證航天器測試安全,在測試執(zhí)行過程中禁止執(zhí)行的某些特殊指令。
注入數(shù)據(jù)序列生成軟件的輸入就是表1所示的完整測試程序模塊,該程序模塊作為Excel文件保存在計算機硬盤中。
2.2.2 數(shù)據(jù)庫接口
注入數(shù)據(jù)序列生成軟件采用開放數(shù)據(jù)庫連接(Open Data Base Connectivity,ODBC)接口作為軟件與輸入文件的交互接口。
ODBC是微軟視窗開放系統(tǒng)架構(gòu)(Windows Open System Architecture,WOSA)的重要組成部分,它提供了一種應用程序與異構(gòu)數(shù)據(jù)庫間的共享訪問機制,實際上是一組運行在Windows操作系統(tǒng)中的應用程序接口(Application Programming Interface, API)函數(shù)[9]。ODBC以其易用性很快成為工程領(lǐng)域的常用數(shù)據(jù)接口標準,其接口的最大特點是應用程序不與數(shù)據(jù)庫管理系統(tǒng)存在直接接口,而是通過被訪問數(shù)據(jù)庫的ODBC驅(qū)動與數(shù)據(jù)庫進行信息交互。因此,可以說ODBC是應用程序與被訪問數(shù)據(jù)庫的“溝通橋梁”。應用程序、ODBC與被訪問數(shù)據(jù)庫的關(guān)系如圖2所示。
圖2 應用程序通過ODBC接口訪問數(shù)據(jù)庫示意
在航天器測試中,Excel表格化形式的測試細則文件可以被視作一個數(shù)據(jù)庫,注入數(shù)據(jù)序列生成軟件作為應用程序,通過ODBC接口訪問細則文件。
使用ODBC訪問Excel文件有兩個優(yōu)點。
(1)訪問速度快,Excel文件作為數(shù)據(jù)庫,可以快速對其進行整體讀取,相較于單元格讀取方式,數(shù)據(jù)讀寫速度快。
(2)使用簡便,只需保證運行計算機上安裝有Microsoft Excel Driver(安裝Excel軟件)即可調(diào)用相關(guān)API函數(shù)。
2.2.3 軟件輸出
注入數(shù)據(jù)序列生成軟件的輸出是如表2所示的注入數(shù)據(jù)序列文件。該文件同樣是一個.xls格式的表格文件。
表2 注入數(shù)據(jù)序列文件表格
值得注意的是,表2注入數(shù)據(jù)序列文件表格的第1~3列是由表1的輸入文件中找到相關(guān)指令信息后直接復制在對應列的單元格中;第4~6列是軟件讀取輸入文件后提取出的特定信息,其中第4列、第5列來自于輸入文件的“事件說明”列。默認情況下,程控指令僅發(fā)送1次;特殊情況下,該列中包含了某一指令是否需要多次發(fā)送,及多次發(fā)送間的時間間隔信息;注入數(shù)據(jù)序列文件表格的第6列來自于輸入文件的“指令名稱”列,該列中存在著若干以“ZDP×××”(ZDP為注入數(shù)據(jù)塊代號,×××為數(shù)據(jù)塊的三位數(shù)字編號)為名稱的記錄。軟件在讀取輸入文件后,將記錄這些注入數(shù)據(jù)的信息,并結(jié)合所有需要發(fā)送的程控指令的數(shù)量,按照平均分配的原則,將所有指令分配給不同的注入數(shù)據(jù)。
注入數(shù)據(jù)序列生成軟件在Microsoft Visual Studio 6(VS6)環(huán)境中開發(fā),使用C++語言設計。VS6作為成熟穩(wěn)定的開發(fā)環(huán)境,交互界面簡潔高效,代碼移植性高,對工程應用中開發(fā)各類規(guī)模和需求的軟件都具有很強的適應性。在VS環(huán)境中以ODBC接口訪問Excel表格,可以通過調(diào)用ODBC接口中的CDatabase、CRecordset等類及其成員函數(shù)實現(xiàn)[10-11]。
軟件運行時的檢測結(jié)果表明:對運行注入數(shù)據(jù)序列生成軟件的計算機的最低配置要求為CPU主頻1.66 GHz,內(nèi)存1 GB。軟件運行中CPU占用率僅2%,內(nèi)存占用約2 MB。
注入數(shù)據(jù)序列生成軟件的工作流程如圖3所示。在整體流程上,軟件以順序讀寫為主,在流程中完成輸入文件格式校驗、程控指令數(shù)量分配計算、序列文件輸出等工作。
軟件的工作流程可以描述為如下步驟。
(1)軟件檢索運行計算機上是否安裝有Excel軟件及相關(guān)驅(qū)動。
(2)獲取應用程序所在路徑,并將輸出序列文件路徑設置為與軟件可執(zhí)行程序同一路徑。
(3)文件讀取模塊讀取輸入文件。
軟件讀取文件的關(guān)鍵代碼如下:
//打開數(shù)據(jù)庫Excel文件
database.Open(NULL, false, false, sDsn);
//設置SELECT語句檢索字段
Sql.Format(“SELECT序號,時間,程控指令,指令名稱,事件說明 FROM [%s$] ORDER BY 序號”, m_sheetname_input);
//設置CRecordset類變量
CRecordset recset(&database);
//設置文件讀取參數(shù)
recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);
//通過查詢讀取內(nèi)容是否為空,設置循環(huán)方式順序讀取文件
While (!recset.IsEOF())
{
……
}
圖3 注入數(shù)據(jù)序列生成軟件工作流程Fig.3 Task procedure of injection data sequence generation software
(4)校對模塊對輸入文件格式進行校對。校驗內(nèi)容包括:①對輸入細則文件的時間格式進行校驗,包括去除空格、補充缺失的時間單位等;②按照天、小時、分鐘、秒、毫秒的順序,依次比較前后兩行細則文件中的時間關(guān)系。
假設用d、h、m、s、ms分別標識時間單位天、小時、分鐘、秒、毫秒,則當前行的指令發(fā)送時間t1為
t1=D1dH1hM1mS1sN1ms
(1)
式中:D1、H1、M1、S1、N1分別表示t1時刻相對于數(shù)管分系統(tǒng)軌道零時所經(jīng)過的天、小時、分鐘、秒、毫秒值。
相鄰的后一行的指令發(fā)送時間t2為
t2=D2dH2hM2mS2sN2ms
(2)
式中:D2、H2、M2、S2、N2分別表示t2時刻相對于數(shù)管分系統(tǒng)軌道零時所經(jīng)過的天、小時、分鐘、秒、毫秒值。
軟件進行校對計算后,若判斷t1≥t2,則說明細則中的指令發(fā)送時間存在錯誤,軟件將給出時間出錯行的具體位置的醒目提示,軟件關(guān)閉數(shù)據(jù)庫,中止程序繼續(xù)運行。
(5)文件讀取模塊進行指令分配計算。
軟件在輸入表格文件中查找SELECT語句中包含的列名稱中的信息,在其中查找“程控指令”、“注入文件”關(guān)鍵字,并分別統(tǒng)計數(shù)量。假設輸入文件全部讀取完畢后,程控指令總數(shù)為Ncomd,注入數(shù)據(jù)總數(shù)為Nfile,按照所有程控指令平均分配給注入數(shù)據(jù)的原則,每個注入數(shù)據(jù)中包含的指令數(shù)N為
N=Ncomd/Nfile
(3)
但數(shù)據(jù)N有可能不是整數(shù),即Ncomd無法被Nfile整除。為了保證軟件實現(xiàn)過程中每個注入數(shù)據(jù)塊中包含確定整數(shù)的指令,需要對數(shù)據(jù)N作一變換。
對數(shù)據(jù)N進行取模運算,得到的整數(shù)部分記為Z;假設所有的注入數(shù)據(jù)中,有x個數(shù)據(jù)塊每個包含Z條指令,剩余的y個注入數(shù)據(jù)中,每個數(shù)據(jù)包含Z+1條指令,則可以得到x、y、Z的數(shù)學關(guān)系為
(4)
通過計算該方程組,就可以得到每個注入數(shù)據(jù)被分配的指令數(shù)量。計算完成后,程序關(guān)閉數(shù)據(jù)庫。
(6)序列輸出模塊輸出注入數(shù)據(jù)序列文件。
序列輸出模塊按照表2結(jié)構(gòu)將讀取的信息分別加入到輸出表格中,其中“序號”、“段時間”、“指令代號”三列,根據(jù)讀取的輸入信息直接填寫至輸出表格中;“發(fā)送次數(shù)”、“發(fā)送間隔”兩列,根據(jù)讀取模塊在輸入文件“事件說明”列中,查找“發(fā)送n次”、“間隔n秒”等信息,填入具體數(shù)值;“備注”列按照步驟(5)中的計算結(jié)果,在第1、第Z+1、第2Z+1…行及第Ncomd-x·Z+1、第Ncomd-x·Z+1+Z+1、第Ncomd-x·Z+1+2·(Z+1)行寫入“寫入數(shù)管注入文件A分別對應B~C行數(shù)管指令”,用于提示對應序號的注入數(shù)據(jù)中包含哪些行的指令。
創(chuàng)建輸出序列表格文件的關(guān)鍵代碼如下:
//創(chuàng)建進行存取的字符串
sSqlWrite.Format("DRIVER={%s};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB="%s";DBQ=%s",sDriver, sExcelFile, sExcelFile);
//創(chuàng)建數(shù)據(jù)庫 (Excel表格文件)
if( databaseWrite.OpenEx(sSqlWrite,CDatabase::noOdbcDialog) )
{
//通過SQL語句創(chuàng)建表結(jié)構(gòu)(與表2一致)
sSqlWrite = "CREATE TABLE Comd (序號 TEXT,段時間 TEXT,指令代號 TEXT,發(fā)送次數(shù) TEXT, 時間間隔 TEXT, 備注 TEXT, 注入時間校驗 TEXT)";
databaseWrite.ExecuteSQL(sSqlWrite);
}
(7)注入數(shù)據(jù)序列文件生成完成后,文件讀取模塊讀取生成文件,并由校對模塊進行注入數(shù)據(jù)時間與指令時間之間的相對時序校對。
若整個序列文件中所有程控指令的預定執(zhí)行時刻均早于所在注入數(shù)據(jù)的發(fā)送時刻,則相對時序正確,軟件輸出正確的注入數(shù)據(jù)序列文件。
假設某一程控指令C001需要在tx時刻發(fā)送出,注入數(shù)據(jù)序列生成軟件將該指令自動分配給注入數(shù)據(jù)ZDP001,按照測試細則的規(guī)定,該注入數(shù)據(jù)的發(fā)送時刻為ty,且ty>tx,則校對模塊判斷序列文件中存在相對時序錯誤。在此情況下,將由序列輸出模塊在輸出的序列文件中添加“注入時間校驗列”,并在對應的注入數(shù)據(jù)行提示用戶出現(xiàn)相對時序錯誤。
航天器注入數(shù)據(jù)序列生成軟件的用戶界面如圖4所示。用戶在使用前需要進行3項操作。
(1)選擇作為輸入文件的測試細則表格的絕對路徑,該路徑同樣將是軟件輸出的注入數(shù)據(jù)序列文件的存放路徑。
(2)輸入選擇的細則表格文件中的具體表單名稱,按照Excel新建文件的默認表單名稱,軟件啟動時自動填入Sheet1作為表單名稱,用戶可根據(jù)需要修改該名稱。
(3)鍵入軟件最終生成的序列文件的名稱,以便在文件生成后查找和使用。
在軟件界面的下方,提示使用本軟件的一些準備事項,主要包括對輸入文件后綴名稱、輸入文件起始行的單元格名稱及單元格內(nèi)多余字符的約束。這些約束是為了統(tǒng)一輸入文件的格式,避免軟件在檢索關(guān)鍵字的過程中出現(xiàn)檢索錯誤。
圖4 注入數(shù)據(jù)序列生成軟件用戶界面
以某載人航天器的某項模飛測試為例,選擇輸入文件路徑后,點擊軟件界面“開始”按鈕,程序開始運行。若細則文件無指令時間錯誤,軟件運行僅約1 s后,軟件即提示“指令表格文件生成完畢”,生成的注入數(shù)據(jù)序列文件如圖5所示。
若輸入的細則文件存在指令時間錯誤,軟件將提示圖6所示信息;若軟件生成的序列文件中存在指令與注入數(shù)據(jù)間相對時序錯誤,則序列文件生成完畢后,軟件將提示“有注入文件分配不合理,需調(diào)整”。打開序列文件可以看到在“注入時間校驗”列存在以“★★★”為提示符的信息,如圖7所示,表示該行對應的注入數(shù)據(jù)的注入時間在當前指令分配情況下,存在指令與注入數(shù)據(jù)相對時序錯誤問題,需要用戶修改。值得一提的是,序列文件中出現(xiàn)程控指令與注入數(shù)據(jù)的相對時序錯誤,是由于編寫測試細則文件時注入數(shù)據(jù)分布不合理引起的。修改細則文件可從源頭上杜絕該類問題出現(xiàn)。
圖5 軟件輸出的注入數(shù)據(jù)序列文件Fig.5 Injection data sequence file generated by software
圖6 軟件提示:細則文件存在指令時間錯誤Fig.6 Software information: command time error in the test manual
圖7 軟件提示:指令與注入數(shù)據(jù)存在相對時序錯誤Fig.7 Software information: relative schedule error between command and injection data
在航天器綜合測試中使用注入數(shù)據(jù)序列生成軟件,可大幅提高注入數(shù)據(jù)序列文件的生成速度,提高測試效率。以某載人航天器的某個模飛測試項目為例,以傳統(tǒng)方法人工對照細則手動提取序列文件,測試人員將面對平均規(guī)模為1500行×9列的測試細則文件,人工檢索、校對并完成一個模飛測試的序列文件平均需要1.5 h,按照一個載人航天器型號安排平均8~10個模飛測試項目計算,需要12~15個小時才能完成全部模飛測試的序列文件準備工作,對于測試規(guī)模更加龐大的諸如全任務模飛測試、大系統(tǒng)間匹配模飛測試等項目,文件規(guī)模將成倍增長;隨著航天器測試的不斷進行,可能還會出現(xiàn)測試方案更改、細則文件變化的情況,重新修訂注入數(shù)據(jù)序列文件也將花費測試人員的大量精力。
使用航天器注入數(shù)據(jù)序列生成軟件后,在不需要對生成序列文件進行修改的情況下,將測試細則文件格式修訂時間計算在內(nèi),單次序列文件的生成時間不超過2 min;即使出現(xiàn)需要修訂指令與注入數(shù)據(jù)相對時序錯誤的情況,單次序列文件的生成時間也不會超過5 min。相比傳統(tǒng)方法,文件生成效率可提高95%。對于表格行數(shù)在8000~1 0000行的大型模飛測試,該軟件的自動化、快速化優(yōu)勢將更加明顯。
本文針對航天器綜合測試過程中,測試注入數(shù)據(jù)序列生成效率低、易出錯等問題,提出了一種航天器注入數(shù)據(jù)序列自動生成方法。該方法以航天器自動化測試程序的實施為依托,在不改變自動化測試表格化測試細則文件結(jié)構(gòu)的基礎(chǔ)上,設計了航天器注入數(shù)據(jù)序列生成軟件,以ODBC接口為橋梁,實現(xiàn)了在商用計算機上快速自動化生成航天器測試注入數(shù)據(jù)序列文件,相比于傳統(tǒng)人工方法,文件生成效率提高95%。本文討論的注入數(shù)據(jù)序列文件自動化生成方法可以在以下兩方面進行后續(xù)探索:①提高注入數(shù)據(jù)序列生成序列生成軟件的智能化水平,使軟件可以自動修正生成序列文件中的相對時序錯誤;②結(jié)合其它測試軟件的功能,統(tǒng)一航天器綜合測試過程中的程控指令生成、注入數(shù)據(jù)生成、序列文件生成過程,將以上功能進行有機結(jié)合,建立“‘測試細則’輸入、‘注入數(shù)據(jù)(程控指令)序列’輸出”的“一鍵式”系統(tǒng),進一步提升航天器綜合測試準備效率和自動化水平。