陳世淼,王紹山,程凌峰,倪淑燕
(1.航天工程大學(xué)研究生院,北京 101407;2.北京跟蹤與通信技術(shù)研究所,北京 100000;3.航天工程大學(xué)電子與光學(xué)工程系,北京 101407)
微小衛(wèi)星具有質(zhì)量輕、體積小、發(fā)射周期短、性能高、成本低等諸多優(yōu)點(diǎn),在通信、遙感、導(dǎo)航、軍事等各領(lǐng)域得到廣泛應(yīng)用[1],是全球航天發(fā)展的熱點(diǎn)。隨著商業(yè)航天的興起,微小衛(wèi)星的發(fā)射數(shù)量正在逐漸增加,因此需要采用新的技術(shù)來縮短衛(wèi)星的研制周期[2]。星務(wù)軟件是衛(wèi)星系統(tǒng)的核心,用于對(duì)各個(gè)分系統(tǒng)進(jìn)行管理和數(shù)據(jù)交互,具有功能模塊多、代碼規(guī)模大、測(cè)試任務(wù)重的特點(diǎn)[3-4],星務(wù)軟件的研制進(jìn)度極大地影響了衛(wèi)星的研制周期。
隨著星載綜合電子系統(tǒng)性能的大幅提升,采用實(shí)時(shí)操作系統(tǒng)是發(fā)展的必然趨勢(shì)。星載計(jì)算機(jī)是一個(gè)嵌入式系統(tǒng),應(yīng)選用高效、高可靠的嵌入式操作系統(tǒng)內(nèi)核[5]。目前國(guó)內(nèi)外開發(fā)了很多實(shí)時(shí)操作系統(tǒng),比如軍事和航天領(lǐng)域應(yīng)用比較多的VxWorks 系統(tǒng)、μC/OS-II 系統(tǒng)等、發(fā)展迅速并具有大量使用者的FreeRTOS 系統(tǒng)以及國(guó)產(chǎn)新興的大型實(shí)時(shí)SylixOS 系統(tǒng)。VxWorks 操作系統(tǒng)在航天領(lǐng)域應(yīng)用廣泛,其性能好、穩(wěn)定性高,但該系統(tǒng)不開源,需要針對(duì)芯片開發(fā)BSP[6]。SylixOS 系統(tǒng)是一款國(guó)產(chǎn)操作系統(tǒng),性能和穩(wěn)定性都很高,但是應(yīng)用較少。μC/OS-II 系統(tǒng)和FreeRTOS 系統(tǒng)是目前應(yīng)用在微小衛(wèi)星上最多的兩款操作系統(tǒng),有著很高的實(shí)時(shí)性和可靠性,但μC/OS-II 實(shí)時(shí)操作系統(tǒng)具有更高的實(shí)時(shí)性和穩(wěn)定性,其配備有高效的微內(nèi)核,已在多個(gè)微小衛(wèi)星上成功應(yīng)用。
文中基于μC/OS-II 實(shí)時(shí)操作系統(tǒng),結(jié)合星務(wù)軟件功能需求,重點(diǎn)圍繞“通用化”特點(diǎn)進(jìn)行星務(wù)軟件框架設(shè)計(jì)。
星務(wù)軟件是星載計(jì)算機(jī)對(duì)星上任務(wù)進(jìn)行集中管理的核心部分[7-10],文中根據(jù)星務(wù)軟件的功能將其概括為星務(wù)管理、姿態(tài)控制和載荷控制三個(gè)模塊。在傳統(tǒng)的衛(wèi)星軟件研制過程中,星務(wù)管理和姿態(tài)控制是由兩個(gè)星載計(jì)算機(jī)分別實(shí)現(xiàn)的[11-13],這樣的設(shè)計(jì)方式雖然可以減低衛(wèi)星軟件設(shè)計(jì)的難度,但是會(huì)造成硬件資源的浪費(fèi),不符合一體化、小型化的設(shè)計(jì)理念,所以文中在一個(gè)星載計(jì)算機(jī)上實(shí)現(xiàn)星務(wù)管理和姿態(tài)控制。
星務(wù)管理負(fù)責(zé)整星運(yùn)行時(shí)任務(wù)的調(diào)度與管理,是衛(wèi)星的核心控制部分,包括時(shí)間管理模塊、遙測(cè)管理模塊、遙控管理模塊、程控管理模塊和設(shè)備管理模塊等[14-16]。時(shí)間管理模塊負(fù)責(zé)整星時(shí)間的獲取、修正和廣播,是整星運(yùn)行的基準(zhǔn)。遙測(cè)管理模塊負(fù)責(zé)整星遙測(cè)數(shù)據(jù)的采集、組包和發(fā)送。遙控管理模塊負(fù)責(zé)地面遙控指令的接收、處理、存儲(chǔ)和執(zhí)行等操作。程控管理模塊負(fù)責(zé)程序控制指令的存儲(chǔ)和執(zhí)行。設(shè)備管理模塊是星載計(jì)算機(jī)根據(jù)各單機(jī)狀態(tài)進(jìn)行加斷電的模塊。
姿態(tài)控制負(fù)責(zé)整星運(yùn)行過程中姿態(tài)的控制。星務(wù)軟件通過總線獲取姿控敏感器的數(shù)據(jù)信息,并進(jìn)行數(shù)據(jù)的解析和存儲(chǔ)。然后根據(jù)姿控敏感器的參數(shù)計(jì)算當(dāng)前衛(wèi)星姿態(tài),并通過姿控算法調(diào)整到期望姿態(tài)所需的執(zhí)行參數(shù)。最后將得出的執(zhí)行數(shù)據(jù)傳輸給姿控執(zhí)行器,進(jìn)而實(shí)現(xiàn)衛(wèi)星姿態(tài)的調(diào)整。
載荷控制負(fù)責(zé)載荷任務(wù)的自主規(guī)劃調(diào)度,該模塊需要根據(jù)衛(wèi)星的功能需求進(jìn)行定制化設(shè)計(jì)。
星載總線通信架構(gòu)是星務(wù)軟件設(shè)計(jì)的基礎(chǔ),為了便于對(duì)后續(xù)星務(wù)軟件框架設(shè)計(jì)進(jìn)行分析,下面介紹文中采用的總線通信架構(gòu)。
文中采用兩級(jí)雙冗余CAN 總線和RS422 相結(jié)合的方式實(shí)現(xiàn)各分系統(tǒng)指令和數(shù)據(jù)的交互,圖1 所示為文中采用的總線通信架構(gòu)。一級(jí)總線用于連接與星務(wù)分系統(tǒng)相關(guān)的載荷、GNSS、測(cè)控?cái)?shù)傳一體機(jī)和電源分系統(tǒng)等,傳輸?shù)臄?shù)據(jù)主要為其他分系統(tǒng)的遙測(cè)遙控?cái)?shù)據(jù);二級(jí)總線用于連接動(dòng)量輪、星敏感器、太陽敏感器和磁強(qiáng)計(jì)等姿控部組件,傳輸?shù)臄?shù)據(jù)為各個(gè)姿控部組件的遙測(cè)遙控?cái)?shù)據(jù)。RS422 異步串口用于連接星載計(jì)算機(jī)和測(cè)控?cái)?shù)傳一體機(jī)、載荷以及只支持串口通信的陀螺。以上總線通信架構(gòu)是文中后續(xù)展開星務(wù)軟件框架設(shè)計(jì)的前提,但采用文中設(shè)計(jì)的星務(wù)軟件框架并不一定要用以上總線通信架構(gòu)。
圖1 總線通信架構(gòu)
完成了星務(wù)軟件功能需求分析后,下面基于μC/OS-II 操作系統(tǒng)進(jìn)行星務(wù)軟件架構(gòu)設(shè)計(jì)。
實(shí)時(shí)操作系統(tǒng)中任務(wù)的優(yōu)先級(jí)直接影響星務(wù)軟件的效率和穩(wěn)定性,所以應(yīng)嚴(yán)格根據(jù)星務(wù)軟件的功能需求進(jìn)行任務(wù)的創(chuàng)建及優(yōu)先級(jí)劃分。
首先分析CAN 總線上數(shù)據(jù)傳輸?shù)墓δ?,CAN 總線上數(shù)據(jù)的接收主要通過輪詢的方式,該功能對(duì)實(shí)時(shí)性要求高,應(yīng)嚴(yán)格避免由于總線數(shù)據(jù)處理慢導(dǎo)致數(shù)據(jù)丟失或出錯(cuò)的情況,所以應(yīng)設(shè)計(jì)兩個(gè)任務(wù)來完成兩級(jí)CAN 總線上數(shù)據(jù)的接收和處理。由于一級(jí)總線上部組件重要性較高,所以一級(jí)CAN 總線數(shù)據(jù)接收任務(wù)優(yōu)先級(jí)應(yīng)高于二級(jí)CAN 總線數(shù)據(jù)接收任務(wù)。此外,CAN 總線上要進(jìn)行設(shè)備識(shí)別廣播幀、設(shè)備識(shí)別允許幀、輪詢指令、時(shí)間廣播的發(fā)送,實(shí)時(shí)性要求相對(duì)較高,所以應(yīng)設(shè)計(jì)一個(gè)任務(wù)進(jìn)行CAN 總線上數(shù)據(jù)的發(fā)送。
設(shè)備管理功能是根據(jù)星務(wù)軟件的設(shè)計(jì)對(duì)下位機(jī)進(jìn)行故障處理及加斷電操作,應(yīng)該由優(yōu)先級(jí)較高的任務(wù)來實(shí)現(xiàn)。其次,遙測(cè)和遙控功能負(fù)責(zé)衛(wèi)星與地面的通信,是保證衛(wèi)星與地面通信的基本功能,所以遙測(cè)和遙控任務(wù)優(yōu)先級(jí)僅次于設(shè)備管理任務(wù)。衛(wèi)星的姿態(tài)控制具有數(shù)據(jù)量大、占用資源多等特點(diǎn),為避免姿態(tài)控制所在任務(wù)占用CPU 時(shí)間過長(zhǎng)導(dǎo)致其他任務(wù)響應(yīng)不及時(shí)的情況,應(yīng)該將姿控任務(wù)設(shè)置為最低的優(yōu)先級(jí)。
此外,衛(wèi)星載荷任務(wù)的調(diào)度與以上功能相對(duì)獨(dú)立,應(yīng)當(dāng)設(shè)置成獨(dú)立的任務(wù)。
基于以上分析,將任務(wù)具體劃分為Task_CAN Read_1、Task_CANRead_2、Task_CANSend、Task_Device、Task_TTC、Task_RemoteControl、Task_Load和Task_ACDS,并為不同的任務(wù)劃分優(yōu)先級(jí),使各任務(wù)的實(shí)時(shí)性要求得以滿足,具體的任務(wù)劃分如表1所示。
表1 星務(wù)軟件任務(wù)劃分
星務(wù)軟件中各個(gè)任務(wù)都是獨(dú)立的無限死循環(huán)程序,為保證星務(wù)軟件的高效運(yùn)行,需要對(duì)多個(gè)任務(wù)進(jìn)行良好的調(diào)度。該系統(tǒng)程序通過設(shè)置任務(wù)優(yōu)先級(jí)和多個(gè)信號(hào)量,實(shí)現(xiàn)了系統(tǒng)程序的任務(wù)調(diào)度,任務(wù)調(diào)度關(guān)系如圖2 所示。其中系統(tǒng)中斷優(yōu)先級(jí)最高,多個(gè)任務(wù)同時(shí)處于就緒態(tài)時(shí)按照任務(wù)優(yōu)先級(jí)進(jìn)行任務(wù)調(diào)度。
圖2 多任務(wù)調(diào)度關(guān)系
該設(shè)計(jì)采用的信號(hào)量有Sem_CANRead_1、Sem_CANRead_2、Sem_CANSend、Sem_Device、Sem_TTC、Sem_RemoteControl、Sem_Load 和Sem_ACDS。一 個(gè)中斷可以發(fā)送多個(gè)信號(hào)量,從而調(diào)度多個(gè)任務(wù),同時(shí)一個(gè)任務(wù)也可以由多個(gè)中斷發(fā)送同一個(gè)信號(hào)量進(jìn)行調(diào)度。
Task_CANSend 任務(wù)負(fù)責(zé)CAN 總線上數(shù)據(jù)的發(fā)送,該任務(wù)可以在多種情況下調(diào)度。CAN 總線由于接收到設(shè)備識(shí)別申請(qǐng)幀而產(chǎn)生中斷后,發(fā)送信號(hào)量Sem_CANSend,調(diào)度任務(wù)Task_CANSend 進(jìn)行設(shè)備識(shí)別允許幀的發(fā)送;定時(shí)器1 s 中斷和800 ms 中斷觸發(fā)后,發(fā)送信號(hào)量Sem_CANSend,分別調(diào)度任務(wù)Task_CANSend 進(jìn)行時(shí)間廣播和輪詢指令的發(fā)送。
一級(jí)CAN 總線接收到數(shù)據(jù)傳輸幀后發(fā)送信號(hào)量Sem_CANRead_1,調(diào)度任務(wù)Task_CANRead_1 進(jìn)行數(shù)據(jù)的處理和解析。二級(jí)CAN 總線接收到數(shù)據(jù)傳輸幀后發(fā)送信號(hào)量Sem_CANRead_2,調(diào)度任務(wù)Task_CANRead_2 進(jìn)行數(shù)據(jù)的處理和解析。
定時(shí)器1 s 中斷觸發(fā)后,發(fā)送信號(hào)量Sem_Dev ice、Sem_TTC、Sem_RemoteControl、Sem_Load 和Sem_ACDS,分別調(diào)度任務(wù)Task_Device、Task_TTC、Task_RemoteControl、Task_Load 和Task_ACDS,實(shí)現(xiàn)以上任務(wù)的周期執(zhí)行。
星務(wù)軟件不同任務(wù)或中斷之間的信息傳遞過程為任務(wù)間的通信。在該文設(shè)計(jì)中,任務(wù)間的通信主要通過全局變量來實(shí)現(xiàn)。星務(wù)軟件進(jìn)行數(shù)據(jù)交互的下位機(jī)多、任務(wù)復(fù)雜、任務(wù)間的通信量較大,因此為了更加高效地對(duì)星務(wù)軟件上的通信數(shù)據(jù)進(jìn)行管理,軟件部分進(jìn)行了全局變量的設(shè)計(jì),全局變量含義如表2 所示。
表2 全局變量含義
星務(wù)軟件中各任務(wù)間的通信關(guān)系如圖3 所示。CAN 總線中斷將通信數(shù)據(jù)存儲(chǔ)在全局變量CANReceiveBuffer_1[10] 和 CANReceiveBuffer_2[10]中,任務(wù)Task_CANRead_1 和Task_CANRead_2 對(duì)上述兩個(gè)全局變量進(jìn)行數(shù)據(jù)處理后,將設(shè)備遙測(cè)信息存儲(chǔ)在全局變量CAN_StrQ 中,將姿控部組件信息存儲(chǔ)在全局變量DEVINTER 中,將設(shè)備的狀態(tài)信息存儲(chǔ)在全局變量Device_1[10]和Device_2[10]中,之后分別由任務(wù)Task_TTC、Task_ACDS 和Task_Device 對(duì)所關(guān)聯(lián)的全局變量進(jìn)行調(diào)用。RS422 中斷后將接收到的數(shù)據(jù)存儲(chǔ)在全局變量UartReceiveBuffer[512]中,任務(wù)Task_RemoteControl 從數(shù)據(jù)中提取載荷任務(wù)信息并存儲(chǔ)在全局變量LoadTaskBuffer 中,之后由任務(wù)Task_Load 對(duì)全局變量LoadTaskBuffer 進(jìn)行調(diào)用。全局變量SystemTime 可通過定時(shí)器中斷、任務(wù)Task_RemoteControl 和任務(wù)Task_CANRead_1進(jìn)行數(shù)據(jù)的賦值及修改,并且在任務(wù)Task_CANSend、Task_TTC 和Task_ACDS 中進(jìn)行了調(diào)用。
圖3 任務(wù)間通信關(guān)系
系統(tǒng)軟件運(yùn)行流程如圖4 所示。星載計(jì)算機(jī)上電后,星務(wù)軟件依次進(jìn)行系統(tǒng)參數(shù)初始化、系統(tǒng)模塊初始化、通信總線初始化、創(chuàng)建μC/OS-II 系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)、創(chuàng)建μC/OS-II 系統(tǒng)的任務(wù)和啟動(dòng)多任務(wù)調(diào)度。
系統(tǒng)參數(shù)初始化由Date_Init()函數(shù)完成,初始化星務(wù)軟件中的工作參數(shù)包括姿控軌道參數(shù)、單機(jī)狀態(tài)、CAN 總線數(shù)據(jù)緩沖區(qū)等。
系統(tǒng)模塊初始化由RTC_initial()、GPIO_init()、OSInit()等多個(gè)函數(shù)完成,對(duì)星載計(jì)算機(jī)上的計(jì)時(shí)器模塊、I/O 接口等進(jìn)行初始化操作。
通信總線初始化由MSSCan_Init()函數(shù)、SJACan_Init_PELICAN()函數(shù)和UART0_Init()函數(shù)完成,分別對(duì)CAN 總線和RS422 總線進(jìn)行初始化,對(duì)總線的工作模式進(jìn)行配置。同時(shí)通過ID_Broad()函數(shù)在CAN總線上發(fā)送設(shè)備識(shí)別廣播幀。
創(chuàng)建μC/OS-II 系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)由OSSemCreate()函數(shù)和OSMutexCreate()函數(shù)完成,主要進(jìn)行信號(hào)量和互斥信號(hào)量的創(chuàng)建,所創(chuàng)建的信號(hào)量已在3.2 小節(jié)中論述。
創(chuàng)建μC/OS-II 系統(tǒng)的任務(wù)由Task_Create()函數(shù)完成,根據(jù)任務(wù)優(yōu)先級(jí)、任務(wù)地址、任務(wù)堆??臻g的大小等參數(shù)創(chuàng)建圖4 所示的任務(wù)。
圖4 系統(tǒng)軟件運(yùn)行流程
啟動(dòng)多任務(wù)調(diào)度由OSStart()函數(shù)完成,該函數(shù)運(yùn)行后,軟件將由μC/OS-II 系統(tǒng)的內(nèi)核進(jìn)行管理,并根據(jù)任務(wù)的狀態(tài)及優(yōu)先級(jí)進(jìn)行多任務(wù)的調(diào)度。
為了對(duì)文中設(shè)計(jì)的星務(wù)軟件進(jìn)行可靠性驗(yàn)證,在星務(wù)軟件框架上進(jìn)一步完善星務(wù)軟件,同時(shí)搭建衛(wèi)星半實(shí)物仿真系統(tǒng),進(jìn)行模飛測(cè)試。半實(shí)物仿真系統(tǒng)將衛(wèi)星仿真系統(tǒng)的一部分以實(shí)物的形式引入到控制回路,如采用實(shí)時(shí)仿真機(jī)將運(yùn)動(dòng)模型引入控制系統(tǒng),姿態(tài)敏感器和控制器采用模擬的方式,同時(shí)將難以建立數(shù)學(xué)模型的反作用飛輪和PCDU 模塊引入到閉環(huán)中,從而模擬衛(wèi)星軌道、飛行姿態(tài)和工作模式的變化。
在模飛測(cè)試過程中,實(shí)時(shí)監(jiān)測(cè)總線的數(shù)據(jù)傳輸、遙測(cè)數(shù)據(jù)、系統(tǒng)任務(wù)調(diào)度情況、遙控指令執(zhí)行情況等。實(shí)驗(yàn)結(jié)果表明,星務(wù)軟件能夠長(zhǎng)期穩(wěn)定運(yùn)行,滿足星務(wù)軟件功能需求,驗(yàn)證了星務(wù)軟件框架設(shè)計(jì)的合理性。
文中根據(jù)星務(wù)軟件的功能需求,基于μC/OS-II實(shí)時(shí)操作系統(tǒng)進(jìn)行了通用星務(wù)軟件框架設(shè)計(jì),并搭建半實(shí)物仿真系統(tǒng)進(jìn)行了可靠性驗(yàn)證。該框架對(duì)任務(wù)的創(chuàng)建、優(yōu)先級(jí)劃分、任務(wù)通信和任務(wù)調(diào)度進(jìn)行了詳細(xì)設(shè)計(jì),可作為星務(wù)軟件設(shè)計(jì)的通用框架,對(duì)快速研制星務(wù)軟件具有重要參考意義。