劉云豐,廖盈庭,劉書博
基于Python的Asterix Cat 021數(shù)據(jù)格式解析分析與實現(xiàn)
劉云豐1,廖盈庭1,劉書博2
(1.中國民用航空飛行學(xué)院,四川 廣漢 618307;2.中國民用航空中南地區(qū)空中交通管理局湖南分局,湖南 長沙 410137)
ADS-B(廣播式自動相關(guān)監(jiān)視)是目前空管系統(tǒng)中應(yīng)用較廣泛、技術(shù)成熟的空中交通監(jiān)視手段。介紹了Asterix Category 021協(xié)議各數(shù)據(jù)項組成、編碼的內(nèi)容以及在空管自動相關(guān)監(jiān)視中的應(yīng)用,并介紹了Python對該協(xié)議的實現(xiàn)方法。
ADS-B;Asterix Category 021協(xié)議;Python數(shù)據(jù)項
隨著國內(nèi)航空運(yùn)輸快速的發(fā)展,航空運(yùn)輸?shù)慕煌芏?、?fù)雜度也隨之上升,實現(xiàn)空中交通管制的安全、高效運(yùn)行,需要一種先進(jìn)且安全可靠的監(jiān)視手段。ADS-B技術(shù)是新航行系統(tǒng)中非常重要的通信和監(jiān)視技術(shù),基于衛(wèi)星定位和地空數(shù)據(jù)通信技術(shù)[1]。
相比于傳統(tǒng)的監(jiān)視手段,ADS-B克服了傳統(tǒng)系統(tǒng)遠(yuǎn)程截獲能力差、原始信息格式紛雜、信息處理成本高且不易實現(xiàn)指定航跡的篩選、難以實現(xiàn)信息共享的缺點(diǎn),極大地推動了空中交通管制的一體化建設(shè)。本文對Asterix Category 021協(xié)議各數(shù)據(jù)項組成、編碼的內(nèi)容進(jìn)行了分析,并利用目前較為流行的編程語言Python對其進(jìn)行實現(xiàn),以便于對ADS-B數(shù)據(jù)的軟件的開發(fā)和應(yīng)用提供一定的參考。
Asterix Category 021是歐洲航空安全組織一系列標(biāo)準(zhǔn)文件的一部分,該協(xié)議主要描敘了ADS-B(廣播式自動相關(guān)監(jiān)視)報文傳輸?shù)幕緲?gòu)架,定義了協(xié)議中各數(shù)據(jù)項的格式以及與其他標(biāo)準(zhǔn)文件之間的關(guān)系。
Asterix Category 021數(shù)據(jù)格式文件包含數(shù)據(jù)項目錄(Catalogue of Data Items)、數(shù)據(jù)塊(Data Block)、數(shù)據(jù)類型(Data Category)、數(shù)據(jù)字段(Data Field)、數(shù)據(jù)項(Data Item)、記錄(Record)、用戶應(yīng)用程序框架(User Application Profile,UAP)[2-3]。
其中,數(shù)據(jù)項是數(shù)據(jù)類型中最小單元,而用戶應(yīng)用程序框架(UAP)是一種數(shù)據(jù)分配規(guī)范,根據(jù)UAP將數(shù)據(jù)項分配到數(shù)據(jù)字段。UAP中所用到的每個數(shù)據(jù)項都有相應(yīng)的字段參考編號,數(shù)據(jù)項的出現(xiàn)以UAP作為判斷條件。
數(shù)據(jù)項的構(gòu)成信息如下例所示[3]。數(shù)據(jù)項I021/145(飛行高度)結(jié)構(gòu)如圖1所示,數(shù)據(jù)項I021/145為飛行高度的數(shù)據(jù)結(jié)構(gòu),飛行高度由2個八位的二進(jìn)制數(shù)據(jù)組成。第1個位為LSB,表示為1/4個飛行高度層,數(shù)據(jù)項2~8位表示飛行高度,將數(shù)據(jù)項2~8位二進(jìn)制數(shù)據(jù)轉(zhuǎn)換十進(jìn)制,乘以LSB就得到了所需要的飛行高度。Asterix Category 021的其他數(shù)據(jù)項也可用相同的方式類推。
用戶應(yīng)用程序框架(UAP)是Asterix Category 021協(xié)議中制定的,用于應(yīng)用程序系統(tǒng)的報文設(shè)計的數(shù)據(jù)項組成框架,包括數(shù)據(jù)項順序、編碼規(guī)則等。
圖1 數(shù)據(jù)項I021/145(飛行高度)結(jié)構(gòu)
不同版本的協(xié)議,用戶應(yīng)用程序框架(UAP)中包含的數(shù)據(jù)項也有所差別,根據(jù)ADS-B適用的UAP,可以確定數(shù)據(jù)項在報文中的使用規(guī)則。某版本Asterix Category 021協(xié)議的UAP部分信息如表1所示,UAP包括FRN、數(shù)據(jù)項編號、數(shù)據(jù)項信息、數(shù)據(jù)項長度四個部分。其中,F(xiàn)RN列中FX為域擴(kuò)展指示符,其余部分則分別表示對應(yīng)的數(shù)據(jù)項。
表1中最后一列表示各個數(shù)據(jù)項的長度,在對數(shù)據(jù)項解碼的過程中,需要靈活地根據(jù)各個數(shù)據(jù)項的長度分配數(shù)據(jù)進(jìn)行解碼。
表1 某版本Asterix Category 021協(xié)議的UAP部分信息
FRN數(shù)據(jù)項信息長度 1I021/010數(shù)據(jù)源識別2 2I021/040目標(biāo)報告描述符1+ 3I021/030日時間3 4I021/130在WGS-84坐標(biāo)中的位置6 5I021/080目標(biāo)地址3 6I021/140幾何高度2 7I021/090品質(zhì)因數(shù)2 FX—字段擴(kuò)展標(biāo)識—
Python是一種計算機(jī)程序設(shè)計語言,是一種面向?qū)ο蟮膭討B(tài)類型語言,最初被設(shè)計用于編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越來越多地被用于獨(dú)立的、大型項目的開發(fā)[5]。
Asterix Category 021協(xié)議格式如表2所示,CAT為數(shù)據(jù)類型,且CAT=021,占一個字節(jié),表示數(shù)據(jù)為ADS-B;LEN為長度標(biāo)識,表示整個數(shù)據(jù)塊的總長度;FSPEC為字段說明,其后為一個數(shù)據(jù)項。ADS-B報文由數(shù)據(jù)項組成,數(shù)據(jù)項的順序由UAP確定,并按規(guī)定的順序組合在一起。當(dāng)報文中含有某個數(shù)據(jù)項時,該數(shù)據(jù)項相應(yīng)的FSPEC設(shè)置為1。
表2 Asterix Category 021協(xié)議格式
CAT=021LENFSPEC第一個記錄的數(shù)據(jù)項……FSPEC最后一個記錄的數(shù)據(jù)項
根據(jù)表1,可將ADS-B的數(shù)據(jù)解碼可簡單的分成4個部分。第一部分為對數(shù)據(jù)類型和長度表示進(jìn)行處理,核心代碼如下:
cat_and_len (_):
cat = int(_[0], 2) #數(shù)據(jù)類型
len = int(_[1:], 2) #數(shù)據(jù)長度
cat, len
傳入3個8位二進(jìn)制數(shù)據(jù),將第一個8位二進(jìn)制數(shù)據(jù)換算成10進(jìn)制,對應(yīng)的值為CAT=021,將第二、三個8位二進(jìn)制數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制,則為數(shù)據(jù)長度的值。
第二個部分為解析標(biāo)識符所占字節(jié),核心代碼如下:
#判斷是否是符號字節(jié)
is_more_fspec(_):
int(_[7]) == 0
#取出標(biāo)識符字節(jié)段
is_fspecbytes():
count = 0
fspecbytes = list()
is_more_fspec([count]):
count += 1
irange(0, count):
fspecbytes.append([i])
fspecbytes
該部分is_more_fspec函數(shù)為判斷FSPEC字節(jié)FX域擴(kuò)展部分的值,當(dāng)FX=1時,F(xiàn)SPEC向后擴(kuò)展一個字節(jié)。is_fspecbyte函數(shù)與is_more_fspec函數(shù)嵌套取出對應(yīng)的FSPEC字節(jié)段,根據(jù)對應(yīng)的UAP表格可確定發(fā)送的數(shù)據(jù)項。
第三部分為根據(jù)對應(yīng)的FSPEC字節(jié)段對數(shù)據(jù)段進(jìn)行解析,以表1所對應(yīng)的UAP表格為例,假設(shè)該部分的FSPEC字節(jié)段為“00010000”,F(xiàn)SPEC字節(jié)的每一位與UAP表格中的第一列FRN一一對應(yīng),0表示不發(fā)送此項,1表示發(fā)送,由此可以得到,域擴(kuò)展指示符為0,故不向后擴(kuò)展,發(fā)送的數(shù)據(jù)項為I021/130(WGS-84坐標(biāo)中的位置),該數(shù)據(jù)項的結(jié)構(gòu)如圖2所示[3]。
代碼如下:
positionWGS_84(bytes):
lat_bytes =[0] +[1] +[2]
lon_bytes =[3] +[4] +[5]
latitude = int(lat_bytes, 2) * (2.145767E-5)
longitude = int(lon_bytes, 2) * (2.145767E-5)
latitude, longitude
圖2 數(shù)據(jù)項I021/130數(shù)據(jù)結(jié)構(gòu)(LSB=2.14 576 7×10-5度)
由圖2可知,數(shù)據(jù)項I021/130共有六個字節(jié),前三個字節(jié)為緯度信息,后三字節(jié)為經(jīng)度信息,根據(jù)1.2節(jié)中的方法,可編程解析得到該項的經(jīng)緯度信息。
ADS-B監(jiān)視相比于傳統(tǒng)的航行監(jiān)視系統(tǒng)有著一系列優(yōu)勢,克服了一系列舊航行系統(tǒng)的缺點(diǎn),極大地推動了空中交通管制的一體化建設(shè)。通過以上對Asterix Category 021協(xié)議內(nèi)容的分析,可以很好地了解Asterix Category 021協(xié)議的基本架構(gòu)及其中各數(shù)據(jù)項的基本內(nèi)容;通過Python對Asterix Category 021協(xié)議的解析,可以更深入地了解該協(xié)議的架構(gòu),同時也對該協(xié)議的編程實現(xiàn)具有一定的參考價值。
[1]魏光興.通信導(dǎo)航監(jiān)視設(shè)施[M].成都:西南交通大學(xué)出版社,2016.
[2]楊珊,時宏偉.Asterix Category 021協(xié)議的應(yīng)用與分析[J].電訊技術(shù),2011,51(10):132-136.
[3]DOUKAS D.SUR.ET1.ST05.2000-STD-12-01 Eurocontrol standard document for surveillance data exchange-part 12:Category 021 ADS-B Reports[S].出版社不詳,2011.
[4]ALI B S,OCHIENG W Y,ZAINUDIN R.An analysis and model for automatic dependent surveillance broadcast (ADS-B)continuity[J].Original Artical,2017,21(4):1841-1854.
[5]PILGRIM M.Dive Into Python 3[M].出版社不詳,2009.
[6]黃晉.廣播式自動相關(guān)監(jiān)視(ADS-B)在中國民航飛行學(xué)院的應(yīng)用研究[D].成都:西南交通大學(xué),2008.
TP393.04
A
10.15913/j.cnki.kjycx.2019.14.018
2095-6835(2019)14-0046-02
〔編輯:王霞〕