黎佩南
(中國西南電子技術研究所, 成都610036)
隨著數字化技術和器件水平不斷發展,一個任務系統中越來越多的功能依賴軟件來實現,航天載荷也不例外。但是,航天系統任務固有特點使載荷軟件在可靠性上具有比其他類型軟件更高的要求,同時,隨著技術的發展和應用的需要,近年來,學術界提出了快速響應、軟件星等技術,要求載荷軟件具有快速開發、臨時組裝、使用靈活等特性。而傳統的航天產品軟件開發以結構化設計為主,軟件完全依據載荷任務而定制,通用性差,即使是功能相同的模塊,在不同平臺之間也難以移植,使載荷軟件在研發周期、成本、測試遍歷覆蓋等方面難以滿足未來任務的高節奏要求。
本文針對未來軟件星、快響衛星載荷的可能需求,提出一種基于模塊的分層綜合軟件設計思路,通過對載荷可能功能的梳理,提煉成若干功能模塊,按照組合化思路構建系統軟件體系,方便功能裁減、設計驗證、分塊測試。這樣,一些已經經過使用驗證的模塊可以方便地在不同平臺間移植,不僅縮短了載荷軟件研發時間,降低了開發測試成本,而且有效地提高了可靠性。
不同的衛星,其載荷完成的任務各不相同,但對于載荷軟件來說,其功能卻有相同或相似之處。總的來說,載荷軟件可看做一個信息交換中心,實現有效載荷與星務平臺及星間鏈路之間的數據交換,因此在設計時可以采取“弱化載荷實體功能、強化信息管理與交換功能” 的思路,將載荷軟件的任務模型提煉為“接收、發送、執行”,即:接收和解釋星務平臺下發的指令,根據指令調度和控制載荷各設備去執行相應任務;接收并封裝各載荷設備在工作中產生的數據,上報星務平臺。可以將載荷軟件功能模塊進行如圖1 所示的劃分。

圖1 載荷軟件的功能劃分Fig.1 Function partitioning of payload software
層次化設計的關鍵在于對軟件所實現功能和任務的分解,上層設計只需要底層軟件部件的功能和接口,低層軟件部件內部工作所需的信息保持隱藏狀態[1]。通過對載荷軟件功能的分析,可將其分為如圖2 所示的層次。

圖2 載荷軟件的功能劃分Fig.2 Hierarchical partitioning of payload software function
根據軟件各部分實現的功能,整個軟件分為3層,即系統層、協議層、應用層。
系統層包括操作系統和端口驅動,是整個軟件運行的支撐平臺,提供實時多任務環境,實現整個軟件與硬件的接口。
3.1.1 操作系統
20 世紀90 年代以來,實時多任務的操作系統(以VxWorks 和RTEMS 兩大系統為主)開始大量應用在衛星平臺上,這兩種操作系統都具有實時性強、占用系統資源少、支持多任務、內核可裁剪等特點,是當前航空航天和軍工領域主流的嵌入式操作系統。以VxWorks 為例,它是由400 多個相對獨立、短小精煉的模塊組成,包括多任務環境(Kernel)、文件系統、虛擬內存管理、網絡協議棧、I/O 系統接口等,可根據實際使用情況進行裁剪和組合,甚至可以裁剪到只剩下最簡內核(任務的管理與調度,稱為納核,可以只有8k)。
3.1.2 端口驅動層
端口驅動層用于對具體的硬件設備進行管理和服務, 封裝各種硬件接口(如RS422、CAN 總線、LVDS、1533B、1394 等)的讀出和寫入操作,使上層軟件完全不必考慮硬件類型、地址、時序等,只需要調用端口驅動層提供的讀寫函數。端口驅動程序主要完成以下工作:相關設備的初始化、底層輸入輸出函數與上層標準輸入輸出函數的掛接、相關設備與對應驅動程序的掛接。為了降低軟件內部模塊的耦合度及提高效率,該層的函數應只針對單一接口進行讀寫,不提倡在這一層進行組幀、優先級判斷等其他操作。為提高適應性,可將硬件接口的地址做為輸入參數,這樣,針對不同的平臺,只需改變地址,就可實現同類型接口的讀寫,而不必對軟件進行修改。
系統層各部分與硬件緊密相關,不同的主板,甚至不同的芯片所對應的軟件都不一樣,但是由于星載設備一般優先使用成熟技術的特性,技術的沿用性很強,因此相對來說,這一部分的變化反而是最小的,只需針對不同的系統進行簡單修改即可。
包括輸入輸出和數據處理,用于實現整個系統的數據接收、發送、分拆、封裝等。
3.2.1 輸入輸出層
輸入輸出層調用端口驅動層提供的函數,實現對不同接口的讀出和寫入數據。不同的衛星平臺,其接口有所不同,在輸入輸出層按照接口進行模塊化設計,便于裁剪,可以完成不同衛星平臺硬件接口的完全封裝[2]。
數據輸入一般采用中斷(實時性要求高,如上位機下發的OC 指令、任務包指令、存儲指令等)和定時讀取(實時性要求低、設備狀態和參數等)兩種方式,為了保證系統的高效運行和模塊化,一般只將數據存放在接收鏈表中,而不做任何處理。需要注意的是,每次向鏈表中插入新的數據時,必須遍歷鏈表,根據其優先級來確定插入的位置,以確保優先級高的數據在鏈表中的位置始終比優先級低的數據靠前,以提高實時性,如圖3 所示。

圖3 數據按優先級插入鏈表Fig.3 PRI data insertion chain
數據輸出一般遍歷消息隊列、鏈表,對其中的數據進行順序發送,而不判斷其優先級。
3.2.2 數據處理層
數據處理層完成對數據的解包和封裝,即將從數據鏈表或消息隊列中讀取的數據按協議解包,取出有效數據,或將有效數據按協議進行封裝,插入數據鏈表或消息隊列。一般來說,同一硬件接口的數據,其封裝結構都是一致的,為降低模塊之間的耦合度,可按不同接口或協議分別編寫解包和封裝模塊。
數據處理層完成對數據協議的隔離,使應用層和輸入輸出層可以直接使用有效數據,而不必關心具體的協議,這樣,一些與協議無關的過程可以最大限度地復用和移植。
該層實現載荷軟件的具體應用,在對其功能和任務進行抽象后,可將載荷軟件劃分遙測輪詢、任務調度、存儲管理、設備管理、故障處理、公用模塊等。
3.3.1 遙測輪詢模塊
定時查詢各設備狀態,并將查詢的結果按照協議要求封裝并上報。遙測輪詢模塊包含兩個功能,遙測響應和定時輪詢。
(1)遙測響應:對星務平臺各類遙測指令的響應,收到遙測指令后,從緩沖區中取出需要的數據進行拼裝,發送給星務平臺。
(2)定時輪詢:定時查詢所監控設備的狀態、參數等,將數據存放在緩沖區中,在收到遙測指令時可隨時組裝。
3.3.2 任務調度
任務調度是整個軟件的核心,與衛星所執行的具體任務密切相關。該模塊完成優先級調度、流程控制、內存管理等功能,幾乎不具有通用性。
3.3.3 存儲管理
衛星下行通道帶寬有限,星上采集的數據往往不能及時傳回地面,需要在星上進行存儲。該模塊拼裝待存儲的數據,調用相應存儲接口的輸出函數,實現對數據的存儲。
3.3.4 設備管理
該模塊實現對各種設備的控制處理,可根據所屬設備的類型分為若干子模塊,如接收機、天線、望遠鏡、紅外線等設備控制、設備的加斷電、主備切換等。對一些用于組網或系列發射的衛星,由于其功能具有相似性或延續性,一些相同設備的控制模塊可以重復使用。
3.3.5 故障處理
由于衛星所處環境的特殊性(高真空、超低溫、強輻射等,復雜的空間環境可能導致硬件故障、程序跑飛、應用程序數據錯誤、內部操作系統數據錯誤以及由于數據錯誤帶來的其他不可預料的后果[3])和星載軟件本身的特性(嵌入式為主、實時性要求高、自動化程度高、維修困難),星載軟件有著遠高于其他軟件的可靠性要求和獨特的故障處理模式。故障處理模塊完成軟件的查錯、容錯、糾錯等功能,通常采用的方法有指令冗余、軟件陷阱、軟件看門狗、數字濾波等。
3.3.6 公用模塊
公用模塊用于實現軟件中一些被多次使用的功能,如鏈表管理、校驗計算等、內存拷貝、數據比較等。
應用層是實現載荷軟件功能的關鍵,與衛星本身的任務密切相關,不同的衛星其應用層的實現千差萬別,因此在設計時將任務管理單獨列出,使載荷軟件的差異化設計盡量限制在一個模塊中,同時由其他模塊完成相對通用的功能。由于星載應用的特殊性,星載產品設計的第一原則是盡量采用成熟技術,一些共用的技術甚至是接口協議,具有很強的延續性,特別是用于組網的系列衛星,這樣的層次和模塊劃分可以使其他模塊能夠最大程度地被移植和復用。
隨著衛星應用的發展,載荷的功能越來越強大,載荷軟件的也隨之日趨復雜,其架構成為制約其質量的重要因素。在軟件代碼實現前合理規劃軟件架構,設計嵌入式軟件框架,有利于分工協作和聯合調試[5]。本文提出的衛星載荷軟件層次化設計方法已在某系列實驗衛星中使用,采用這樣的設計方法,使整個軟件架構清晰、接口明確、高內聚、低耦合,系統層、協議層無需修改即可移植,大大縮短了開發和測試時間。因此,這樣的方法具有工程實踐指導意義,也可供其他系統借鑒。
[ 1] 湯銘瑞.航天型號軟件研制過程[M] .北京:宇航出版社,1999.
TANG Ming -rui.Aerospace Program Software Developing Process[ M] .Beijing:China Astronautic Pub lishing House,1999.(in Chinese)
[ 2] 王磊,袁利.衛星綜合軟件的體系結構研究[ J] .空間控制技術與應用,2010, 36(1):31-36.
WANG Lei, YUAN Li.Integrated Software Architecture for Satellites[ J] .Aerospace Control and Application, 2010, 36(1):31-36.(in Chinese)
[ 3] 李新明,李小將, 李藝,等.分布式衛星嵌入式計算機系統結構設計方法[J] .中國空間科學技術,2010(4):1-8.
LI Xin-ming, LI Xiao-jiang, LI Yi, et al.M ethod of Designing Embedded Computer System Architecture in Distributed Satellite[ J] .Chinese Space Science and Technology,2010(4):1-8.(in Chinese)
[4] 黃琪, 姜濤.星載計算機中實時多任務軟件的設計[ J] .通信對抗,2009(1):58-61.
HUANG Qi, JIANG Tao.Real-Time Multi-Task Software Design of Spaceborne Computer[ J] .Communication Countermeasures, 2009(1):58-61.(in Chinese)
[5] 程敬原.VxWorks 軟件開發項目實例完全解析[M] .北京:中國電力出版社,2005.
CHENG Jing -yuan.VxWorks software development project case study[M] .Beijing:China Electric Power Press, 2005.(in Chinese)