李麗萍 孟小豐 劉立輝
北京航天自動控制研究所,北京100854
隨著航天技術的不斷發展,軟件的應用范圍越來越廣,其中一類非常重要的軟件——時序控制軟件,其主要功能是按照一定的時間邏輯序列,完成飛行任務過程中實時控制指令的接收與發送。此類軟件的特征是:在基線狀態建立后,后續的每次任務中僅需要對軟件中的數據進行局部修改,程序的框架和具體功能不變化。
在航天軟件研制過程中,傳統的采用手動編寫軟件代碼的研制模式逐漸顯露出各種弊端,其基于人工手動進行軟件更改的方式越來越難以適應現代高速發展的控制系統時序軟件的復雜性,存在效率低下與錯誤率高等許多缺點。軟件生成的方法與手段的落后,在一定程度上浪費人力資源,影響設計質量,因此進行時序類軟件自動生成技術和方法研究是非常有意義的。
時序軟件代碼自動生成的計算機輔助系統是實現從原始的任務輸入文件(一般為WORD 文件)到目標代碼文件的自動生成集成環境,它的主要優點在于以圖形界面的方式向用戶提供了可視化的軟件自動生成工作環境,實現任務語言到軟件代碼的智能轉換,具有效率高、質量可靠、通用性強及人機界面友好的特點。該系統使軟件的生成工作變的直觀、簡單,并且該系統還兼顧了對測試結果進行判斷的功能,進一步確保軟件的可靠性。
時序控制軟件主要功能是實現時序的發送功能,主要是以順序執行的方式進行,即到一定時間發送一個時串以控制箭體完成某種動作,時序時串的時間值來源于系統任務書中的時序時串表。其程序的主體適用瀑布式通用程序框架,主要是任務要求的時序時串數值、數量及組合發生變化,并且這些時序的發送功能相似,不同之處也有規律可循,因此可實現自動生成的方式完成時序時串代碼的生成工作和測試數據輔助判讀工作。時序控制軟件的自動生成應實現從軟件任務書(Word 文檔)到最終軟件代碼的自動識別、自動轉換、自動生成、單元測試輔助判讀,因此應具有以下功能:
1)自動識別:讀取系統提供的任務書中的有效數據,如時序時串表格,進行逐行掃描,獲取包括火箭級數、待轉換的時串名稱等有效信息(同時兼容Office 多個版本),進行規格化檢查后得到規格化的原始數據;
2)自動轉換:原始數據完成規格化處理后,按照代碼轉換規則(時串外部地址規則文件和地址內存規則文件),轉換成帶有注釋的中間代碼,并且自動轉換可適應不同數據規格和數據量的變化;
3)自動生成:選擇所需生成的時串級別,將中間代碼插入指定的源代碼模版文件后自動生成程序源代碼,編譯連接按鈕一鍵生成最終的代碼執行程序;
4)單元測試輔助判讀:生成與單元測試結果格式一致的結果文件,與人工測試的單元測試結果進行比對,可設置判讀門限,將不一致的地方標出,以供測試人員進行使用。
該系統應具有原始數據自動識別功能、中間數據的自動轉換功能、軟件代碼的自動生成及測試結果的自動判讀功能。基于這些功能,本系統可設計為3 層:表示層、業務層和I/O 層。其中I/O 層是軟件的最底層,負責文檔的讀取和代碼存盤;業務層為中間層,負責代碼轉換規則的管理以及具體的代碼生成工作;表示層為最上層,為軟件與用戶的接口,主要包括圖形界面元素。表示層、業務層和I/O 層3 級層次間的總體框架設計,可實現底層的原始數據讀取及格式轉換,業務層的規則提取、數據分析及代碼的自動生成。最后通過表示層提交輔助自動生成的結果,圖1 為軟件的總體框架設計圖。

圖1 軟件的總體框架設計圖
I/O 層是軟件的最底層,包括3個功能模塊,分別是TXT 文件存儲模塊,TXT 文件讀取模塊和WORD 表格讀取模塊,這3個功能模塊相互獨立,完成文檔處理功能。
1)Word 文檔讀取
主要負責讀取Microsoft Word 程序文檔,以及將轉換好的代碼保存到磁盤。該層是針對Microsoft Office 的VBA 編程接口的抽象層,對VBA 接口進行了封裝,同時封裝了Windows 操作系統下的文件操作接口。該技術應同時兼容Office 多個版本,本軟件使用2個類進行Word 文檔讀取,其中一個類負責WORD 文檔操作部分,主要包括WORD 文檔的打開、關閉,選取表格,控制文檔的顯示等功能;另一個類負責WORD 表格操作部分,主要包括WORD表格內容的讀取,獲取表格的行列總數等功能。
2)文本讀取與保存
程序中針對文本操作的輸入輸出模塊用于訪問代碼生成中使用的指令模板。本軟件的指令模板直接以文本方式存放在軟件文件夾中。文本操作模塊同時具備索引功能,可以在代碼文件中找到指定的標志文本位置,并將代碼插入指定位置中。
業務層是軟件的中間層,也是核心層。其主要完成讀取時串名稱與外部地址和內存映射等規則,分析時序時串表,并得到級別數量等信息,根據規則生成匯編程序代碼等工作。代碼生成器參考代碼模板,并將最終生成代碼交由I/O 層的文本保存模塊保存到磁盤。
1)規則管理器
用于管理代碼生成過程所需的各個時串外部地址和內存地址,以及代碼的模板。負責讀取規則表格和代碼模板并記錄在內存中,同時還具有規則一致性檢查功能,可以檢查2個規則文件中是否有不一致的內容。本軟件在用戶選擇規則文件后執行規則的初始化工作,并使用2個類分別管理外部地址規則和內存規則。
2)文檔分析器
用于對待轉換的時序時串表格進行預處理,掃描表格中的所有行列,記錄有效的時串步序號,為代碼生成工作做準備。
3)數據綜合
為代碼生成器的數據提供模塊,該模塊從規則管理器中找到符合規則的模板內容和地址信息,將其提供給代碼生成器,數據綜合管理了所有的規則、代碼模板以及相應的緩存和狀態信息。
4)代碼生成器
為核心模塊之一,其功能為將數據綜合模塊提供的代碼模板組合起來,然后使用相應的規則信息對模板中的關鍵字段進行替換,從而生成相應的程序代碼。使用關鍵字替換功能,將需要動態指定的內容定義為關鍵字,然后從數據綜合模塊獲得關鍵字的指定信息,然后進行文本替換,使用多個代碼模板聯合生成最終代碼。
5)測試結果分析
測試結果分析模塊將測試工具的輸出文本信息與規則管理器中的相應規則進行對比,標識出不符合規則的內容。由于測試結果分析同樣需要使用時串規則等內容,因此主要功能實現在數據綜合模塊中。具體實現和接口參考數據綜合模塊。
6)代碼檢查
代碼檢查模塊可以對已生成的代碼進行一定的合法性檢查,其中包括代碼的標號唯一性檢查和代碼的長度檢查。為方便日后擴展功能,代碼檢查功能放置在一個單獨的模塊文件中。
表示層主要包含用戶的圖形界面模塊,用戶可以通過表示層與本軟件進行交互。本軟件使用基于Microsoft Office 的圖形界面,在界面中分別有相應的控制按鈕響應用戶指令。同時,用戶界面有防止誤操作的功能,用戶無法進行非法的指令輸入。
本軟件具有代碼的基本編輯功能,其中包括代碼的可視化編輯,代碼查找、打印、剪切、復制和粘貼及代碼定位等功能。為方便將生成代碼插入到文件的指定位置,本模塊還有一鍵生成插入標志的功能,如圖2 所示。

圖2 代碼編輯與顯示示意圖
使用Xtreme ToolkitPro 提供的第三方控件實現。其中包括CXTPSyntaxEditView 代碼編輯視圖、CXTPTabClientWnd 框架視圖、CXTPDockingPaneManager 停靠管理器和CXTPCommandBars 工具欄等。
1)規則管理
規則管理界面主要用于加載和檢查時串外部地址規則和內存規則。成功加載后,規則信息會在規則管理窗口中顯示。對于規則檢查,如果工具發現當前規則與已讀入規則有不一致的地方,會以提示框的形式顯示,如圖3 所示。該部分使用了停靠欄加列表框控件的結構。

圖3 規則管理界面示意圖
2)代碼生成
代碼生成的用戶界面主要由幾個生成控制按鈕組成,其中包括時序時串文件的加載和時序的選擇等,如圖4 所示。該功能通過響應工具欄上的指定命令按鈕實現。同時,對于需要配置信息的指令,程序還會從指定配置欄中讀取相應信息。
3)測試結果分析
測試結果可以在用戶界面上以類似加載程序文件的方式顯示。在讀入結果文件后,會將其數據與工具中已加載的規則進行對比分析,將不一致的內容以特殊符號“* ”標識出來,如圖5 所示,該部分的界面實現與代碼生成類似,同樣使用工具欄響應函數。

圖4 代碼生成界面示意圖

圖5 測試結果分析界面示意圖
時序軟件代碼自動生成工具的使用過程設計為以下步驟:
1)代碼生成
在代碼生成之前,需要由用戶選擇包含轉換規則的Word 文檔文件,其中包括時串外部地址規則文件和地址內存規則文件。工具讀取規則后,會將讀取的規則數量顯示在界面中,供用戶確認。
確定轉換規則后,用戶可以選擇待轉換的時序時串表格文件。點擊“時序時串”命令,程序會將含有該文件的Word 程序窗口彈出,提示用戶選擇需要轉換的表格。用戶可以選擇指定表格或將光標置于待轉換表格中,然后點擊用戶界面上的讀取時序信息按鈕,軟件對該文件進行分析,讀取表格信息,包括級別個數、待轉換的時串名稱等,并將分析的結果信息呈現在用戶界面中。
成功分析時序時串表格后,用戶就可以在界面上選擇所需生成的時串級別,并指定代碼文件。在生成代碼前,可以使用代碼編輯的“標記”功能插入指定標記,自動生成的代碼將填入標記所指定的位置。用戶點擊“生成代碼”按鈕后,程序將生成最終的代碼文件,在找到指定插入標記的情況下,代碼會被插入到指定位置,否則代碼會覆蓋整個文件。
2)代碼檢查
在完成代碼生成或加載后,即可使用代碼檢查功能。當前本工具支持“標志檢查”和“長度檢查”功能。在點擊相應功能按鈕后,程序將逐行分析當前代碼行,并執行相應檢查。
3)代碼編譯
使用批處理文件執行代碼編譯工作,批處理內容如圖6 所示。其中“%1”參數為當前已生成或已加載的代碼文件名稱,“%2”參數為工具生成的臨時文件,該文件作為“hexobj”指令的輸入,提供指令的輸入參數。

圖6 編譯批處理文件內容
4)規則和時序時串表格正確性檢查
本軟件可分別針對地址規則表格、內存規則表格和時序時串表格進行正確性檢查。
針對地址規則表格和內存規則表格,主要檢查內容為規則數量是否一致,每個時串對應的外部地址是否一致,外部地址與內存地址的映射規則是否一致。
針對時序時串表格,本工具首先分析表格格式是否合法。如果合法,則在此基礎上分析時序時串的數量以及對應級別、各項時間值是否一致等。
對于以上檢查不一致的情況,系統將提示錯誤并將詳細信息保存在日志文件中。
5)測試結果分析
測試結果分析同樣需要加載規則參數以及時序時串表格,其加載過程與代碼生成相同。成功分析時序時串表格后,用戶可以在界面上選擇所需讀取的測試結果類型,其中包括“定時測試”和“允許測試”。“定時測試”直接使用測試結果文件中的時間值進行分析,“允許測試”則將結果文件中的時間值加上“補償時間”值進行分析。分析工程將以已加載的時序時串表格為基礎,對測試結果文件進行逐行分析,當無法找到指定結果行時,分析過程將停止并提示錯誤。對于測試結果中的每一行,將在該行結尾處添加規則指定的時間或地址值,并將不匹配的值用特殊符號標識。
目前,軟件代碼自動生成技術正在逐漸走向實用。本文針對控制系統時序控制軟件手工生成的現狀,提出了一種高效率、高可靠性的自動生成方案,并設計完成了基于數據自動生成的計算機輔助生成系統,改進了運載器控制系統時序控制軟件生成的薄弱環節,使得時序控制軟件生成的效率大大提高,節省了勞動力成本,可以有效地實現控制系統時序控制軟件研制過程中的可靠性增長。
[1]Thomas H Cormen,Charles E Leiserson,et al. 潘金貴,顧鐵成,等,譯. 算法導論[M]. 機械工業出版社,2006,9.
[2]David Simon,周瑜萍. et al. Visual C ++6 編程寶典[M].電子工業出版社,2006,5.
[3]Deke McClelland,Laurie UlrichFuller. 邱燕明,周瑜萍,等,譯. Photoshop CS2 寶典[M]. 電子工業出版社,2006,3.
[4]求是科技,編著. Visual C ++6.0 數據庫開發技術與工程實踐[M].人民郵電出版社,2004,1.