洪偉佳
(中國民用航空汕頭空中交通管理站,廣東汕頭 515000)
隨著航班量的逐年增加,A/C模式雷達(dá)數(shù)據(jù)已經(jīng)無法完全滿足空中交通管制的需求,特別在SSR分配的處理上,SSR的不足已經(jīng)成為空管航班計(jì)劃相關(guān)無法當(dāng)即解決的問題,航班量超過1 000架次的空管單位,A/C模式的監(jiān)視能力已經(jīng)接近極限。近年空管系統(tǒng)新建設(shè)的雷達(dá)都具備S模式輸出,其具有基本監(jiān)視、增強(qiáng)監(jiān)視和數(shù)據(jù)鏈等多種功能,攜帶的24位地址碼更是成為航班計(jì)劃相關(guān)的新生的、有效的重要參數(shù)。但是空管系統(tǒng)在S模式雷達(dá)的應(yīng)用上還不夠成熟,相關(guān)地區(qū)分局站的S模式應(yīng)用驗(yàn)證技術(shù)手段還是有限,特別對(duì)于S模式雷達(dá)的數(shù)據(jù)測(cè)試幾乎為0,只能直接引入空管自動(dòng)化測(cè)試,存在著一定的運(yùn)行風(fēng)險(xiǎn)。本文從實(shí)際出發(fā),設(shè)計(jì)一種S模式雷達(dá)數(shù)據(jù)解析系統(tǒng),可以為S模式雷達(dá)的數(shù)據(jù)本地測(cè)試提供參考。
目前空管系統(tǒng)部署的S模式雷達(dá)基本數(shù)據(jù)格式是基于ASTERIX格式,能夠輸出CAT001、CAT002、CAT008、CAT048和CAT034數(shù)據(jù)格式。其中,CAT048和CAT034數(shù)據(jù)是S模式應(yīng)用的2個(gè)數(shù)據(jù)格式,前者用于航跡目標(biāo)信息描述,后者用于雷達(dá)服務(wù)信息描述。ASTERIX是歐控組織定義的一種雷達(dá)數(shù)據(jù)交換格式,廣泛應(yīng)用于各國生產(chǎn)的雷達(dá)和ADS-B地面站,是一種應(yīng)用層協(xié)議,用于定義數(shù)據(jù)和組織,數(shù)據(jù)以種類(Category)進(jìn)行分類,并引入用戶應(yīng)用相關(guān)表(User Application profile)字段用于定義輸出的具體數(shù)據(jù)項(xiàng)。實(shí)際工作中的CAT034傳輸雷達(dá)的服務(wù)類信息,在天線的旋轉(zhuǎn)過程中跨越正北雷達(dá)會(huì)發(fā)送一個(gè)正北識(shí)別信號(hào),數(shù)據(jù)傳輸時(shí)該信號(hào)的優(yōu)先級(jí)最高。CAT034是系統(tǒng)設(shè)計(jì)需要考慮的一個(gè)重要信息,可以提供扇區(qū)、天線旋轉(zhuǎn)周期、系統(tǒng)配置狀態(tài)和報(bào)文統(tǒng)計(jì)等信息。CAT048則是系統(tǒng)探測(cè)的目標(biāo)信息,在輸出目標(biāo)位置信息時(shí),包含了點(diǎn)跡和航跡在內(nèi)的測(cè)量位置,主要是通過以本地雷達(dá)站自身的坐標(biāo)為坐標(biāo)原點(diǎn),建立極坐標(biāo)系的極坐標(biāo)位置數(shù)據(jù)。另外,CAT048還可以傳輸包括地址碼、AC標(biāo)識(shí)、航跡號(hào)、航跡狀態(tài)、航跡質(zhì)量和高度等豐富的信息。相對(duì)而言,S模式的傳輸數(shù)據(jù)量更大,數(shù)據(jù)更豐富,是未來空管監(jiān)視應(yīng)用方面的重要手段[1-3]。
為了提高開發(fā)效率,系統(tǒng)采用民航汕頭空管站本地的空管自動(dòng)化系統(tǒng)所配備的多通道協(xié)議轉(zhuǎn)換服務(wù)器,可以將雷達(dá)站送來的S模式雷達(dá)數(shù)據(jù)由HDLC同步串口信號(hào)轉(zhuǎn)換為UDP網(wǎng)絡(luò)信號(hào)。系統(tǒng)設(shè)計(jì)可以直接處理網(wǎng)絡(luò)數(shù)據(jù)即可,實(shí)現(xiàn)主要分為數(shù)據(jù)接收模塊、數(shù)據(jù)處理模塊和航跡界面顯示模塊,軟件主要通過C++和C#設(shè)計(jì)。數(shù)據(jù)的接收主要處理UDP格式的雷達(dá)數(shù)據(jù),并在結(jié)果上增加時(shí)間戳,用于后續(xù)界面上的回放雷達(dá)數(shù)據(jù)操作;數(shù)據(jù)的處理則主要針對(duì)S模式的特點(diǎn)進(jìn)行基于ASTERIX格式的解析,按照點(diǎn)跡航跡信息進(jìn)行逐項(xiàng)解析并統(tǒng)計(jì);航跡界面顯示則將解析完畢的數(shù)據(jù)進(jìn)行圖形化處理和顯示,此處涉及坐標(biāo)轉(zhuǎn)換、投影處理及地圖處理。
為了設(shè)計(jì)的模塊化,系統(tǒng)定義了C++的相關(guān)數(shù)據(jù)結(jié)構(gòu),包括對(duì)ASTERIX CAT048和CAT034的數(shù)據(jù)結(jié)構(gòu),通過系統(tǒng)必須解析的數(shù)據(jù)項(xiàng)定義,將數(shù)據(jù)屬性結(jié)構(gòu)化,例如CAT048的結(jié)構(gòu)部分定義代碼如下:
struct FIELD_I048130
{
BOLL f_SRL,f_SRR,f_SAM,f_PRL,f_PAM,f_RPD,f_APD;
BYTE SRL,SRR,SAM,PRL,PAM,RPD,APD
}I048130;
char target_address[4];
char target_Iden[9];
struct FIELD_I048250
{
short REP;
char DATA[36];
BYTE BDS1[5],BDS2[5];
}I048250;
而對(duì)于每次接收到的雷達(dá)目標(biāo)數(shù)據(jù),系統(tǒng)將其加入到航跡結(jié)構(gòu)列表中,用于后續(xù)數(shù)據(jù)統(tǒng)計(jì)和界面分析。為了提高數(shù)據(jù)封裝性,系統(tǒng)采用C#定義了目標(biāo)類部分代碼如下:
class TAFGET
{
int Num;//航跡號(hào)
char ModA[6];//A 碼
float ModC;//C碼
float Speed;//速度
float RangeN//極坐標(biāo)斜距
float Azimuth;//方位角
int EOB;//扇區(qū)
bool EMG;//緊急標(biāo)志位TARCK_HISTORY_LIST target_list;//航跡歷史列表TIME time;//目標(biāo)數(shù)據(jù)時(shí)間戳
typedef vector<RADAR_TRACK>RADAR_TRACK_VECTOR;//航跡向量表
...
}
CAT034數(shù)據(jù)的處理過程類似,此處不贅述。在地圖的處理上,此處可以采用空管自動(dòng)化系統(tǒng)配置的地圖文件,實(shí)際工作中地圖被定義為一個(gè)可讀的.txt文本文件。以民航汕頭空管站萊斯自動(dòng)化系統(tǒng)的地圖顯示為例,其定義了相應(yīng)的報(bào)告點(diǎn)、機(jī)場(chǎng)、航線和航路等基礎(chǔ)數(shù)據(jù),并以模塊化字段命名,畫圖參數(shù)為WGS-84的經(jīng)緯度坐標(biāo)值。系統(tǒng)只需要識(shí)別各個(gè)地圖的數(shù)據(jù)塊即可,開發(fā)較為便捷。
系統(tǒng)為了提高魯棒性,在數(shù)據(jù)接收模塊提供了數(shù)據(jù)配置文件供用戶對(duì)基礎(chǔ)通信數(shù)據(jù)進(jìn)行配置。在安裝路徑下,系統(tǒng)可以配置雷達(dá)的名稱、經(jīng)緯度、高程、天線周期、本地IP地址和監(jiān)聽的端口號(hào)等基礎(chǔ)數(shù)據(jù)。由于UDP是一種無連接的協(xié)議,在C#編程中,系統(tǒng)可以創(chuàng)建一個(gè)Socket對(duì)象[4],并將創(chuàng)建的套接字對(duì)象與本地IPEndPoint進(jìn)行綁定。如此而來,創(chuàng)建的套接字就能夠在IPEndPoint上接收流入的UDP數(shù)據(jù)包。另一方面,使用UDP進(jìn)行通信時(shí),并不需要TCP連接,UDP應(yīng)用不是嚴(yán)格意義上的真正的服務(wù)器和客戶機(jī),因此系統(tǒng)部署的主機(jī)與協(xié)議轉(zhuǎn)換服務(wù)器沒有主與次的關(guān)系,所以UDP不能使用標(biāo)準(zhǔn)的Receive()套接字方法進(jìn)行數(shù)據(jù)接收,而是使用ReceiveFrom()方法,與其他普通的方法不一樣。ReceiveFrom()方法主要使用ref修飾,并將參數(shù)傳遞給一個(gè)EndPoint對(duì)象。對(duì)于接收流入的UDP服務(wù)器程序來說,系統(tǒng)必須將程序與本地系統(tǒng)中指定的UDP端口進(jìn)行綁定,這個(gè)端口和協(xié)議轉(zhuǎn)換器中配置的雷達(dá)對(duì)應(yīng)端口一致,完成對(duì)協(xié)議轉(zhuǎn)換器轉(zhuǎn)換后的某一路S模式雷達(dá)的數(shù)據(jù)處理。這就可以通過使用合適的本地IP地址創(chuàng)建一個(gè)IPEndPoint對(duì)象,以及當(dāng)前雷達(dá)在協(xié)議轉(zhuǎn)換器中配置的UDP端口號(hào)。系統(tǒng)實(shí)現(xiàn)流程圖如圖1所示。
數(shù)據(jù)處理的主要流程為:首先根據(jù)用戶配置文件的讀取結(jié)果傳入?yún)?shù)(包括數(shù)據(jù)包指針、長(zhǎng)度、雷達(dá)名稱和通道號(hào));其次對(duì)傳入的時(shí)間戳進(jìn)行處理并檢測(cè)CAT字段的值和數(shù)據(jù)包的長(zhǎng)度,如若判斷的CAT=1或者CAT=48,系統(tǒng)則進(jìn)行下一步的操作,通過字符串截取方法得出字段描述域的內(nèi)容;再之,根據(jù)字段描述域內(nèi)容逐項(xiàng)解析CAT001數(shù)據(jù)和CAT0048數(shù)據(jù),最終將獲取到的目標(biāo)航跡信息插入到目標(biāo)列表。CAT002和CAT034的處理與此類似,其主要用于數(shù)據(jù)統(tǒng)計(jì)和分析。CAT034可以輸出SAC和SIC,并解析出當(dāng)日時(shí)間、扇區(qū)編號(hào)、天線旋轉(zhuǎn)周期等。在目標(biāo)的解析處理上系統(tǒng)可以通過正則表達(dá)式和C#的string類對(duì)數(shù)據(jù)接收處理后的字符串進(jìn)行處理[5]。在模塊處理的最后步驟,系統(tǒng)將基于CAT048和CAT034格式實(shí)現(xiàn)各個(gè)數(shù)據(jù)項(xiàng)的解析并以類對(duì)象屬性的形式填入目標(biāo)列表中。當(dāng)然,接收到的ASTERIX數(shù)據(jù)是16進(jìn)制字符串?dāng)?shù)據(jù),這個(gè)過程需要按照各個(gè)數(shù)據(jù)項(xiàng)進(jìn)行字符串的轉(zhuǎn)換,實(shí)現(xiàn)的部分代碼如下:
//計(jì)算目標(biāo)地址項(xiàng)對(duì)應(yīng)的值
int TargetAddress(vector<BYTE> lhs)
{
int rhs;
rhs=((unsigned int)lhs[0]<< 16) + ((unsigned int) lhs[1]<< 8) + (unsigned int) lhs[2];
cout<<"ADDR:"<< std::hex << rhs << endl<<endl;//以16進(jìn)制輸出rhs
return 0;
}
//計(jì)算速度精確度項(xiàng)對(duì)應(yīng)的值
int VelocityAccuracy(vector<BYTE> lhs)
{
圖1 UDP軟件設(shè)計(jì)過程
int rhs;
rhs=lhs[0];
cout<<"VA:"<< rhs<< endl<<endl;
return 0;
}
在航跡界面處理上,為了與當(dāng)前空管自動(dòng)化處理一致,系統(tǒng)采用C#的Timer控件,設(shè)置周期為4 s。在Timer控件觸發(fā)函數(shù)中對(duì)圖形進(jìn)行繪制[6-8]。具體的繪制需要獲取繪圖工作區(qū)并設(shè)置畫刷的顏色屬性以及相應(yīng)的內(nèi)存CDC。對(duì)于背景的處理,此處采用本地萊斯自動(dòng)化系統(tǒng)的SDD_map地圖文件,其定義了相應(yīng)的地圖名稱和對(duì)應(yīng)的地圖顏色、區(qū)域和畫圖形狀,所有參數(shù)都是統(tǒng)一的WGS-84經(jīng)緯度坐標(biāo)。因此界面可以將WGS-84的地圖參數(shù)轉(zhuǎn)換為極坐標(biāo),C#設(shè)計(jì)部分代碼如下:
var a=6378245.0;//a:衛(wèi)星橢球坐標(biāo)投影到平面地圖坐標(biāo)系的投影因子。
var ee=0.00669342162296594323;//ee:橢球的偏心率。var dLat=this.transformLat(t.Tlng-105.0,t.Tlat-35.0);var dLng=this.transformLng(t.Tlng-105.0,t.Tlat-35.0);var radLat=t.Tlat/180.0*PI;var magic=Math.Sin(radLat);magic=1-ee*magic*magic;
var sqrtMagic=Math.Sqrt(magic) ;
return new TempGps() {Tlat= (dLat*180.0) /((a* (1-ee)) /(magic*sqrtMagic) *PI),Tlng= (dLng*180.0) /(a/sqrtMagic*Math.Cos(radLat) *PI) };
另一方面,系統(tǒng)對(duì)于目標(biāo)的處理只需要遍歷目標(biāo)列表,將航跡目標(biāo)對(duì)象以24位地址碼為唯一屬性讀出即可。此過程,涉及航跡相關(guān)的判斷。在軟件的航跡相關(guān)上,算法定義如上個(gè)周期的航跡位置和當(dāng)前的航跡位置距離小于10 km,并且24位地址碼一致,則判別為同一目標(biāo),這種方法可以大概率減少S模式雷達(dá)由于環(huán)境或自身原因的影響,以及因目標(biāo)瞬間丟失而造成的目標(biāo)分裂問題。再之,系統(tǒng)將其極坐標(biāo)屬性作為參數(shù)傳入繪圖函數(shù)實(shí)現(xiàn)航跡在繪圖區(qū)域的繪制。
系統(tǒng)提供數(shù)據(jù)查詢和回放功能,軟件實(shí)現(xiàn)界面如圖2所示。數(shù)據(jù)查詢只需要在C#中對(duì)目標(biāo)列表的具體對(duì)象屬性進(jìn)行查找即可。數(shù)據(jù)回放則需要根據(jù)數(shù)據(jù)接收模塊的時(shí)間戳和接收的16進(jìn)制數(shù)據(jù)轉(zhuǎn)換為字符串顯示,并控制數(shù)據(jù)包內(nèi)部發(fā)送的間隔時(shí)間。軟件實(shí)現(xiàn)上可以首先定義回放的數(shù)據(jù)緩沖區(qū),設(shè)置需要回放的端口號(hào)(不同于接入的雷達(dá)UDP端口號(hào)),按照數(shù)據(jù)接收模塊存儲(chǔ)的數(shù)據(jù)記錄文本文件逐行讀入數(shù)據(jù)并存入內(nèi)存向量表中。程序設(shè)置專門的進(jìn)程進(jìn)行數(shù)據(jù)的迭代訪問并當(dāng)即生成二進(jìn)制數(shù)據(jù)消息,發(fā)送回接收模塊。數(shù)據(jù)接收模塊會(huì)以新接入雷達(dá)數(shù)據(jù)方式,按照正常的雷達(dá)數(shù)據(jù)解析該消息數(shù)據(jù),實(shí)現(xiàn)界面的數(shù)據(jù)回放。
圖2 軟件界面圖
本文從實(shí)際出發(fā),探討了S模式的應(yīng)用數(shù)據(jù)格式,并根據(jù)該格式進(jìn)行了軟件數(shù)據(jù)解析。軟件主要通過C++和C#來實(shí)現(xiàn)。系統(tǒng)通過將來自協(xié)議轉(zhuǎn)換器的UDP格式S模式雷達(dá)數(shù)據(jù)接收處理后,基于ASTERIX CAT048和CAT034的格式實(shí)現(xiàn)逐個(gè)數(shù)據(jù)項(xiàng)處理,最終實(shí)現(xiàn)軟件的圖形化界面顯示,可以為S模式雷達(dá)的數(shù)據(jù)測(cè)試提供技術(shù)手段。