張 銀,索旭華,郭明姝
(北京控制工程研究所,北京 100190)
衛星姿態與軌道控制計算機應用軟件是衛星姿態與軌道控制系統中的重要環節,它定時采集各測量敏感器的信息,經計算處理后,得到衛星運動狀態量,按預定的控制規律向執行機構發出控制信息,完成預定的姿態和軌道控制任務.AOCC應用軟件是一個典型的實時嵌入式軟件,由于受實時性和內存約束,某些型號的AOCC應用軟件仍采用8086匯編語言進行開發.匯編語言是一種面向機器的語言,其特點是運行速度快、占用存儲空間小,可直接對硬件進行控制[1].其缺點在于編程工作量大,開發周期長,容易出錯且不宜調試[2].而C語言是一種高級語言,其具有語言簡介、緊湊,數據結構豐富、數據處理能力強、以及可移植性好等諸多優點[3].但在一些對速度要求高,內存空間非常有限的情況下,它仍然不能代替匯編語言.因此,在基于8086匯編語言開發的AOCC應用軟件研制過程中,如果能夠充分利用上述兩種語言的各自優點進行混合編程,則會給軟件開發、測試工作帶來事半功倍的效果.
在目前基于8086匯編語言開發的AOCC應用軟件研制過程中,由于衛星動力學模型通常采用基于Windows平臺的Visual C++進行開發,混合編程技術的應用只局限于對某些AOCC應用軟件的計算功能算法(如軌道、GPS和磁場計算)進行開環的數據比對,無法進行閉環調試和測試.針對上述困難介紹如何基于混合編程技術實現AOCC應用軟件的閉環快速仿真平臺.
作為嵌入式軟件,AOCC應用軟件嵌入在衛星姿態與軌道控制系統中運行,軟件的實現細節和計算機系統的結構、I/O配置、與計算機系統相連的外圍設備乃至整星所處的空間環境都有關系.其中I/O接口包括數據總線、串口和并口等部件,衛星外圍設備包括衛星測量部件、執行機構、數管系統等,而整星所處的工作環境包括衛星姿態與軌道動力學、運動學和空間環境力矩.依據AOCC應用軟件的功能以及其與硬件環境耦合程度,AOCC應用軟件閉環運行環境可分為星載計算機軟硬件部分和衛星動力學模型仿真兩個部分,具體如圖1所示.

圖1 AOCC應用軟件閉環運行環境框架
AOCC應用軟件閉環運行環境的仿真為AOCC應用軟件的動態運行提供了必要條件,但作為一個測試環境,該平臺還必須能夠提供必要的測試用例和故障注入接口(包括遙控命令的注入)以及數據的顯示、存儲和處理功能,這里不作詳細介紹.
作為軟件閉環運行環境重要組成部分,星載計算機軟硬件部分包括AOCC應用軟件、星載計算機和I/O接口3個部分.這是整個仿真平臺實現的難點和重點部分.由于普通PC機的CPU與8086CPU都是基于X86體系結構設計,通用PC機在虛擬DOS下能夠運行8086匯編語言程序的機器碼.因此,不仿真8086CPU,用普通PC機的CPU替代,這樣可降低開發的難度和節省開發時間.但由于星載計算機與衛星外圍部件通信端口不同于普通PC機上的標準端口,為了能使AOCC應用軟件能與衛星動力學模型仿真軟件進行正確的數據通信,需要對AOCC應用軟件的I/O接口部分進行改寫.對于數據通信功能的實現,用匯編語言編寫比較困難,而采用C語言來實現則相對容易,因此采用匯編和C語言的混合編程技術來實現.
衛星動力學模型仿真部分主要由衛星的執行機構、測量機構、空間環境、空間動力學和運動學仿真程序構成,它們之間有著緊密的耦合關系,作為一個整體與星載計算機軟硬件部分構成一個閉環控制仿真系統.其中測量機構包括地球紅外敏感器、數字太陽敏感器、模擬太陽敏感器、0-1太陽敏感器、星敏感器和陀螺等部件.執行機構包括噴管、動量輪和磁力矩器等部件.在衛星動力學模型中還需要考慮空間環境力矩對衛星姿態的影響.
由于采用混合編程技術實現的星載計算機軟硬件部分只能運行于通用PC機的虛擬DOS下,而衛星動力學模型仿真程序一般采用Visual C++開發,運行于Windows下.因此這兩個應用程序跨平臺的數據通信是一個必須考慮的問題.解決的方法可以通過串口通信或網絡通信,但從實現角度來看,串口通信無疑較為簡單可靠.另外在快速平臺構建的過程中,還需要考慮顯示以及故障和測試用例注入接口的實現,為了開發方便,可以把某些功能單獨封裝成一個獨立的應用程序,如遙測遙控接口和曲線動態顯示部分.某型號開發的快速仿真平臺結構如圖2所示.

圖2 某型號快速仿真平臺結構圖
由于不仿真8086CPU,星載計算機軟硬件部分主要包括AOCC應用軟件以及I/O接口部分的仿真.為了能實現動態閉環運行,星載計算機軟硬件部分應用程序與動力學模型仿真程序通過串口通信實現數據的通信.采用C語言和匯編語言混合編程實現的星載計算機軟硬件部分應用程序可分為3個文件,tl3.cpp,tl1.asm,tl2.asm.其相互關系見圖3所示。

圖3 星載計算機軟硬件部分程序的實現關系圖
tl3.cpp主要實現串口通信的功能,包括串口初始化、串口數據接收和發送,并把串口接收的數據轉換為相應的格式.在tl3.cpp文件中要根據混合編程的要求對tl1.asm中的接口程序進行申明并調用.tl1.asm為匯編語言程序,它是tl3.cpp和tl2.asm文件的接口,實現C語言和匯編語言程序之間的數據傳遞,調用tl2.asm文件中的子程序來實現衛星姿態與軌道控制計算機應用軟件的運行.tl2.asm為衛星姿態與軌道控制計算機應用軟件.利用C語言和匯編語言的混合編程需要解決的兩個主要問題是:匯編與C程序模塊的連接和函數調用過程中的參數傳遞.為了保證匯編語言和C語言模塊文件正確連接,匯編程序必須采用和C模塊一致的存儲模式,匯編程序必須遵守和C兼容的命名約定,包括函數和變量的命名約定.混合編程中的參數傳遞主要是通過堆棧進行傳遞的.C語言調用匯編子程序時,按從右到左的次序依次將參數壓入堆棧.在執行匯編子程序時還要將返回地址壓入堆棧[4-5].利用混合編程技術實現的星載計算機軟硬件部分應用程序解決了AOCC應用軟件同動力學模型仿真程序的數據通信問題,實現了軟件閉環測試.同時該應用程序可以方便的采用Turbo Debugger或CodeView等調試工具進行斷點調試,從而克服了匯編語言程序閉環調試困難.
在實際型號研制中,動力學模型仿真程序一般封裝成動態鏈接庫,通過接口函數的調用實現數據的傳遞及功能的仿真,其具體功能的實現不詳細介紹,主要介紹其與其他應用程序的通信關系.動力學模型仿真程序的串口通信采用Visual C++進行開發,工作過程是基于多線程的,流程如下:首先設置號串口參數,再開啟串口偵測工作線程,串口監測工作線程監測到串口接收到的數據后,以消息方式通知主程序,激發消息處理函數來進行數據處理,待數據處理結束后,向串口直接發送數據[6].
動力學模型仿真程序與姿態曲線顯示程序通過局域網進行相連,基于TCP/IP控制協議.數據的通信程序采用Win Socket套接字來開發.其中動力學模型仿真程序作為套接字的服務器端,而姿態曲線應用程序作為客戶端.每個控制周期計算結束后,動力學模型仿真程序就把相應的姿態數據通過網絡傳送給姿態曲線應用程序,姿態曲線應用程序實現姿態數據的動態畫圖,方便軟件人員的監控.
根據AOCC應用軟件的遙測遙控實現方案,遙測遙控應用程序實現了遙控遙測數據的解包與發送.它與動力學應用程序的通信主要利用Windows消息機制與共享內存的方法來實現.
對應用這種方法開發的快速仿真平臺進行測試,在相同的試驗條件下,把快速仿真平臺的運行結果與星地聯試的結果進行比對.比對的結果驗證了快速仿真平臺功能的正確性.而其在通用PC機(Intel Pentium(R)4,3.4GHz,1G 內存)條件下運行速度可以達到星地聯試設備運行速度的1.5倍左右,表1為兩個測試平臺在完成某相同控制模式任務的運行時間.

表1 星地聯試設備與快速仿真平臺運行時間
在測試過程中,發現有以下主要因素制約快速仿真平臺的運行速度:
(1)通用PC機的CPU和主頻和內存大小;
(2)串口通信的數據量的大小;
(3)存儲數據量的大小;
(4)需要顯示數據量的大小.
通過改善這些因素可以提高仿真速度.圖4為該快速仿真平臺運行的某控制模式下姿態曲線.
本文針對8086匯編語言開發的AOCC應用軟件開、閉環調試和測試難點,提出一種基于混合編程技術開發的快速仿真平臺的實現方法.該平臺解決了基于匯編語言AOCC應用軟件閉環調試和測試的困難,尤其在軟件研制初期對于AOCC應用軟件算法的調試起到了積極作用,提高了軟件的開發效率和質量.

圖4 某快速仿真平臺運行的閉環姿態曲線