李麗萍 孟小豐 劉立輝
北京航天自動控制研究所,北京100854
隨著航天技術(shù)的不斷發(fā)展,軟件的應(yīng)用范圍越來越廣,其中一類非常重要的軟件——時序控制軟件,其主要功能是按照一定的時間邏輯序列,完成飛行任務(wù)過程中實時控制指令的接收與發(fā)送。此類軟件的特征是:在基線狀態(tài)建立后,后續(xù)的每次任務(wù)中僅需要對軟件中的數(shù)據(jù)進行局部修改,程序的框架和具體功能不變化。
在航天軟件研制過程中,傳統(tǒng)的采用手動編寫軟件代碼的研制模式逐漸顯露出各種弊端,其基于人工手動進行軟件更改的方式越來越難以適應(yīng)現(xiàn)代高速發(fā)展的控制系統(tǒng)時序軟件的復(fù)雜性,存在效率低下與錯誤率高等許多缺點。軟件生成的方法與手段的落后,在一定程度上浪費人力資源,影響設(shè)計質(zhì)量,因此進行時序類軟件自動生成技術(shù)和方法研究是非常有意義的。
時序軟件代碼自動生成的計算機輔助系統(tǒng)是實現(xiàn)從原始的任務(wù)輸入文件(一般為WORD 文件)到目標代碼文件的自動生成集成環(huán)境,它的主要優(yōu)點在于以圖形界面的方式向用戶提供了可視化的軟件自動生成工作環(huán)境,實現(xiàn)任務(wù)語言到軟件代碼的智能轉(zhuǎn)換,具有效率高、質(zhì)量可靠、通用性強及人機界面友好的特點。該系統(tǒng)使軟件的生成工作變的直觀、簡單,并且該系統(tǒng)還兼顧了對測試結(jié)果進行判斷的功能,進一步確保軟件的可靠性。
時序控制軟件主要功能是實現(xiàn)時序的發(fā)送功能,主要是以順序執(zhí)行的方式進行,即到一定時間發(fā)送一個時串以控制箭體完成某種動作,時序時串的時間值來源于系統(tǒng)任務(wù)書中的時序時串表。其程序的主體適用瀑布式通用程序框架,主要是任務(wù)要求的時序時串數(shù)值、數(shù)量及組合發(fā)生變化,并且這些時序的發(fā)送功能相似,不同之處也有規(guī)律可循,因此可實現(xiàn)自動生成的方式完成時序時串代碼的生成工作和測試數(shù)據(jù)輔助判讀工作。時序控制軟件的自動生成應(yīng)實現(xiàn)從軟件任務(wù)書(Word 文檔)到最終軟件代碼的自動識別、自動轉(zhuǎn)換、自動生成、單元測試輔助判讀,因此應(yīng)具有以下功能:
1)自動識別:讀取系統(tǒng)提供的任務(wù)書中的有效數(shù)據(jù),如時序時串表格,進行逐行掃描,獲取包括火箭級數(shù)、待轉(zhuǎn)換的時串名稱等有效信息(同時兼容Office 多個版本),進行規(guī)格化檢查后得到規(guī)格化的原始數(shù)據(jù);
2)自動轉(zhuǎn)換:原始數(shù)據(jù)完成規(guī)格化處理后,按照代碼轉(zhuǎn)換規(guī)則(時串外部地址規(guī)則文件和地址內(nèi)存規(guī)則文件),轉(zhuǎn)換成帶有注釋的中間代碼,并且自動轉(zhuǎn)換可適應(yīng)不同數(shù)據(jù)規(guī)格和數(shù)據(jù)量的變化;
3)自動生成:選擇所需生成的時串級別,將中間代碼插入指定的源代碼模版文件后自動生成程序源代碼,編譯連接按鈕一鍵生成最終的代碼執(zhí)行程序;
4)單元測試輔助判讀:生成與單元測試結(jié)果格式一致的結(jié)果文件,與人工測試的單元測試結(jié)果進行比對,可設(shè)置判讀門限,將不一致的地方標出,以供測試人員進行使用。
該系統(tǒng)應(yīng)具有原始數(shù)據(jù)自動識別功能、中間數(shù)據(jù)的自動轉(zhuǎn)換功能、軟件代碼的自動生成及測試結(jié)果的自動判讀功能?;谶@些功能,本系統(tǒng)可設(shè)計為3 層:表示層、業(yè)務(wù)層和I/O 層。其中I/O 層是軟件的最底層,負責(zé)文檔的讀取和代碼存盤;業(yè)務(wù)層為中間層,負責(zé)代碼轉(zhuǎn)換規(guī)則的管理以及具體的代碼生成工作;表示層為最上層,為軟件與用戶的接口,主要包括圖形界面元素。表示層、業(yè)務(wù)層和I/O 層3 級層次間的總體框架設(shè)計,可實現(xiàn)底層的原始數(shù)據(jù)讀取及格式轉(zhuǎn)換,業(yè)務(wù)層的規(guī)則提取、數(shù)據(jù)分析及代碼的自動生成。最后通過表示層提交輔助自動生成的結(jié)果,圖1 為軟件的總體框架設(shè)計圖。
圖1 軟件的總體框架設(shè)計圖
I/O 層是軟件的最底層,包括3個功能模塊,分別是TXT 文件存儲模塊,TXT 文件讀取模塊和WORD 表格讀取模塊,這3個功能模塊相互獨立,完成文檔處理功能。
1)Word 文檔讀取
主要負責(zé)讀取Microsoft Word 程序文檔,以及將轉(zhuǎn)換好的代碼保存到磁盤。該層是針對Microsoft Office 的VBA 編程接口的抽象層,對VBA 接口進行了封裝,同時封裝了Windows 操作系統(tǒng)下的文件操作接口。該技術(shù)應(yīng)同時兼容Office 多個版本,本軟件使用2個類進行Word 文檔讀取,其中一個類負責(zé)WORD 文檔操作部分,主要包括WORD 文檔的打開、關(guān)閉,選取表格,控制文檔的顯示等功能;另一個類負責(zé)WORD 表格操作部分,主要包括WORD表格內(nèi)容的讀取,獲取表格的行列總數(shù)等功能。
2)文本讀取與保存
程序中針對文本操作的輸入輸出模塊用于訪問代碼生成中使用的指令模板。本軟件的指令模板直接以文本方式存放在軟件文件夾中。文本操作模塊同時具備索引功能,可以在代碼文件中找到指定的標志文本位置,并將代碼插入指定位置中。
業(yè)務(wù)層是軟件的中間層,也是核心層。其主要完成讀取時串名稱與外部地址和內(nèi)存映射等規(guī)則,分析時序時串表,并得到級別數(shù)量等信息,根據(jù)規(guī)則生成匯編程序代碼等工作。代碼生成器參考代碼模板,并將最終生成代碼交由I/O 層的文本保存模塊保存到磁盤。
1)規(guī)則管理器
用于管理代碼生成過程所需的各個時串外部地址和內(nèi)存地址,以及代碼的模板。負責(zé)讀取規(guī)則表格和代碼模板并記錄在內(nèi)存中,同時還具有規(guī)則一致性檢查功能,可以檢查2個規(guī)則文件中是否有不一致的內(nèi)容。本軟件在用戶選擇規(guī)則文件后執(zhí)行規(guī)則的初始化工作,并使用2個類分別管理外部地址規(guī)則和內(nèi)存規(guī)則。
2)文檔分析器
用于對待轉(zhuǎn)換的時序時串表格進行預(yù)處理,掃描表格中的所有行列,記錄有效的時串步序號,為代碼生成工作做準備。
3)數(shù)據(jù)綜合
為代碼生成器的數(shù)據(jù)提供模塊,該模塊從規(guī)則管理器中找到符合規(guī)則的模板內(nèi)容和地址信息,將其提供給代碼生成器,數(shù)據(jù)綜合管理了所有的規(guī)則、代碼模板以及相應(yīng)的緩存和狀態(tài)信息。
4)代碼生成器
為核心模塊之一,其功能為將數(shù)據(jù)綜合模塊提供的代碼模板組合起來,然后使用相應(yīng)的規(guī)則信息對模板中的關(guān)鍵字段進行替換,從而生成相應(yīng)的程序代碼。使用關(guān)鍵字替換功能,將需要動態(tài)指定的內(nèi)容定義為關(guān)鍵字,然后從數(shù)據(jù)綜合模塊獲得關(guān)鍵字的指定信息,然后進行文本替換,使用多個代碼模板聯(lián)合生成最終代碼。
5)測試結(jié)果分析
測試結(jié)果分析模塊將測試工具的輸出文本信息與規(guī)則管理器中的相應(yīng)規(guī)則進行對比,標識出不符合規(guī)則的內(nèi)容。由于測試結(jié)果分析同樣需要使用時串規(guī)則等內(nèi)容,因此主要功能實現(xiàn)在數(shù)據(jù)綜合模塊中。具體實現(xiàn)和接口參考數(shù)據(jù)綜合模塊。
6)代碼檢查
代碼檢查模塊可以對已生成的代碼進行一定的合法性檢查,其中包括代碼的標號唯一性檢查和代碼的長度檢查。為方便日后擴展功能,代碼檢查功能放置在一個單獨的模塊文件中。
表示層主要包含用戶的圖形界面模塊,用戶可以通過表示層與本軟件進行交互。本軟件使用基于Microsoft Office 的圖形界面,在界面中分別有相應(yīng)的控制按鈕響應(yīng)用戶指令。同時,用戶界面有防止誤操作的功能,用戶無法進行非法的指令輸入。
本軟件具有代碼的基本編輯功能,其中包括代碼的可視化編輯,代碼查找、打印、剪切、復(fù)制和粘貼及代碼定位等功能。為方便將生成代碼插入到文件的指定位置,本模塊還有一鍵生成插入標志的功能,如圖2 所示。
圖2 代碼編輯與顯示示意圖
使用Xtreme ToolkitPro 提供的第三方控件實現(xiàn)。其中包括CXTPSyntaxEditView 代碼編輯視圖、CXTPTabClientWnd 框架視圖、CXTPDockingPaneManager ??抗芾砥骱虲XTPCommandBars 工具欄等。
1)規(guī)則管理
規(guī)則管理界面主要用于加載和檢查時串外部地址規(guī)則和內(nèi)存規(guī)則。成功加載后,規(guī)則信息會在規(guī)則管理窗口中顯示。對于規(guī)則檢查,如果工具發(fā)現(xiàn)當前規(guī)則與已讀入規(guī)則有不一致的地方,會以提示框的形式顯示,如圖3 所示。該部分使用了??繖诩恿斜砜蚩丶慕Y(jié)構(gòu)。
圖3 規(guī)則管理界面示意圖
2)代碼生成
代碼生成的用戶界面主要由幾個生成控制按鈕組成,其中包括時序時串文件的加載和時序的選擇等,如圖4 所示。該功能通過響應(yīng)工具欄上的指定命令按鈕實現(xiàn)。同時,對于需要配置信息的指令,程序還會從指定配置欄中讀取相應(yīng)信息。
3)測試結(jié)果分析
測試結(jié)果可以在用戶界面上以類似加載程序文件的方式顯示。在讀入結(jié)果文件后,會將其數(shù)據(jù)與工具中已加載的規(guī)則進行對比分析,將不一致的內(nèi)容以特殊符號“* ”標識出來,如圖5 所示,該部分的界面實現(xiàn)與代碼生成類似,同樣使用工具欄響應(yīng)函數(shù)。
圖4 代碼生成界面示意圖
圖5 測試結(jié)果分析界面示意圖
時序軟件代碼自動生成工具的使用過程設(shè)計為以下步驟:
1)代碼生成
在代碼生成之前,需要由用戶選擇包含轉(zhuǎn)換規(guī)則的Word 文檔文件,其中包括時串外部地址規(guī)則文件和地址內(nèi)存規(guī)則文件。工具讀取規(guī)則后,會將讀取的規(guī)則數(shù)量顯示在界面中,供用戶確認。
確定轉(zhuǎn)換規(guī)則后,用戶可以選擇待轉(zhuǎn)換的時序時串表格文件。點擊“時序時串”命令,程序會將含有該文件的Word 程序窗口彈出,提示用戶選擇需要轉(zhuǎn)換的表格。用戶可以選擇指定表格或?qū)⒐鈽酥糜诖D(zhuǎn)換表格中,然后點擊用戶界面上的讀取時序信息按鈕,軟件對該文件進行分析,讀取表格信息,包括級別個數(shù)、待轉(zhuǎn)換的時串名稱等,并將分析的結(jié)果信息呈現(xiàn)在用戶界面中。
成功分析時序時串表格后,用戶就可以在界面上選擇所需生成的時串級別,并指定代碼文件。在生成代碼前,可以使用代碼編輯的“標記”功能插入指定標記,自動生成的代碼將填入標記所指定的位置。用戶點擊“生成代碼”按鈕后,程序?qū)⑸勺罱K的代碼文件,在找到指定插入標記的情況下,代碼會被插入到指定位置,否則代碼會覆蓋整個文件。
2)代碼檢查
在完成代碼生成或加載后,即可使用代碼檢查功能。當前本工具支持“標志檢查”和“長度檢查”功能。在點擊相應(yīng)功能按鈕后,程序?qū)⒅鹦蟹治霎斍按a行,并執(zhí)行相應(yīng)檢查。
3)代碼編譯
使用批處理文件執(zhí)行代碼編譯工作,批處理內(nèi)容如圖6 所示。其中“%1”參數(shù)為當前已生成或已加載的代碼文件名稱,“%2”參數(shù)為工具生成的臨時文件,該文件作為“hexobj”指令的輸入,提供指令的輸入?yún)?shù)。
圖6 編譯批處理文件內(nèi)容
4)規(guī)則和時序時串表格正確性檢查
本軟件可分別針對地址規(guī)則表格、內(nèi)存規(guī)則表格和時序時串表格進行正確性檢查。
針對地址規(guī)則表格和內(nèi)存規(guī)則表格,主要檢查內(nèi)容為規(guī)則數(shù)量是否一致,每個時串對應(yīng)的外部地址是否一致,外部地址與內(nèi)存地址的映射規(guī)則是否一致。
針對時序時串表格,本工具首先分析表格格式是否合法。如果合法,則在此基礎(chǔ)上分析時序時串的數(shù)量以及對應(yīng)級別、各項時間值是否一致等。
對于以上檢查不一致的情況,系統(tǒng)將提示錯誤并將詳細信息保存在日志文件中。
5)測試結(jié)果分析
測試結(jié)果分析同樣需要加載規(guī)則參數(shù)以及時序時串表格,其加載過程與代碼生成相同。成功分析時序時串表格后,用戶可以在界面上選擇所需讀取的測試結(jié)果類型,其中包括“定時測試”和“允許測試”。“定時測試”直接使用測試結(jié)果文件中的時間值進行分析,“允許測試”則將結(jié)果文件中的時間值加上“補償時間”值進行分析。分析工程將以已加載的時序時串表格為基礎(chǔ),對測試結(jié)果文件進行逐行分析,當無法找到指定結(jié)果行時,分析過程將停止并提示錯誤。對于測試結(jié)果中的每一行,將在該行結(jié)尾處添加規(guī)則指定的時間或地址值,并將不匹配的值用特殊符號標識。
目前,軟件代碼自動生成技術(shù)正在逐漸走向?qū)嵱?。本文針對控制系統(tǒng)時序控制軟件手工生成的現(xiàn)狀,提出了一種高效率、高可靠性的自動生成方案,并設(shè)計完成了基于數(shù)據(jù)自動生成的計算機輔助生成系統(tǒng),改進了運載器控制系統(tǒng)時序控制軟件生成的薄弱環(huán)節(jié),使得時序控制軟件生成的效率大大提高,節(jié)省了勞動力成本,可以有效地實現(xiàn)控制系統(tǒng)時序控制軟件研制過程中的可靠性增長。
[1]Thomas H Cormen,Charles E Leiserson,et al. 潘金貴,顧鐵成,等,譯. 算法導(dǎo)論[M]. 機械工業(yè)出版社,2006,9.
[2]David Simon,周瑜萍. et al. Visual C ++6 編程寶典[M].電子工業(yè)出版社,2006,5.
[3]Deke McClelland,Laurie UlrichFuller. 邱燕明,周瑜萍,等,譯. Photoshop CS2 寶典[M]. 電子工業(yè)出版社,2006,3.
[4]求是科技,編著. Visual C ++6.0 數(shù)據(jù)庫開發(fā)技術(shù)與工程實踐[M].人民郵電出版社,2004,1.