張 銀,索旭華,郭明姝
(北京控制工程研究所,北京 100190)
衛(wèi)星姿態(tài)與軌道控制計算機應(yīng)用軟件是衛(wèi)星姿態(tài)與軌道控制系統(tǒng)中的重要環(huán)節(jié),它定時采集各測量敏感器的信息,經(jīng)計算處理后,得到衛(wèi)星運動狀態(tài)量,按預(yù)定的控制規(guī)律向執(zhí)行機構(gòu)發(fā)出控制信息,完成預(yù)定的姿態(tài)和軌道控制任務(wù).AOCC應(yīng)用軟件是一個典型的實時嵌入式軟件,由于受實時性和內(nèi)存約束,某些型號的AOCC應(yīng)用軟件仍采用8086匯編語言進行開發(fā).匯編語言是一種面向機器的語言,其特點是運行速度快、占用存儲空間小,可直接對硬件進行控制[1].其缺點在于編程工作量大,開發(fā)周期長,容易出錯且不宜調(diào)試[2].而C語言是一種高級語言,其具有語言簡介、緊湊,數(shù)據(jù)結(jié)構(gòu)豐富、數(shù)據(jù)處理能力強、以及可移植性好等諸多優(yōu)點[3].但在一些對速度要求高,內(nèi)存空間非常有限的情況下,它仍然不能代替匯編語言.因此,在基于8086匯編語言開發(fā)的AOCC應(yīng)用軟件研制過程中,如果能夠充分利用上述兩種語言的各自優(yōu)點進行混合編程,則會給軟件開發(fā)、測試工作帶來事半功倍的效果.
在目前基于8086匯編語言開發(fā)的AOCC應(yīng)用軟件研制過程中,由于衛(wèi)星動力學模型通常采用基于Windows平臺的Visual C++進行開發(fā),混合編程技術(shù)的應(yīng)用只局限于對某些AOCC應(yīng)用軟件的計算功能算法(如軌道、GPS和磁場計算)進行開環(huán)的數(shù)據(jù)比對,無法進行閉環(huán)調(diào)試和測試.針對上述困難介紹如何基于混合編程技術(shù)實現(xiàn)AOCC應(yīng)用軟件的閉環(huán)快速仿真平臺.
作為嵌入式軟件,AOCC應(yīng)用軟件嵌入在衛(wèi)星姿態(tài)與軌道控制系統(tǒng)中運行,軟件的實現(xiàn)細節(jié)和計算機系統(tǒng)的結(jié)構(gòu)、I/O配置、與計算機系統(tǒng)相連的外圍設(shè)備乃至整星所處的空間環(huán)境都有關(guān)系.其中I/O接口包括數(shù)據(jù)總線、串口和并口等部件,衛(wèi)星外圍設(shè)備包括衛(wèi)星測量部件、執(zhí)行機構(gòu)、數(shù)管系統(tǒng)等,而整星所處的工作環(huán)境包括衛(wèi)星姿態(tài)與軌道動力學、運動學和空間環(huán)境力矩.依據(jù)AOCC應(yīng)用軟件的功能以及其與硬件環(huán)境耦合程度,AOCC應(yīng)用軟件閉環(huán)運行環(huán)境可分為星載計算機軟硬件部分和衛(wèi)星動力學模型仿真兩個部分,具體如圖1所示.
圖1 AOCC應(yīng)用軟件閉環(huán)運行環(huán)境框架
AOCC應(yīng)用軟件閉環(huán)運行環(huán)境的仿真為AOCC應(yīng)用軟件的動態(tài)運行提供了必要條件,但作為一個測試環(huán)境,該平臺還必須能夠提供必要的測試用例和故障注入接口(包括遙控命令的注入)以及數(shù)據(jù)的顯示、存儲和處理功能,這里不作詳細介紹.
作為軟件閉環(huán)運行環(huán)境重要組成部分,星載計算機軟硬件部分包括AOCC應(yīng)用軟件、星載計算機和I/O接口3個部分.這是整個仿真平臺實現(xiàn)的難點和重點部分.由于普通PC機的CPU與8086CPU都是基于X86體系結(jié)構(gòu)設(shè)計,通用PC機在虛擬DOS下能夠運行8086匯編語言程序的機器碼.因此,不仿真8086CPU,用普通PC機的CPU替代,這樣可降低開發(fā)的難度和節(jié)省開發(fā)時間.但由于星載計算機與衛(wèi)星外圍部件通信端口不同于普通PC機上的標準端口,為了能使AOCC應(yīng)用軟件能與衛(wèi)星動力學模型仿真軟件進行正確的數(shù)據(jù)通信,需要對AOCC應(yīng)用軟件的I/O接口部分進行改寫.對于數(shù)據(jù)通信功能的實現(xiàn),用匯編語言編寫比較困難,而采用C語言來實現(xiàn)則相對容易,因此采用匯編和C語言的混合編程技術(shù)來實現(xiàn).
衛(wèi)星動力學模型仿真部分主要由衛(wèi)星的執(zhí)行機構(gòu)、測量機構(gòu)、空間環(huán)境、空間動力學和運動學仿真程序構(gòu)成,它們之間有著緊密的耦合關(guān)系,作為一個整體與星載計算機軟硬件部分構(gòu)成一個閉環(huán)控制仿真系統(tǒng).其中測量機構(gòu)包括地球紅外敏感器、數(shù)字太陽敏感器、模擬太陽敏感器、0-1太陽敏感器、星敏感器和陀螺等部件.執(zhí)行機構(gòu)包括噴管、動量輪和磁力矩器等部件.在衛(wèi)星動力學模型中還需要考慮空間環(huán)境力矩對衛(wèi)星姿態(tài)的影響.
由于采用混合編程技術(shù)實現(xiàn)的星載計算機軟硬件部分只能運行于通用PC機的虛擬DOS下,而衛(wèi)星動力學模型仿真程序一般采用Visual C++開發(fā),運行于Windows下.因此這兩個應(yīng)用程序跨平臺的數(shù)據(jù)通信是一個必須考慮的問題.解決的方法可以通過串口通信或網(wǎng)絡(luò)通信,但從實現(xiàn)角度來看,串口通信無疑較為簡單可靠.另外在快速平臺構(gòu)建的過程中,還需要考慮顯示以及故障和測試用例注入接口的實現(xiàn),為了開發(fā)方便,可以把某些功能單獨封裝成一個獨立的應(yīng)用程序,如遙測遙控接口和曲線動態(tài)顯示部分.某型號開發(fā)的快速仿真平臺結(jié)構(gòu)如圖2所示.
圖2 某型號快速仿真平臺結(jié)構(gòu)圖
由于不仿真8086CPU,星載計算機軟硬件部分主要包括AOCC應(yīng)用軟件以及I/O接口部分的仿真.為了能實現(xiàn)動態(tài)閉環(huán)運行,星載計算機軟硬件部分應(yīng)用程序與動力學模型仿真程序通過串口通信實現(xiàn)數(shù)據(jù)的通信.采用C語言和匯編語言混合編程實現(xiàn)的星載計算機軟硬件部分應(yīng)用程序可分為3個文件,tl3.cpp,tl1.asm,tl2.asm.其相互關(guān)系見圖3所示。
圖3 星載計算機軟硬件部分程序的實現(xiàn)關(guān)系圖
tl3.cpp主要實現(xiàn)串口通信的功能,包括串口初始化、串口數(shù)據(jù)接收和發(fā)送,并把串口接收的數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的格式.在tl3.cpp文件中要根據(jù)混合編程的要求對tl1.asm中的接口程序進行申明并調(diào)用.tl1.asm為匯編語言程序,它是tl3.cpp和tl2.asm文件的接口,實現(xiàn)C語言和匯編語言程序之間的數(shù)據(jù)傳遞,調(diào)用tl2.asm文件中的子程序來實現(xiàn)衛(wèi)星姿態(tài)與軌道控制計算機應(yīng)用軟件的運行.tl2.asm為衛(wèi)星姿態(tài)與軌道控制計算機應(yīng)用軟件.利用C語言和匯編語言的混合編程需要解決的兩個主要問題是:匯編與C程序模塊的連接和函數(shù)調(diào)用過程中的參數(shù)傳遞.為了保證匯編語言和C語言模塊文件正確連接,匯編程序必須采用和C模塊一致的存儲模式,匯編程序必須遵守和C兼容的命名約定,包括函數(shù)和變量的命名約定.混合編程中的參數(shù)傳遞主要是通過堆棧進行傳遞的.C語言調(diào)用匯編子程序時,按從右到左的次序依次將參數(shù)壓入堆棧.在執(zhí)行匯編子程序時還要將返回地址壓入堆棧[4-5].利用混合編程技術(shù)實現(xiàn)的星載計算機軟硬件部分應(yīng)用程序解決了AOCC應(yīng)用軟件同動力學模型仿真程序的數(shù)據(jù)通信問題,實現(xiàn)了軟件閉環(huán)測試.同時該應(yīng)用程序可以方便的采用Turbo Debugger或CodeView等調(diào)試工具進行斷點調(diào)試,從而克服了匯編語言程序閉環(huán)調(diào)試困難.
在實際型號研制中,動力學模型仿真程序一般封裝成動態(tài)鏈接庫,通過接口函數(shù)的調(diào)用實現(xiàn)數(shù)據(jù)的傳遞及功能的仿真,其具體功能的實現(xiàn)不詳細介紹,主要介紹其與其他應(yīng)用程序的通信關(guān)系.動力學模型仿真程序的串口通信采用Visual C++進行開發(fā),工作過程是基于多線程的,流程如下:首先設(shè)置號串口參數(shù),再開啟串口偵測工作線程,串口監(jiān)測工作線程監(jiān)測到串口接收到的數(shù)據(jù)后,以消息方式通知主程序,激發(fā)消息處理函數(shù)來進行數(shù)據(jù)處理,待數(shù)據(jù)處理結(jié)束后,向串口直接發(fā)送數(shù)據(jù)[6].
動力學模型仿真程序與姿態(tài)曲線顯示程序通過局域網(wǎng)進行相連,基于TCP/IP控制協(xié)議.數(shù)據(jù)的通信程序采用Win Socket套接字來開發(fā).其中動力學模型仿真程序作為套接字的服務(wù)器端,而姿態(tài)曲線應(yīng)用程序作為客戶端.每個控制周期計算結(jié)束后,動力學模型仿真程序就把相應(yīng)的姿態(tài)數(shù)據(jù)通過網(wǎng)絡(luò)傳送給姿態(tài)曲線應(yīng)用程序,姿態(tài)曲線應(yīng)用程序?qū)崿F(xiàn)姿態(tài)數(shù)據(jù)的動態(tài)畫圖,方便軟件人員的監(jiān)控.
根據(jù)AOCC應(yīng)用軟件的遙測遙控實現(xiàn)方案,遙測遙控應(yīng)用程序?qū)崿F(xiàn)了遙控遙測數(shù)據(jù)的解包與發(fā)送.它與動力學應(yīng)用程序的通信主要利用Windows消息機制與共享內(nèi)存的方法來實現(xiàn).
對應(yīng)用這種方法開發(fā)的快速仿真平臺進行測試,在相同的試驗條件下,把快速仿真平臺的運行結(jié)果與星地聯(lián)試的結(jié)果進行比對.比對的結(jié)果驗證了快速仿真平臺功能的正確性.而其在通用PC機(Intel Pentium(R)4,3.4GHz,1G 內(nèi)存)條件下運行速度可以達到星地聯(lián)試設(shè)備運行速度的1.5倍左右,表1為兩個測試平臺在完成某相同控制模式任務(wù)的運行時間.
表1 星地聯(lián)試設(shè)備與快速仿真平臺運行時間
在測試過程中,發(fā)現(xiàn)有以下主要因素制約快速仿真平臺的運行速度:
(1)通用PC機的CPU和主頻和內(nèi)存大??;
(2)串口通信的數(shù)據(jù)量的大小;
(3)存儲數(shù)據(jù)量的大?。?/p>
(4)需要顯示數(shù)據(jù)量的大小.
通過改善這些因素可以提高仿真速度.圖4為該快速仿真平臺運行的某控制模式下姿態(tài)曲線.
本文針對8086匯編語言開發(fā)的AOCC應(yīng)用軟件開、閉環(huán)調(diào)試和測試難點,提出一種基于混合編程技術(shù)開發(fā)的快速仿真平臺的實現(xiàn)方法.該平臺解決了基于匯編語言AOCC應(yīng)用軟件閉環(huán)調(diào)試和測試的困難,尤其在軟件研制初期對于AOCC應(yīng)用軟件算法的調(diào)試起到了積極作用,提高了軟件的開發(fā)效率和質(zhì)量.
圖4 某快速仿真平臺運行的閉環(huán)姿態(tài)曲線