張亞航 楊培堯 趙思陽
(北京空間飛行器總體設(shè)計部,北京 100094)
軟件架構(gòu)用于軟件模塊與模塊,軟件與環(huán)境之間的關(guān)系進行全局描述[1-2],軟件架構(gòu)決定了軟件本身的通用性、靈活性和適應(yīng)性[3]。傳統(tǒng)衛(wèi)星的設(shè)計思路大多數(shù)是先根據(jù)任務(wù)需求確定硬件結(jié)構(gòu)和配置,其次開發(fā)底層軟件處理各種硬件信號將硬件連通,然后在硬件功能基礎(chǔ)上設(shè)計開發(fā)軟件以實現(xiàn)相關(guān)功能;而軟件任務(wù)模塊之間的交互往往是事先約定數(shù)據(jù)格式和內(nèi)容,然后進行調(diào)用或數(shù)據(jù)傳輸。這種模式下,首先軟件設(shè)計思路容易圍繞硬件,導致軟件對不同硬件的差異適應(yīng)能力較差,其次軟件任務(wù)模塊與任務(wù)模塊之間的耦合性極高,難以對軟件功能進行拆分和重組。
本文描述的中型敏捷遙感衛(wèi)星公用平臺(ZY2000 Remote Sensing Satellite Platform)開放式分層軟件架構(gòu)明確了各個層次主體功能和對外接口,并最終建立了簡潔靈活的軟件架構(gòu),即開放式分層軟件架構(gòu)。該軟件架構(gòu)在更新?lián)Q代、全面使用空間數(shù)據(jù)系統(tǒng)咨詢委員會(CCSDS)、歐洲航天標準合作組織(ECSS)等國際標準的基礎(chǔ)之上,在星地鏈路、星載鏈路、數(shù)據(jù)服務(wù)體系等方面構(gòu)建了分層、開放的體系架構(gòu):其上行鏈路協(xié)議采用符合CCSDS遙控鏈路協(xié)議[4],下行鏈路協(xié)議采用高級在軌系統(tǒng)(AOS)鏈路協(xié)議[5],網(wǎng)絡(luò)層采用空間包協(xié)議[6]進行數(shù)據(jù)包轉(zhuǎn)發(fā),應(yīng)用支持層采用包應(yīng)用標準(PUS)服務(wù)進行通用化設(shè)計。在這些通用協(xié)議的基礎(chǔ)之上,本文提出了基于軟總線的任務(wù)交互技術(shù),使得任務(wù)與任務(wù)之間解耦合,方便軟件任務(wù)模塊拆分和重組;提出了硬件抽象和設(shè)備虛擬化技術(shù)屏蔽底層硬件和操作系統(tǒng)差異,從而實現(xiàn)該軟件架構(gòu)在遙感和其他領(lǐng)域不同衛(wèi)星硬件環(huán)境下移植。本文描述的開放式分層星載軟件架構(gòu)已在測繪、對地觀測、海洋觀察和在軌維護等多個領(lǐng)域20多顆衛(wèi)星應(yīng)用,其中高分多模衛(wèi)星(GFDM-1)等8顆衛(wèi)星已經(jīng)發(fā)射在軌,本文對其在軌驗證情況進行分析和總結(jié)。
傳統(tǒng)遙感衛(wèi)星中,數(shù)據(jù)系統(tǒng)軟件一般以進程的形式分為多個模塊。進程之間一般以消息通信和全局變量的方式進行交互,尤其是后者。每個功能模塊一般直接操作應(yīng)用層、網(wǎng)絡(luò)層到底層硬件。以遙測功能為例[7-9],如圖1所示。
圖1 傳統(tǒng)遙感衛(wèi)星平臺軟件遙測模塊處理流程和結(jié)構(gòu)Fig.1 TM module process and structure of satellite software based on traditional satellite
從第0個時間片到第5個時間片處理的業(yè)務(wù)可以看出,該體系結(jié)構(gòu)是按照業(yè)務(wù)流程劃分,每個業(yè)務(wù)流程完成從底層1553B總線控制芯片獲取遙測數(shù)據(jù),再到上層數(shù)據(jù)處理、鏈路層網(wǎng)絡(luò)層業(yè)務(wù)邏輯組包,再到底層遙測硬件操控輸出的全過程都在一個模塊(遙測模塊)中。由于每個衛(wèi)星軟件、功能模塊的開發(fā),其底層協(xié)議和硬件操作都各自不同,需重新開發(fā),導致業(yè)務(wù)邏輯和硬件進行綁定,軟件架構(gòu)難以適應(yīng)不同衛(wèi)星的硬件環(huán)境。
為了將業(yè)務(wù)與邏輯結(jié)構(gòu)、軟件與硬件解耦,提升邏輯代碼通用性和軟件架構(gòu)跨硬件平臺適應(yīng)性,本文提出了包含應(yīng)用層、軟總線(星內(nèi)路由)層、中間件與構(gòu)件層、設(shè)備虛擬層和硬件層5個層次的開放式分層體系星載軟件架構(gòu),如圖2所示。
圖2 五層開放式分層星載軟件架構(gòu)Fig.2 Five-layer open hierarchical on-board software architecture
在本文提出的架構(gòu)中,應(yīng)用層各進程間隔離,軟總線層、中間件與構(gòu)件層實現(xiàn)跨衛(wèi)星完整復用,通過設(shè)備虛擬層實現(xiàn)跨硬件移植。本章后續(xù)小節(jié)將分別對應(yīng)用層、軟總線(星內(nèi)路由)層、中間件與構(gòu)件層的設(shè)計進行描述;硬件抽象與設(shè)備虛擬化層是本文提出實現(xiàn)軟件架構(gòu)跨衛(wèi)星硬件移植的關(guān)鍵技術(shù),將單獨采用第3章對該層的設(shè)計和實現(xiàn)方法進行描述。
該層直接面向用戶需求,實現(xiàn)了與需求相關(guān)的各個功能。一般來說包括系統(tǒng)自檢、總線管理、電源管理、自主任務(wù)管理、載荷管理、指令管理、故障隔離與檢測等常規(guī)功能。為了實現(xiàn)這部分功能的通用化,該架構(gòu)參考ECSS標準體系的包應(yīng)用標準(PUS),形成通用化的“新一代衛(wèi)星軟件常規(guī)功能”,通過參數(shù)配置的方式以適應(yīng)多個不同的遙感衛(wèi)星需求。針對具體的遙感衛(wèi)星,該軟件架構(gòu)增加了姿態(tài)軌道計算、單性任務(wù)協(xié)同、快速軌道預報、星上自主健康等功能,用于支持衛(wèi)星自身特殊空間任務(wù),以及提升智能化和好用易用性。
應(yīng)用層各個功能模塊以多進程的方式實現(xiàn),各個進程之間不存在直接的調(diào)用關(guān)系,通過軟總線(星內(nèi)路由),以標準化數(shù)據(jù)接口驅(qū)動的方式實現(xiàn)各模塊之間的交互,以降低進程間的耦合,保持各個模塊的獨立性。
軟總線(星內(nèi)路由)主要負責將各進程、星內(nèi)各終端的數(shù)據(jù)流轉(zhuǎn),從而使得各進程之間通過標準的數(shù)據(jù)接口進行交互,而不像傳統(tǒng)衛(wèi)星軟件架構(gòu)一樣發(fā)生邏輯層調(diào)用關(guān)系,如圖3所示。軟總線對上層進程提供標準的數(shù)據(jù)接口,并且調(diào)用下層AOS鏈路協(xié)議、遙控鏈路協(xié)議、操作系統(tǒng)消息隊列和時間同步15553B協(xié)議相關(guān)程序進行數(shù)據(jù)分發(fā)和接收,從而使得上層應(yīng)用程序與底層鏈路協(xié)議解耦,便于軟件移植。
圖3 路由/軟總線和其他進程拓撲結(jié)構(gòu)Fig.3 Topology among Router/SoftBus and other Process
中間件與構(gòu)件層封裝并復用大量邏輯操作。本層各個模塊必須嚴格保證是獨立存在的個體(具體來說就是能夠獨立編譯),其向上提供應(yīng)用接口并隱藏自身細節(jié),以提供其他應(yīng)用進程使用,其具體結(jié)構(gòu)見文獻[10]。
本文所述的軟件架構(gòu)設(shè)計了智能任務(wù)規(guī)劃算法庫構(gòu)件群、指令序列調(diào)度構(gòu)件群、緩存管理構(gòu)件群、遙測數(shù)據(jù)池、基礎(chǔ)算法庫構(gòu)件群、星內(nèi)子網(wǎng)鏈路構(gòu)件群等37類構(gòu)件群,從而大力支持上層業(yè)務(wù)邏輯復用。
為了屏蔽硬件的差異帶來上層軟件的差異擴散,需抽象出標準的硬件驅(qū)動對外接口,包括統(tǒng)一的操作接口和數(shù)據(jù)接口,這種位于硬件設(shè)備之上、數(shù)據(jù)鏈路層之下的接口稱為“軟”設(shè)備。軟件產(chǎn)品將建立在統(tǒng)一的設(shè)備驅(qū)動之上,并通過軟仿真技術(shù)對自動生成的軟件功能、性能進行仿真。
3.1.1 “軟”設(shè)備的內(nèi)部結(jié)構(gòu)
對星載軟件常用的硬件接口進行抽象,提煉出每種接口通用的控制邏輯和數(shù)據(jù)緩存,形成每種接口的“軟”設(shè)備,其結(jié)構(gòu)描述如下。
(1)控制邏輯??刂七壿嫴糠忠环矫嫱瓿伞败洝痹O(shè)備對底層硬件的控制,并從底層硬件獲取硬件狀態(tài)信號,另一方面控制“軟”設(shè)備的存儲區(qū)地址訪問過程,并獲取存儲區(qū)的地址狀態(tài)。
(2)數(shù)據(jù)緩存。數(shù)據(jù)緩存在控制邏輯的控制下,存儲來自上層軟件的需要輸出的數(shù)據(jù)或來自底層硬件的需要輸入的數(shù)據(jù),并返回數(shù)據(jù)緩存的狀態(tài)。
3.1.2 “軟”設(shè)備和上層軟件之間的數(shù)據(jù)傳輸關(guān)系
“軟”設(shè)備的設(shè)計也是基于構(gòu)件化和層次化的綜合電子軟件體系思路的,每個“軟”設(shè)備為一個獨立的軟件單元,上層軟件需要訪問底層硬件時,調(diào)用相應(yīng)“軟”設(shè)備的接口函數(shù),完成數(shù)據(jù)在軟件和底層硬件接口之間的傳輸?!败洝痹O(shè)備和上層軟件之間的數(shù)據(jù)傳輸關(guān)系見圖4。
圖4 “軟”設(shè)備和上層軟件的數(shù)據(jù)傳輸關(guān)系Fig.4 Data transmission relationship between virtual device and upper software
3.1.3 “軟”設(shè)備和上層應(yīng)用軟件的通信過程
1)數(shù)據(jù)輸出流程
(1)上層軟件完成航天器數(shù)據(jù)處理,生成滿足“軟”設(shè)備輸出要求的數(shù)據(jù)格式。
(2)上層軟件調(diào)用“軟”設(shè)備的狀態(tài)接口函數(shù),判斷當前該“軟”設(shè)備是否為空閑,如果為空閑則進入下一步,如果為忙則繼續(xù)等待。
(3)上層軟件調(diào)用“軟”設(shè)備的傳輸接口函數(shù),將航天器數(shù)據(jù)傳輸給“軟”設(shè)備。
(4)“軟”設(shè)備訪問底層硬件接口,將數(shù)據(jù)輸出。
2)數(shù)據(jù)輸入過程
分為兩種情況,第一種情況由上層軟件主動發(fā)起,按照預期的時序關(guān)系控制“軟”設(shè)備獲取需要的數(shù)據(jù),第二種情況為上層軟件查詢“軟”設(shè)備是否接收數(shù)據(jù),并根據(jù)查詢狀態(tài)從“軟”設(shè)備獲取數(shù)據(jù)。
(1)第一種情況的輸入流程:①上層軟件運行到數(shù)據(jù)接收時隙;②上層軟件調(diào)用“軟”設(shè)備的狀態(tài)接口函數(shù),通知“軟”設(shè)備控制底層硬件采集數(shù)據(jù);③上層軟件等待“軟”設(shè)備采集結(jié)束的時隙,調(diào)用“軟”設(shè)備的傳輸接口函數(shù),從“軟”設(shè)備讀入數(shù)據(jù)。
(2)第二種情況的輸入流程:①上層軟件調(diào)用“軟”設(shè)備的狀態(tài)接口函數(shù),查詢“軟”設(shè)備是否接收到數(shù)據(jù);②如果“軟”設(shè)備狀態(tài)為接收到數(shù)據(jù),則上層軟件從“軟”設(shè)備讀入數(shù)據(jù)。如果“軟”設(shè)備狀態(tài)為尚未接收到數(shù)據(jù),則上層軟件繼續(xù)查詢;③底層硬件接收到數(shù)據(jù)(比如上行遙控數(shù)據(jù))時通過中斷通知“軟”設(shè)備獲取數(shù)據(jù)。
本文將實現(xiàn)跨衛(wèi)星硬件平臺移植的關(guān)鍵技術(shù)——硬件抽象與設(shè)備虛擬化技術(shù)的一些關(guān)鍵點的設(shè)計與實現(xiàn)進行描述。
依據(jù)本項目的設(shè)計,硬件接口相關(guān)的處理函數(shù)都屬于硬件抽象與虛擬化層。硬件抽象與設(shè)備虛擬化層完成對硬件接口的二次封裝,從而保證當硬件設(shè)備發(fā)生變化時,上層不需要根據(jù)硬件設(shè)備的變更情況進行任何接口相關(guān)的修改。
3.2.1 存儲器設(shè)備虛擬實現(xiàn)
以高分二號衛(wèi)星(GF-2)為例,大多數(shù)傳統(tǒng)遙感衛(wèi)星使用的是帶電可擦寫可編程只讀存儲器(EEPROM),以高分多模衛(wèi)星為代表的新一代遙感衛(wèi)星使用了閃存(FLASH)存儲器。為了將高分多模衛(wèi)星的軟件移植到其他衛(wèi)星,只需要修改硬件抽象與設(shè)備虛擬層的存儲器驅(qū)動程序,添加相應(yīng)的FLASH操作接口即可。
1)定義并實現(xiàn)存儲器設(shè)備操作函數(shù)
FLASH操作除了讀寫方法不一樣,比EEPROM多了擦除操作。為保持一致,EEPROM的接口也要留一個空的擦除操作接口。
最終,F(xiàn)LASH和EEPROM的讀寫操作函數(shù)如表1所示。
表1 存儲設(shè)備虛擬化操作函數(shù)列表Table 1 Operate Function List of Storage device virtualization
2)配置虛擬設(shè)備接口函數(shù)
存儲器虛擬設(shè)備接口函數(shù)采用統(tǒng)一的讀寫擦做,即PromRead和PromWrite,通過參數(shù)配置和函數(shù)綁定的方式,使得PromRead和PromWrite調(diào)用表1中不同的操作函數(shù),從而實現(xiàn)虛擬設(shè)備接口統(tǒng)一化,上層軟件進行存儲器訪問時調(diào)用下層設(shè)備,無需關(guān)注存儲器設(shè)備硬件細節(jié),進而實現(xiàn)存儲器設(shè)備虛擬化。
3.2.2 總線傳輸設(shè)備虛擬實現(xiàn)
以GF-2、嫦娥五號(CE-5)和GFDM-1等衛(wèi)星為例,以上3種硬件平臺都采用了1553B總線進行設(shè)備間的通信。為了提高總線通信效率,本軟件架構(gòu)參考ECSS相關(guān)國際標準[11],提出了基于時間同步的1553B總線通信技術(shù)和對應(yīng)的協(xié)議[12]。對此,在本架構(gòu)中在進行1553B處理跨硬件移植時,所進行的修改包括以下幾部分內(nèi)容。
1)創(chuàng)建設(shè)備接口
首先補充定義了1553B總線的設(shè)備結(jié)構(gòu)體bus_1553B_struct,其中包含的關(guān)鍵字段包括: 1553B總線的寄存器基地址、1553B總線的RAM基地址、1553B總線數(shù)據(jù)存儲相關(guān)信息、1553B總線各項操作對應(yīng)的在軌維護函數(shù)指針。
其次在構(gòu)件初始化接口函數(shù)中,完成對1553B總線設(shè)備結(jié)構(gòu)體的創(chuàng)建與初始化操作,其中具體操作包括各項關(guān)鍵字段的定義,以及在軌維護函數(shù)指針的掛接操作。
2)配置設(shè)備接口函數(shù)
由于聲明了設(shè)備結(jié)構(gòu)體,因此在定義新的修改設(shè)備接口函數(shù)時,需要通過設(shè)備結(jié)構(gòu)體內(nèi)的關(guān)鍵字段進行數(shù)據(jù)交換。接口的配置方法同存儲器硬件虛擬配置部分的內(nèi)容,即通過函數(shù)指針完成對設(shè)備接口函數(shù)的掛接。
3.2.3 遙測/遙控硬件虛擬配置實現(xiàn)
與總線芯片虛擬配置的原理相同,在標準化星載軟件框架中,首先定義遙測或遙控模塊相對應(yīng)的設(shè)備結(jié)構(gòu)體。隨后,完成相應(yīng)處理函數(shù)與面向應(yīng)用層的接口函數(shù)的綁定工作。應(yīng)用層通過聲明的設(shè)備結(jié)構(gòu)體對象中的接口函數(shù),即可完成遙測或遙控硬件的操作。
表2給出了遙測硬件虛擬配置中的關(guān)鍵參數(shù)和關(guān)鍵接口。
表2 遙測硬件虛擬化關(guān)鍵參數(shù)和關(guān)鍵接口Table 2 Key parameters and interfaces list of telemetry device virtualization
3.2.4 其他硬件設(shè)備虛擬化
衛(wèi)星綜合處理單元除了以上硬件設(shè)備,還可能包括CPU、時間管理芯片、內(nèi)總線、指令譯碼等硬件模塊,其設(shè)備虛擬化方法與上述硬件抽象與設(shè)備虛擬配置的原理相同,即首先定義模塊相對應(yīng)的設(shè)備虛擬結(jié)構(gòu)體,其次完成相應(yīng)處理模塊的設(shè)計,最后完成面向應(yīng)用層的通用化接口函數(shù)的設(shè)計,并與對應(yīng)邏輯處理模塊綁定。由于篇幅原因,不再展開說明。
經(jīng)過“十三五”期間多顆衛(wèi)星的實踐,本文提出的開放式分層軟件架構(gòu)已經(jīng)在測繪、對地觀測、海洋觀察等遙感和在軌維護等多個領(lǐng)域得到應(yīng)用和驗證?;厩闆r如下。
(1)本軟件架構(gòu)在高分十一號01衛(wèi)星、高分十一號02衛(wèi)星、高分十三號衛(wèi)星、高分十四號衛(wèi)星、新技術(shù)驗證六號01衛(wèi)星、新技術(shù)驗證六號02衛(wèi)星、新技術(shù)驗證七號衛(wèi)星、高分多模衛(wèi)星等9顆衛(wèi)星在軌飛行驗證,基于該軟件架構(gòu)實現(xiàn)的數(shù)管和綜合電子分系統(tǒng)軟件運行良好,衛(wèi)星各項任務(wù)個管理功能運行順暢,軟件架構(gòu)在軌可靠性得到充分驗證確認。
(2)本軟件架構(gòu)同時應(yīng)用于多顆在研衛(wèi)星,采用該架構(gòu)之后,多個衛(wèi)星之間采用通用化設(shè)計,衛(wèi)星數(shù)據(jù)管理或綜合電子系統(tǒng)軟件復用率(邏輯函數(shù)或源文件級完整復用)由5%~10%[9]增長至70%~87%。
(3)本軟件架構(gòu)提出了硬件抽象與設(shè)備虛擬化技術(shù),將軟件與硬件解耦,從而使得僅需要修改與硬件的最底層接口,即可支持多個衛(wèi)星甚至多種平臺,跨硬件移植代碼修改量由3000行以上縮小至200行以內(nèi),效率提升10~15倍。
總之,基于中型敏捷遙感衛(wèi)星公用平臺開發(fā)的、與國際標準接軌的遙感衛(wèi)星數(shù)據(jù)系統(tǒng)開放式分層體系架構(gòu)所實現(xiàn)的星載軟件,自2018年7月以來已經(jīng)過多顆在軌衛(wèi)星的應(yīng)用和驗證。它實現(xiàn)了不同衛(wèi)星應(yīng)用中任務(wù)與任務(wù)之間的解耦,業(yè)務(wù)與邏輯結(jié)構(gòu)、軟件與硬件的解耦,提升了邏輯代碼通用性和軟件架構(gòu)跨硬件平臺的適應(yīng)性,從而為實現(xiàn)系統(tǒng)軟件在不同領(lǐng)域遙感衛(wèi)星硬件環(huán)境下的移植奠定了基礎(chǔ)。