黎佩南
(中國西南電子技術(shù)研究所, 成都610036)
隨著數(shù)字化技術(shù)和器件水平不斷發(fā)展,一個(gè)任務(wù)系統(tǒng)中越來越多的功能依賴軟件來實(shí)現(xiàn),航天載荷也不例外。但是,航天系統(tǒng)任務(wù)固有特點(diǎn)使載荷軟件在可靠性上具有比其他類型軟件更高的要求,同時(shí),隨著技術(shù)的發(fā)展和應(yīng)用的需要,近年來,學(xué)術(shù)界提出了快速響應(yīng)、軟件星等技術(shù),要求載荷軟件具有快速開發(fā)、臨時(shí)組裝、使用靈活等特性。而傳統(tǒng)的航天產(chǎn)品軟件開發(fā)以結(jié)構(gòu)化設(shè)計(jì)為主,軟件完全依據(jù)載荷任務(wù)而定制,通用性差,即使是功能相同的模塊,在不同平臺(tái)之間也難以移植,使載荷軟件在研發(fā)周期、成本、測(cè)試遍歷覆蓋等方面難以滿足未來任務(wù)的高節(jié)奏要求。
本文針對(duì)未來軟件星、快響衛(wèi)星載荷的可能需求,提出一種基于模塊的分層綜合軟件設(shè)計(jì)思路,通過對(duì)載荷可能功能的梳理,提煉成若干功能模塊,按照組合化思路構(gòu)建系統(tǒng)軟件體系,方便功能裁減、設(shè)計(jì)驗(yàn)證、分塊測(cè)試。這樣,一些已經(jīng)經(jīng)過使用驗(yàn)證的模塊可以方便地在不同平臺(tái)間移植,不僅縮短了載荷軟件研發(fā)時(shí)間,降低了開發(fā)測(cè)試成本,而且有效地提高了可靠性。
不同的衛(wèi)星,其載荷完成的任務(wù)各不相同,但對(duì)于載荷軟件來說,其功能卻有相同或相似之處??偟膩碚f,載荷軟件可看做一個(gè)信息交換中心,實(shí)現(xiàn)有效載荷與星務(wù)平臺(tái)及星間鏈路之間的數(shù)據(jù)交換,因此在設(shè)計(jì)時(shí)可以采取“弱化載荷實(shí)體功能、強(qiáng)化信息管理與交換功能” 的思路,將載荷軟件的任務(wù)模型提煉為“接收、發(fā)送、執(zhí)行”,即:接收和解釋星務(wù)平臺(tái)下發(fā)的指令,根據(jù)指令調(diào)度和控制載荷各設(shè)備去執(zhí)行相應(yīng)任務(wù);接收并封裝各載荷設(shè)備在工作中產(chǎn)生的數(shù)據(jù),上報(bào)星務(wù)平臺(tái)??梢詫⑤d荷軟件功能模塊進(jìn)行如圖1 所示的劃分。
圖1 載荷軟件的功能劃分Fig.1 Function partitioning of payload software
層次化設(shè)計(jì)的關(guān)鍵在于對(duì)軟件所實(shí)現(xiàn)功能和任務(wù)的分解,上層設(shè)計(jì)只需要底層軟件部件的功能和接口,低層軟件部件內(nèi)部工作所需的信息保持隱藏狀態(tài)[1]。通過對(duì)載荷軟件功能的分析,可將其分為如圖2 所示的層次。
圖2 載荷軟件的功能劃分Fig.2 Hierarchical partitioning of payload software function
根據(jù)軟件各部分實(shí)現(xiàn)的功能,整個(gè)軟件分為3層,即系統(tǒng)層、協(xié)議層、應(yīng)用層。
系統(tǒng)層包括操作系統(tǒng)和端口驅(qū)動(dòng),是整個(gè)軟件運(yùn)行的支撐平臺(tái),提供實(shí)時(shí)多任務(wù)環(huán)境,實(shí)現(xiàn)整個(gè)軟件與硬件的接口。
3.1.1 操作系統(tǒng)
20 世紀(jì)90 年代以來,實(shí)時(shí)多任務(wù)的操作系統(tǒng)(以VxWorks 和RTEMS 兩大系統(tǒng)為主)開始大量應(yīng)用在衛(wèi)星平臺(tái)上,這兩種操作系統(tǒng)都具有實(shí)時(shí)性強(qiáng)、占用系統(tǒng)資源少、支持多任務(wù)、內(nèi)核可裁剪等特點(diǎn),是當(dāng)前航空航天和軍工領(lǐng)域主流的嵌入式操作系統(tǒng)。以VxWorks 為例,它是由400 多個(gè)相對(duì)獨(dú)立、短小精煉的模塊組成,包括多任務(wù)環(huán)境(Kernel)、文件系統(tǒng)、虛擬內(nèi)存管理、網(wǎng)絡(luò)協(xié)議棧、I/O 系統(tǒng)接口等,可根據(jù)實(shí)際使用情況進(jìn)行裁剪和組合,甚至可以裁剪到只剩下最簡內(nèi)核(任務(wù)的管理與調(diào)度,稱為納核,可以只有8k)。
3.1.2 端口驅(qū)動(dòng)層
端口驅(qū)動(dòng)層用于對(duì)具體的硬件設(shè)備進(jìn)行管理和服務(wù), 封裝各種硬件接口(如RS422、CAN 總線、LVDS、1533B、1394 等)的讀出和寫入操作,使上層軟件完全不必考慮硬件類型、地址、時(shí)序等,只需要調(diào)用端口驅(qū)動(dòng)層提供的讀寫函數(shù)。端口驅(qū)動(dòng)程序主要完成以下工作:相關(guān)設(shè)備的初始化、底層輸入輸出函數(shù)與上層標(biāo)準(zhǔn)輸入輸出函數(shù)的掛接、相關(guān)設(shè)備與對(duì)應(yīng)驅(qū)動(dòng)程序的掛接。為了降低軟件內(nèi)部模塊的耦合度及提高效率,該層的函數(shù)應(yīng)只針對(duì)單一接口進(jìn)行讀寫,不提倡在這一層進(jìn)行組幀、優(yōu)先級(jí)判斷等其他操作。為提高適應(yīng)性,可將硬件接口的地址做為輸入?yún)?shù),這樣,針對(duì)不同的平臺(tái),只需改變地址,就可實(shí)現(xiàn)同類型接口的讀寫,而不必對(duì)軟件進(jìn)行修改。
系統(tǒng)層各部分與硬件緊密相關(guān),不同的主板,甚至不同的芯片所對(duì)應(yīng)的軟件都不一樣,但是由于星載設(shè)備一般優(yōu)先使用成熟技術(shù)的特性,技術(shù)的沿用性很強(qiáng),因此相對(duì)來說,這一部分的變化反而是最小的,只需針對(duì)不同的系統(tǒng)進(jìn)行簡單修改即可。
包括輸入輸出和數(shù)據(jù)處理,用于實(shí)現(xiàn)整個(gè)系統(tǒng)的數(shù)據(jù)接收、發(fā)送、分拆、封裝等。
3.2.1 輸入輸出層
輸入輸出層調(diào)用端口驅(qū)動(dòng)層提供的函數(shù),實(shí)現(xiàn)對(duì)不同接口的讀出和寫入數(shù)據(jù)。不同的衛(wèi)星平臺(tái),其接口有所不同,在輸入輸出層按照接口進(jìn)行模塊化設(shè)計(jì),便于裁剪,可以完成不同衛(wèi)星平臺(tái)硬件接口的完全封裝[2]。
數(shù)據(jù)輸入一般采用中斷(實(shí)時(shí)性要求高,如上位機(jī)下發(fā)的OC 指令、任務(wù)包指令、存儲(chǔ)指令等)和定時(shí)讀取(實(shí)時(shí)性要求低、設(shè)備狀態(tài)和參數(shù)等)兩種方式,為了保證系統(tǒng)的高效運(yùn)行和模塊化,一般只將數(shù)據(jù)存放在接收鏈表中,而不做任何處理。需要注意的是,每次向鏈表中插入新的數(shù)據(jù)時(shí),必須遍歷鏈表,根據(jù)其優(yōu)先級(jí)來確定插入的位置,以確保優(yōu)先級(jí)高的數(shù)據(jù)在鏈表中的位置始終比優(yōu)先級(jí)低的數(shù)據(jù)靠前,以提高實(shí)時(shí)性,如圖3 所示。
圖3 數(shù)據(jù)按優(yōu)先級(jí)插入鏈表Fig.3 PRI data insertion chain
數(shù)據(jù)輸出一般遍歷消息隊(duì)列、鏈表,對(duì)其中的數(shù)據(jù)進(jìn)行順序發(fā)送,而不判斷其優(yōu)先級(jí)。
3.2.2 數(shù)據(jù)處理層
數(shù)據(jù)處理層完成對(duì)數(shù)據(jù)的解包和封裝,即將從數(shù)據(jù)鏈表或消息隊(duì)列中讀取的數(shù)據(jù)按協(xié)議解包,取出有效數(shù)據(jù),或?qū)⒂行?shù)據(jù)按協(xié)議進(jìn)行封裝,插入數(shù)據(jù)鏈表或消息隊(duì)列。一般來說,同一硬件接口的數(shù)據(jù),其封裝結(jié)構(gòu)都是一致的,為降低模塊之間的耦合度,可按不同接口或協(xié)議分別編寫解包和封裝模塊。
數(shù)據(jù)處理層完成對(duì)數(shù)據(jù)協(xié)議的隔離,使應(yīng)用層和輸入輸出層可以直接使用有效數(shù)據(jù),而不必關(guān)心具體的協(xié)議,這樣,一些與協(xié)議無關(guān)的過程可以最大限度地復(fù)用和移植。
該層實(shí)現(xiàn)載荷軟件的具體應(yīng)用,在對(duì)其功能和任務(wù)進(jìn)行抽象后,可將載荷軟件劃分遙測(cè)輪詢、任務(wù)調(diào)度、存儲(chǔ)管理、設(shè)備管理、故障處理、公用模塊等。
3.3.1 遙測(cè)輪詢模塊
定時(shí)查詢各設(shè)備狀態(tài),并將查詢的結(jié)果按照協(xié)議要求封裝并上報(bào)。遙測(cè)輪詢模塊包含兩個(gè)功能,遙測(cè)響應(yīng)和定時(shí)輪詢。
(1)遙測(cè)響應(yīng):對(duì)星務(wù)平臺(tái)各類遙測(cè)指令的響應(yīng),收到遙測(cè)指令后,從緩沖區(qū)中取出需要的數(shù)據(jù)進(jìn)行拼裝,發(fā)送給星務(wù)平臺(tái)。
(2)定時(shí)輪詢:定時(shí)查詢所監(jiān)控設(shè)備的狀態(tài)、參數(shù)等,將數(shù)據(jù)存放在緩沖區(qū)中,在收到遙測(cè)指令時(shí)可隨時(shí)組裝。
3.3.2 任務(wù)調(diào)度
任務(wù)調(diào)度是整個(gè)軟件的核心,與衛(wèi)星所執(zhí)行的具體任務(wù)密切相關(guān)。該模塊完成優(yōu)先級(jí)調(diào)度、流程控制、內(nèi)存管理等功能,幾乎不具有通用性。
3.3.3 存儲(chǔ)管理
衛(wèi)星下行通道帶寬有限,星上采集的數(shù)據(jù)往往不能及時(shí)傳回地面,需要在星上進(jìn)行存儲(chǔ)。該模塊拼裝待存儲(chǔ)的數(shù)據(jù),調(diào)用相應(yīng)存儲(chǔ)接口的輸出函數(shù),實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)。
3.3.4 設(shè)備管理
該模塊實(shí)現(xiàn)對(duì)各種設(shè)備的控制處理,可根據(jù)所屬設(shè)備的類型分為若干子模塊,如接收機(jī)、天線、望遠(yuǎn)鏡、紅外線等設(shè)備控制、設(shè)備的加斷電、主備切換等。對(duì)一些用于組網(wǎng)或系列發(fā)射的衛(wèi)星,由于其功能具有相似性或延續(xù)性,一些相同設(shè)備的控制模塊可以重復(fù)使用。
3.3.5 故障處理
由于衛(wèi)星所處環(huán)境的特殊性(高真空、超低溫、強(qiáng)輻射等,復(fù)雜的空間環(huán)境可能導(dǎo)致硬件故障、程序跑飛、應(yīng)用程序數(shù)據(jù)錯(cuò)誤、內(nèi)部操作系統(tǒng)數(shù)據(jù)錯(cuò)誤以及由于數(shù)據(jù)錯(cuò)誤帶來的其他不可預(yù)料的后果[3])和星載軟件本身的特性(嵌入式為主、實(shí)時(shí)性要求高、自動(dòng)化程度高、維修困難),星載軟件有著遠(yuǎn)高于其他軟件的可靠性要求和獨(dú)特的故障處理模式。故障處理模塊完成軟件的查錯(cuò)、容錯(cuò)、糾錯(cuò)等功能,通常采用的方法有指令冗余、軟件陷阱、軟件看門狗、數(shù)字濾波等。
3.3.6 公用模塊
公用模塊用于實(shí)現(xiàn)軟件中一些被多次使用的功能,如鏈表管理、校驗(yàn)計(jì)算等、內(nèi)存拷貝、數(shù)據(jù)比較等。
應(yīng)用層是實(shí)現(xiàn)載荷軟件功能的關(guān)鍵,與衛(wèi)星本身的任務(wù)密切相關(guān),不同的衛(wèi)星其應(yīng)用層的實(shí)現(xiàn)千差萬別,因此在設(shè)計(jì)時(shí)將任務(wù)管理單獨(dú)列出,使載荷軟件的差異化設(shè)計(jì)盡量限制在一個(gè)模塊中,同時(shí)由其他模塊完成相對(duì)通用的功能。由于星載應(yīng)用的特殊性,星載產(chǎn)品設(shè)計(jì)的第一原則是盡量采用成熟技術(shù),一些共用的技術(shù)甚至是接口協(xié)議,具有很強(qiáng)的延續(xù)性,特別是用于組網(wǎng)的系列衛(wèi)星,這樣的層次和模塊劃分可以使其他模塊能夠最大程度地被移植和復(fù)用。
隨著衛(wèi)星應(yīng)用的發(fā)展,載荷的功能越來越強(qiáng)大,載荷軟件的也隨之日趨復(fù)雜,其架構(gòu)成為制約其質(zhì)量的重要因素。在軟件代碼實(shí)現(xiàn)前合理規(guī)劃軟件架構(gòu),設(shè)計(jì)嵌入式軟件框架,有利于分工協(xié)作和聯(lián)合調(diào)試[5]。本文提出的衛(wèi)星載荷軟件層次化設(shè)計(jì)方法已在某系列實(shí)驗(yàn)衛(wèi)星中使用,采用這樣的設(shè)計(jì)方法,使整個(gè)軟件架構(gòu)清晰、接口明確、高內(nèi)聚、低耦合,系統(tǒng)層、協(xié)議層無需修改即可移植,大大縮短了開發(fā)和測(cè)試時(shí)間。因此,這樣的方法具有工程實(shí)踐指導(dǎo)意義,也可供其他系統(tǒng)借鑒。
[ 1] 湯銘瑞.航天型號(hào)軟件研制過程[M] .北京:宇航出版社,1999.
TANG Ming -rui.Aerospace Program Software Developing Process[ M] .Beijing:China Astronautic Pub lishing House,1999.(in Chinese)
[ 2] 王磊,袁利.衛(wèi)星綜合軟件的體系結(jié)構(gòu)研究[ J] .空間控制技術(shù)與應(yīng)用,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] 李新明,李小將, 李藝,等.分布式衛(wèi)星嵌入式計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)設(shè)計(jì)方法[J] .中國空間科學(xué)技術(shù),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ì)算機(jī)中實(shí)時(shí)多任務(wù)軟件的設(shè)計(jì)[ J] .通信對(duì)抗,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 軟件開發(fā)項(xiàng)目實(shí)例完全解析[M] .北京:中國電力出版社,2005.
CHENG Jing -yuan.VxWorks software development project case study[M] .Beijing:China Electric Power Press, 2005.(in Chinese)