趙海升,樊鳳霞,賈淑梅,李承奎
(中國科學(xué)院高能物理研究所,北京 100049)
衛(wèi)星采集的數(shù)據(jù)按位或者字節(jié)的形式存儲(chǔ),這些存儲(chǔ)格式由地面預(yù)定義,下傳數(shù)據(jù)的解析遵照預(yù)定義的格式進(jìn)行。然而,衛(wèi)星制造過程中,特別是衛(wèi)星上載荷的研制過程中,這些格式時(shí)常發(fā)生變化,給數(shù)據(jù)解析帶來很大麻煩。軟硬件信息溝通不及時(shí)會(huì)影響工程進(jìn)展。另一方面即使格式固定,軟件端解析這些量也費(fèi)時(shí)費(fèi)力。比較預(yù)定義格式發(fā)現(xiàn),它們的定義規(guī)則比較一致,設(shè)計(jì)一種軟硬件接口和數(shù)據(jù)解析方式,降低軟硬件溝通成本,同時(shí)能夠自適應(yīng)地進(jìn)行數(shù)據(jù)解析。
數(shù)據(jù)解析一般按數(shù)據(jù)包進(jìn)行,衛(wèi)星下傳數(shù)據(jù)包有很多種,按采集來源可以分為衛(wèi)星平臺(tái)采集的數(shù)據(jù)包、載荷采集的工程數(shù)據(jù)包和載荷采集的科學(xué)數(shù)據(jù)包[1]。平臺(tái)采集的數(shù)據(jù)包格式比較簡(jiǎn)單而且固定,比如定位數(shù)據(jù)包、姿態(tài)包及整星溫度包等。載荷采集的工程數(shù)據(jù)包按時(shí)間采集,數(shù)據(jù)種類比較多,但總的數(shù)據(jù)量小,比如反映驅(qū)動(dòng)時(shí)鐘狀態(tài)的包、工作模式包等,一個(gè)包大約幾十到幾百字節(jié),有時(shí)硬件會(huì)在不同電子學(xué)或者儀器間輪換采集工程量,此時(shí)采集的工程量無論是格式還是長度可能都不一樣,它們可以看為單獨(dú)的包,這樣工程數(shù)據(jù)可能存在一些嵌套包??茖W(xué)數(shù)據(jù)量大,考慮到星上存儲(chǔ)資源珍貴,有些物理量分為兩部分存儲(chǔ),有些情況下,一個(gè)物理事例的表征需要采集多個(gè)過閾值通道,每次過閾值的通道數(shù)目不同,使得這種包長度不固定,比較重要的科學(xué)數(shù)據(jù)包有物理事例包、噪聲基線包、時(shí)間進(jìn)位包及全球定位系統(tǒng)脈沖包等,一個(gè)包占幾個(gè)到幾十個(gè)字節(jié)。這些原始數(shù)據(jù)包在星上進(jìn)行編碼、加擾和調(diào)制,通過數(shù)傳或者遙測(cè)通道下傳至地面,地面再通過解調(diào)、解擾、解密、去格式、分包等,將同一類型的包按文件存儲(chǔ),這些不同的文件都有表征其唯一性的字段,比如硬X射線調(diào)制望遠(yuǎn)鏡衛(wèi)星(Hard X-ray Modulation Telescope, HXMT)[2]的文件名稱采用應(yīng)用過程標(biāo)識(shí)符(Application Identifier, APID)表征。本文的分析對(duì)象是這些去格式分包后的數(shù)據(jù)文件。
已經(jīng)發(fā)射的硬X射線調(diào)制望遠(yuǎn)鏡衛(wèi)星和天宮二號(hào)上的伽瑪暴偏振探測(cè)儀(Gamma-ray Burst Polarimeter)[3],星上數(shù)據(jù)以高位在前、低位在后的形式存儲(chǔ),即對(duì)于一個(gè)字節(jié),先傳輸高位,后傳輸?shù)臀弧o論是星上還是地面,數(shù)據(jù)流順序都是按先傳輸、先存儲(chǔ)、先讀取的方式進(jìn)行。在處理多字節(jié)數(shù)據(jù)時(shí),地面人員需要注意字節(jié)順序與計(jì)算機(jī)內(nèi)存實(shí)際順序的對(duì)應(yīng)關(guān)系,某些計(jì)算機(jī)字節(jié)順序相反,比如本應(yīng)該是字節(jié)A在字節(jié)B之前,但是內(nèi)存中字節(jié)B在A之前,需要在解析時(shí)完成一次翻轉(zhuǎn)。
本文主要介紹衛(wèi)星下傳數(shù)據(jù)的解析方法和軟硬件接口方式,并將其納入一個(gè)系統(tǒng),希望方便各個(gè)衛(wèi)星的調(diào)用,以節(jié)約軟硬件交流成本,加速工程進(jìn)度。
系統(tǒng)主要以數(shù)據(jù)庫為中心,有兩大模塊。圖1為系統(tǒng)框架,數(shù)據(jù)庫的任務(wù)是存儲(chǔ)解析格式,解析格式的形式按本文給出的解析規(guī)則書寫。模塊一為接口模塊,硬件人員按照規(guī)則將解析格式寫入數(shù)據(jù)庫,并能夠再次讀取數(shù)據(jù)庫并顯示。模塊二為數(shù)據(jù)解析模塊,數(shù)據(jù)解析時(shí),首先從數(shù)據(jù)庫中讀取解析格式,生成一系列配置文件,然后解析模塊讀取這些配置文件對(duì)數(shù)據(jù)進(jìn)行解析。
圖1 系統(tǒng)框架
Fig.1 The architecture of decoding system
數(shù)據(jù)庫中存在兩種類型的表格:一種為包性質(zhì)表(注冊(cè)表),它包含一類或者一系列包的屬性定義;另一種為包格式表(格式表),每個(gè)包對(duì)應(yīng)一個(gè)格式表,它指明包的解析格式。這樣在解析一種數(shù)據(jù)包時(shí),首先從注冊(cè)表中找到該包的屬性,包括長度、起止關(guān)鍵字等,然后查詢需要的格式表,從而找出解析格式。配置文件的內(nèi)容與相對(duì)應(yīng)的數(shù)據(jù)庫中表格類似,名稱相同,可以看作數(shù)據(jù)庫的一個(gè)副本,以下描述統(tǒng)稱為數(shù)據(jù)庫。
注冊(cè)表表征包的一些基本屬性,它包括如下信息:
title:包名稱,對(duì)應(yīng)格式表名稱,具有唯一性。
type:包類型,是識(shí)別包的關(guān)鍵信息。某一數(shù)據(jù)文件對(duì)應(yīng)一個(gè)或者多個(gè)包,將它們的類型設(shè)為相同,可以快速得到該文件對(duì)應(yīng)的包。比如對(duì)于硬X射線調(diào)制望遠(yuǎn)鏡衛(wèi)星,物理事例包、標(biāo)定事例包的類型都是事例型。本文建議利用APID代表包類型。
header:表征數(shù)據(jù)包的起始點(diǎn),它由起始位置、結(jié)束位置和值組成。其中,值可以有兩個(gè),這是因?yàn)橛行┹d荷通過輪換header表征丟包信息,比如前一個(gè)包值為0x103B,而后一個(gè)則為0x183B;
mode:表征數(shù)據(jù)包的性質(zhì),相同類型的包性質(zhì)可能不同,比如header表征事例包,而mode進(jìn)一步表征該包為科學(xué)事例包或者標(biāo)定事例包。它由起始位置、結(jié)束位置和值組成。
main:是否為主包,對(duì)于工程數(shù)據(jù),一個(gè)文件對(duì)應(yīng)一種主包,但是該包可以包含多個(gè)嵌套包??茖W(xué)數(shù)據(jù)文件可能包含多種并列包,但是它們出現(xiàn)的頻次不同,頻次最高的包定義為主包,以方便高頻次調(diào)用,同類型包只能存在一種主包。
length:它由起始位置、結(jié)束位置及預(yù)設(shè)值表征,如果位置存在,則位置所在的值為包長度,否則查看預(yù)設(shè)長度,如果預(yù)設(shè)長度存在,則該類型的包長度固定,否則為可變長度包。
tail:表征結(jié)尾,由起始位置、結(jié)束位置及預(yù)設(shè)值表征,如果包為可變長度包,起始及結(jié)束位置不存在,建議硬件端設(shè)置預(yù)設(shè)值,比如0xFFFF表征包結(jié)束。
validation:特殊位置及其值檢查,一般設(shè)置兩處(每一處包括起始位置、結(jié)束位置和值)可供選擇。
crc[4]:包校驗(yàn)位置和長度,對(duì)于可變長度包,建議硬件端將位置設(shè)在tail之前。
為了方便解析,length與tail必須存在其一,length可以只有預(yù)設(shè)值。嵌套情況下,嵌套包header和mode必須存在其一,且為整字節(jié),硬件設(shè)計(jì)的嵌套不是簡(jiǎn)單地將一部分解析打包,而是與電子學(xué)讀出有關(guān),比如采集不同的電子學(xué)通道時(shí),如果數(shù)據(jù)結(jié)構(gòu)相同可以采用嵌套(即使數(shù)據(jù)結(jié)構(gòu)不同,如果數(shù)據(jù)量相同,依然可以采用嵌套)。與之對(duì)應(yīng)的是軟件定義的嵌套,軟件人員可以將一些數(shù)據(jù)結(jié)構(gòu)定義為嵌套包,此時(shí)嵌套包不需要header/mode,只給出唯一的title即可。另外主包及嵌套包如果存在tail,需要設(shè)置不同的值來區(qū)分。非定長結(jié)構(gòu)盡可能靠近包尾,并且盡量使一個(gè)包中僅有一個(gè)非定長結(jié)構(gòu)。
其它的一些重要信息:type和header/mode確定唯一的格式表,title唯一,用于尋找格式表,validation和crc用于檢查,一般而言,如果crc校驗(yàn)失敗,則丟棄該包。
比較常見的包定義title,type,length,crc,而header,mode,tail,validation都可以不存在。如果不存在,硬件端可以將其屬性值設(shè)為-1,比如mode不存在,則需要將其起始、結(jié)束位置及值均設(shè)為-1。起止位置為相對(duì)于包開始的位數(shù)或者字節(jié)數(shù)。
格式表用于記錄每種數(shù)據(jù)包的解析格式,對(duì)應(yīng)注冊(cè)表的一個(gè)記錄信息。它包括:
id:待解析變量的序列,自0開始,用戶可以通過id獲得解析量。
title:待解析變量的名稱,用戶可以通過title獲得解析量。
position:待解析變量的地址,可以存在兩個(gè)位置,每個(gè)位置有起始位置、結(jié)束位置及標(biāo)識(shí)表征,第一個(gè)位置為低位,后一個(gè)為高位。多數(shù)待解析變量只用一個(gè)位置表示,另一個(gè)位置的量可以設(shè)為-1,如果位置中僅有起始位置,而結(jié)束位置設(shè)為-1,則表示待解析量為不定長度。標(biāo)識(shí)表征位置為絕對(duì)位置還是相對(duì)位置,前者表示自包開始的位置,后者表示相對(duì)于上一解析量(id-1)的位置,對(duì)于不定長數(shù)據(jù)結(jié)構(gòu),其末尾可以占據(jù)整數(shù)字節(jié)的任意位,相對(duì)位置不固定,這樣要求非定長結(jié)構(gòu)需要占用整數(shù)字節(jié),如不夠則對(duì)剩余位進(jìn)行填補(bǔ)。
type:待解析變量類型,0表示一般變量或者連續(xù)型定長數(shù)組;1表示連續(xù)型非定長數(shù)組,所謂非定長數(shù)組是指數(shù)組長度不定,需通過解析其它信息獲?。?表示間斷型非定長數(shù)組,此數(shù)組在內(nèi)存上不連續(xù),而是相鄰數(shù)組元素間隔一定的長度。一般幾個(gè)數(shù)組交替出現(xiàn),這種結(jié)構(gòu)對(duì)應(yīng)多通道或者多單體數(shù)據(jù)采集。對(duì)于type=0,position表示整個(gè)解析區(qū)間;對(duì)于type=1,2,position只表示數(shù)組第1個(gè)元素的位置;如果type為3,表示待解析為包類型。
reference:當(dāng)type為3時(shí)使用,類型為字符串,其值為包名稱,可以通過該值獲取嵌套包解析格式。如果此處為空,表示該處可以放置多種嵌套包。
repeat:當(dāng)type=0時(shí),此值表示數(shù)組維數(shù)(數(shù)組為連續(xù)的,將position指定的區(qū)間分為repeat份),對(duì)于非數(shù)組型,此值可以設(shè)為1;當(dāng)type=2時(shí),repeat表示間隔距離,比如第1個(gè)元素的位置為[a,b],下一個(gè)元素的位置為[b+ repeat + 1,b+ repeat + 1 +b-a]。
flag:表征解析單位為字節(jié)(Byte)還是位(Bit)。
本文主要提供兩種可變長度,一種是連續(xù)性數(shù)組,另一種是間斷型數(shù)組,特別是后者,它實(shí)際可以用于多通道/多單體數(shù)據(jù)采集。為了解析方便,規(guī)定定義的非定長包只能有一種非定長結(jié)構(gòu)。非定長結(jié)構(gòu)只能占用整數(shù)字節(jié),不足整個(gè)字節(jié)則填充預(yù)設(shè)值。下一個(gè)變量相對(duì)于非定長結(jié)構(gòu)的位置以字節(jié)結(jié)束為起始。
軟件定義的嵌套包可以不按整數(shù)字節(jié)定義,但是需要有明確的引用,比如可以將非定長結(jié)構(gòu) “ABCABCABC…..” 中的 “ABC” 看為一個(gè)嵌套包,該結(jié)構(gòu)就成為一個(gè)非定長數(shù)組結(jié)構(gòu)。
接口模塊的主要任務(wù)是完成注冊(cè)表和格式表的記錄和顯示,并生成解析文件。這一接口允許硬件端隨意改變解析格式而不影響軟件端的解析。接口的實(shí)現(xiàn)采用基于網(wǎng)絡(luò)的設(shè)計(jì)和開發(fā),以網(wǎng)站的形式向硬件和軟件人員提供(或者QT[5]也是不錯(cuò)的選擇)。表1為網(wǎng)站涉及的人員及權(quán)限。網(wǎng)站涉及的層次結(jié)構(gòu)如圖2。一個(gè)衛(wèi)星項(xiàng)目主要分為平臺(tái)包和載荷包,載荷包可以分為很多類型,比如科學(xué)包和工程包,每種類別均對(duì)應(yīng)一個(gè)注冊(cè)表和若干格式表。
表1 接口模塊涉及的人員和權(quán)限Table 1 The configuration of rights management
圖2 網(wǎng)站的層次結(jié)構(gòu)Fig.2 The framework of web sites
網(wǎng)站后臺(tái)的數(shù)據(jù)庫采用MYSQL[6],一個(gè)衛(wèi)星項(xiàng)目可以對(duì)應(yīng)其中的一個(gè)數(shù)據(jù)庫,注冊(cè)表和格式表對(duì)應(yīng)其中的表格。數(shù)據(jù)庫名稱可以定義為衛(wèi)星名稱,注冊(cè)表的命名構(gòu)成為:衛(wèi)星名稱 + “_” + 載荷名稱 + “_” + 數(shù)據(jù)類別名稱,其中,數(shù)據(jù)類別包括科學(xué)數(shù)據(jù)、工程數(shù)據(jù)等。格式表命名構(gòu)成為:衛(wèi)星名稱 + “_” + 載荷名稱 + “_” + 數(shù)據(jù)類別名稱 + 包名稱。
解析模塊讀取的是配置文件,而不是數(shù)據(jù)庫,這樣做的好處:(1)將解析模塊和數(shù)據(jù)庫解綁,兩者不直接相關(guān);(2)利用配置文件進(jìn)行版本控制,載荷格式更新后,可以保存配置文件并記錄時(shí)間,這在數(shù)據(jù)追溯中比較重要。
數(shù)據(jù)解析主要針對(duì)載荷測(cè)試數(shù)據(jù)和衛(wèi)星下傳數(shù)據(jù),前者組織比較松散,主要與載荷有關(guān)。后者比較有組織性,但是涉及多個(gè)單位和部門,需要協(xié)調(diào)接口。本結(jié)重點(diǎn)介紹文件的識(shí)別、注冊(cè)表的讀取、格式表的解析及對(duì)特殊數(shù)據(jù)的解析處理。
衛(wèi)星下傳數(shù)據(jù)有表征數(shù)據(jù)類型的字段或者值,可以對(duì)應(yīng)本文中的包類型。建議下傳數(shù)據(jù)文件和測(cè)試數(shù)據(jù)文件的命名規(guī)則包含APID或者是其它表征包類型的關(guān)鍵字。如果輸入文件采用APID命名,需要建立APID與包類型、數(shù)據(jù)類別、載荷的對(duì)應(yīng)關(guān)系。當(dāng)然更簡(jiǎn)單的方式是名稱中有包類別、數(shù)據(jù)類別和載荷關(guān)鍵字。
文件解析時(shí)讀入文件名稱,解析出其包類別、數(shù)據(jù)類別及載荷等信息。確定查詢的注冊(cè)表,并得到需要解析的格式表,需要注意的是一種數(shù)據(jù)文件可能對(duì)應(yīng)多個(gè)格式表。
數(shù)據(jù)的獲取首先確定注冊(cè)表查詢結(jié)果中的主包,如果沒有主包,則各個(gè)查詢結(jié)果為并列結(jié)構(gòu)。所謂并列結(jié)構(gòu),是指查詢的各個(gè)格式表都可能出現(xiàn),需要利用注冊(cè)表中的關(guān)鍵字進(jìn)行匹配,匹配成功者為這段數(shù)據(jù)需要的格式表。如果存在主包,首先進(jìn)行關(guān)鍵字匹配,匹配成功則調(diào)用該包的格式表,不成功則需要對(duì)其它查詢結(jié)果進(jìn)行匹配。確定格式包后,可以完整地獲取包信息,對(duì)于定長則取length關(guān)鍵字指定的位/字節(jié)/字?jǐn)?shù)目,對(duì)于非定長則搜尋數(shù)據(jù)的tail關(guān)鍵字。
關(guān)鍵字匹配中需要考慮header,mode和validation等,對(duì)于crc校驗(yàn)不通過者可以將該包剔除。獲取解析結(jié)果需要明確非定長結(jié)構(gòu)的長度,即數(shù)組維數(shù),一般情況下該包的數(shù)據(jù)長度已知,則可以計(jì)算非定長結(jié)構(gòu)維數(shù),更一般的情況是非定長結(jié)構(gòu)與某些變量關(guān)聯(lián),即某變量的取值或者其位數(shù)表征非定長結(jié)構(gòu)的長度,如果用戶已知其對(duì)應(yīng)關(guān)系,則會(huì)非常簡(jiǎn)單地對(duì)非定長數(shù)據(jù)進(jìn)行處理。
本系統(tǒng)的驅(qū)動(dòng)是文件驅(qū)動(dòng)型,一旦檢測(cè)到新文件傳輸完成,系統(tǒng)自動(dòng)進(jìn)行文件的解析工作,但是需要用戶預(yù)先定義輸出數(shù)據(jù)的結(jié)構(gòu)、數(shù)據(jù)獲取的接口及輸出格式。系統(tǒng)不提供 “文件-文件” 式的解析方式,這是因?yàn)檫@些解析量不需要全部記錄,而只記錄用戶感興趣的。文件中可能有多種數(shù)據(jù)解析格式和多種嵌套方式,不容易自動(dòng)完成輸出格式的編排。有時(shí)一個(gè)原始文件還需要產(chǎn)生多個(gè)其它文件,這樣做彌補(bǔ)一些設(shè)計(jì)缺陷,對(duì)于變量之間的關(guān)聯(lián),用戶容易得到這些關(guān)系。數(shù)據(jù)獲取主要是用戶通過格式表中的title或者id得到解析后的變量,輸出是FITS[7]格式。需要注意的是,一個(gè)解析文件可能生成多個(gè)輸出文件。
數(shù)據(jù)解析系統(tǒng)是衛(wèi)星數(shù)據(jù)產(chǎn)品生產(chǎn)中最先進(jìn)行的一環(huán),不同的衛(wèi)星及載荷盡管在數(shù)據(jù)設(shè)計(jì)上不同,但是都遵循數(shù)據(jù)的可解析性,這就是本系統(tǒng)的依據(jù)。數(shù)據(jù)解析在地面測(cè)試中同樣重要,而且隨著載荷的推進(jìn),解析格式也發(fā)生變化,本系統(tǒng)可以適應(yīng)這些變化。本系統(tǒng)解析結(jié)果的正確性是保障獲得物理成果的基礎(chǔ),文[1]提到的通用數(shù)據(jù)解析方法實(shí)際上是本系統(tǒng)解析模塊的一個(gè)簡(jiǎn)化版本,它成功應(yīng)用于POLAR和HXMT中能望遠(yuǎn)鏡(Medium Energy X-ray Telescope, ME)[8]地面數(shù)據(jù)解析中。本系統(tǒng)采用通用的解析方法,避免了軟件人員直接處理大量的數(shù)據(jù)文件,這也是保障獲得物理成果的一個(gè)重要因素。
衛(wèi)星數(shù)據(jù)按包解析,本系統(tǒng)不涉及解析后的數(shù)據(jù)處理和存儲(chǔ),而是需要用戶自行定義數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)和格式,用戶通過本系統(tǒng)的接口獲取解析后的數(shù)據(jù)。當(dāng)這些條件具備時(shí),本系統(tǒng)即可自動(dòng)運(yùn)行并與后續(xù)的軟件共同協(xié)作生成數(shù)據(jù)產(chǎn)品。