周奕帆
(民航汕頭空管站,廣東汕頭 515000)
萊斯空管自動化系統(tǒng)是當(dāng)前民航空管主流的空管自動化系統(tǒng),是空中交通管制運(yùn)行的關(guān)鍵設(shè)備,其運(yùn)行的情況和數(shù)據(jù)處理的過程是當(dāng)前空管技術(shù)保障需要重點(diǎn)關(guān)注的關(guān)鍵點(diǎn)[1]。雖然,廠家在設(shè)計(jì)過程考慮了數(shù)據(jù)處理過程的相關(guān)記錄功能,提供了大量有效的文本日志,但是文本化的日志依舊是現(xiàn)場排故的一個難點(diǎn),主要體現(xiàn)在數(shù)據(jù)冗余度高、版本關(guān)鍵詞不統(tǒng)一、無法形象化體現(xiàn)等特點(diǎn)。本文提出一種日志圖形化顯示的概念,并在實(shí)際技術(shù)改造中實(shí)踐,完成對萊斯自動化系統(tǒng)的日志圖形化顯示設(shè)計(jì),可以提高萊斯空管自動化系統(tǒng)日志排故的效率。
為實(shí)現(xiàn)系統(tǒng)的圖形化顯示并加強(qiáng)與現(xiàn)有萊斯自動化系統(tǒng)的對比分析,系統(tǒng)首先需要建立自身的繪制坐標(biāo)系并完成萊斯地圖文件的處理顯示。另一方面,系統(tǒng)需要根據(jù)萊斯空管自動化系統(tǒng)的日志類型、格式和關(guān)鍵詞完成對文本文件的相關(guān)處理并根據(jù)處理的結(jié)果繪制相應(yīng)的計(jì)劃航跡,顯示相應(yīng)的數(shù)據(jù)處理狀態(tài)。因此,設(shè)計(jì)主要分為地圖顯示模塊和數(shù)據(jù)狀態(tài)顯示模塊。
萊斯空管自動化系統(tǒng)的地圖主要由SDD_map.txt 配置顯示,其包括航路、導(dǎo)航臺、報(bào)告點(diǎn)、機(jī)場、本場的管制區(qū)與外擴(kuò)管制區(qū)、中國地圖在內(nèi)的各類地圖,可以滿足現(xiàn)場管制的各類地圖標(biāo)注和顯示需要。因此,軟件可以對SDD_map.txt進(jìn)行加載處理顯示,完成系統(tǒng)顯示基礎(chǔ)配置。SDD_map.txt是一個以“標(biāo)識符+經(jīng)緯度+繪制顯示控制”為格式的文本文件,標(biāo)識符主要用于定義后續(xù)坐標(biāo)繪制的方式(直線、弧線、文本以及對應(yīng)的顏色等),例如APP_BORDER 地圖在文件中的內(nèi)容如圖1 所示。地圖顯示模塊的功能是將SDD_map.txt地圖文件進(jìn)行解析并初始化數(shù)據(jù),通過C#的圖形繪制函數(shù)繪制成背景地圖顯示在主體界面上,完成與現(xiàn)場萊斯空管自動化系統(tǒng)的同步背景配置。
圖1 地圖文本內(nèi)容
SDD_map.txt地圖文件里面包含多種類型的地圖以及眾多的經(jīng)緯度信息,雖然信息量大,但可以歸結(jié)為以下幾類:GV表示直線,GST 表示文本,GSS 表示標(biāo)符,GA 表示圓弧,跟隨相應(yīng)的顏色標(biāo)識變量和對應(yīng)位置經(jīng)緯度。例如對于內(nèi)容“GV69 24,10,24N 116,05,24E 23,35,50N 116,24,38E 1 1”,“GV”表示畫直線,“69”表示顏色區(qū)分,“24,10,24N 116,05,24E 23,35,50N 116,24,38E”表示直線兩個端點(diǎn)的經(jīng)緯度。根據(jù)標(biāo)識,系統(tǒng)可以對SDD_map.txt按行讀取數(shù)據(jù),主要采用正則表達(dá)式獲取經(jīng)緯度參數(shù)[2],并將所屬經(jīng)緯度參數(shù)進(jìn)行屏幕坐標(biāo)轉(zhuǎn)換,為保持與現(xiàn)場配置一致,控制字段也采用統(tǒng)一的控制設(shè)置。
將經(jīng)緯度轉(zhuǎn)換成屏幕坐標(biāo)是系統(tǒng)進(jìn)行地圖繪制與數(shù)據(jù)狀態(tài)圖形化顯示的基礎(chǔ)。在同一經(jīng)度上,緯度每相差1h,對應(yīng)的實(shí)際距離約為111 km,在同一緯度上,經(jīng)度每相差1h,對應(yīng)的實(shí)際距離約為111× cos(緯度)km。本系統(tǒng)以本機(jī)場中心點(diǎn)作為系統(tǒng)中心點(diǎn)同時也作為屏幕的中心點(diǎn),并將本場中心點(diǎn)的經(jīng)緯度用double 類型表示,待轉(zhuǎn)換點(diǎn)經(jīng)緯度與系統(tǒng)中心點(diǎn)經(jīng)緯度的差值乘以各自的距離單位和縮放比例再加上屏幕中心點(diǎn)坐標(biāo),得到轉(zhuǎn)換后的屏幕坐標(biāo)。
地圖顯示模塊的流程圖如圖2 所示,在該模塊中,涉及到地圖拖動和地圖縮放的操作。當(dāng)鼠標(biāo)控制地圖的拖動時,系統(tǒng)中心點(diǎn)坐標(biāo)會產(chǎn)生改變,使用全局變量Point map_mouselater 記錄系統(tǒng)中心點(diǎn)的偏移量,并在拖動過程中實(shí)時更新系統(tǒng)中心點(diǎn)坐標(biāo)以及在拖動結(jié)束后保存最新的系統(tǒng)中心點(diǎn)坐標(biāo)。當(dāng)發(fā)生地圖縮放操作時,對應(yīng)的縮放比例變量scale會產(chǎn)生改變,改變的值由鼠標(biāo)滑輪的前后滾動決定,滑輪前滾,scale值增加10,滑輪后滾,scale值減少10,最終影響屏幕坐標(biāo)p的換算結(jié)果。
圖2 地圖顯示模塊
在SDD_map.txt地圖文件中,直線線段的繪制由線段的兩個端點(diǎn)經(jīng)緯度給出的,這也使得大型、不規(guī)則的圖形繪制會占用較多的系統(tǒng)資源和產(chǎn)生較大的時耗,用戶在前端進(jìn)行地圖的縮放和移動時體驗(yàn)非常不好。China_map(中國地圖)是里面數(shù)據(jù)量最大的地圖,其通過多個經(jīng)緯度坐標(biāo)完成海岸線、海島等不規(guī)則的繪制,因此在繪制China_map地圖時,如何快速地加載以及流暢地繪制,是地圖繪制模塊里面的重點(diǎn)。
實(shí)際處理過程中,系統(tǒng)可采取隔行讀取數(shù)據(jù)的方式,減少直線的繪制量,雖然會帶來一定精確度上的損失,但是換來了更少量的數(shù)據(jù)處理以及更快的地圖繪制速度。傳統(tǒng)的地圖繪制方式是讀取一行原始地圖數(shù)據(jù)之后進(jìn)行拆分,取出其中的數(shù)據(jù)項(xiàng)再進(jìn)行軟件上的繪制,在通過C#內(nèi)部timer定時器控件完成地圖的實(shí)時更新[3-4]。這種繪制方式如若出現(xiàn)China_map類似的大數(shù)據(jù)繪制將會出現(xiàn)界面卡頓的現(xiàn)象,重繪過程較慢。此處將地圖數(shù)據(jù)進(jìn)行預(yù)處理,先將China_map的原始地圖數(shù)據(jù)做格式轉(zhuǎn)換,以便程序能夠直接讀取數(shù)據(jù)然后直接繪制。
預(yù)處理的過程如下:
(1)先將China_map 地圖數(shù)據(jù)從SDD_map.txt 地圖文件中分離出來,單獨(dú)生成一個名為China.txt的地圖文件;
(2)隔行讀取China.txt 地圖文件中的地圖數(shù)據(jù),對每行數(shù)據(jù)進(jìn)行拆分并提取、轉(zhuǎn)換數(shù)據(jù),可提取出用于顏色區(qū)分的數(shù)據(jù)項(xiàng),將原先用度、分、秒表示的直線兩端的經(jīng)緯度轉(zhuǎn)換成double類型的雙精度浮點(diǎn)數(shù),共計(jì)5個數(shù)據(jù),并按行將數(shù)據(jù)寫入另外一個名為China_format.txt的文件;
(3)將China_format.txt文件里的數(shù)據(jù)一次性讀入內(nèi)存,在繪制時再調(diào)用繪制函數(shù),從內(nèi)存中一項(xiàng)項(xiàng)讀取數(shù)據(jù)完成繪制。
實(shí)驗(yàn)表明,以民航汕頭空管站SDD_map.txt 的處理為例,如若采用傳統(tǒng)設(shè)計(jì)方法每次等待地圖加載的時間需要52 s。而采用本方法通過預(yù)處理操作后,加載地圖的時間降低至毫秒級,并且地圖繪制時的流暢程度也有了很大的提高。
數(shù)據(jù)狀態(tài)顯示是基于日志分析生成的數(shù)據(jù)組,以是否為聯(lián)程航班為區(qū)分,從中提取計(jì)劃航路信息與航路點(diǎn)標(biāo)牌信息,并以此構(gòu)造出包含標(biāo)牌信息的類objectlabel[5-6],其含航路點(diǎn)名稱、航班號、二次代碼、24 位地址碼、起飛落地機(jī)場、飛行計(jì)劃狀態(tài)、相關(guān)狀態(tài)、實(shí)際過點(diǎn)時間等等,每生成計(jì)劃航路上的一個點(diǎn)便會聲明一個標(biāo)牌信息類的對象與之對應(yīng),標(biāo)牌信息與計(jì)劃航路信息的獲取則通過遍歷日志分析生成的數(shù)據(jù)組中得到,如圖3所示。
圖3 數(shù)據(jù)狀態(tài)顯示模塊
構(gòu)造設(shè)計(jì)objectlabel類,可以將飛機(jī)在途經(jīng)各個航路點(diǎn)時所處的飛行狀態(tài)細(xì)致地體現(xiàn)出來,在最大化程度上還原飛機(jī)在整個飛行途中經(jīng)歷的各種狀態(tài)變化,為后期的故障梳理與排查提供全面和詳細(xì)的數(shù)據(jù)依據(jù)。
航路點(diǎn)在每個時刻會生成一個數(shù)據(jù)塊,飛機(jī)發(fā)生狀態(tài)改變會生成一個數(shù)據(jù)塊,同一時刻的數(shù)據(jù)塊組成數(shù)據(jù)組,不同時刻的數(shù)據(jù)組構(gòu)成日志分析的結(jié)果。計(jì)劃航路通過遍歷日志產(chǎn)生的數(shù)據(jù)組,從數(shù)據(jù)塊中的過點(diǎn)屬性值獲得各個航路點(diǎn)的名稱構(gòu)成計(jì)劃航路。聯(lián)程航班作為特殊情況做特殊處理,分別生成兩段計(jì)劃航路,第一段按順序遍歷數(shù)據(jù)組生成,第二段則從第二個由起飛報(bào)生成的數(shù)據(jù)塊之后開始遍歷數(shù)據(jù)組生成。
圖4 標(biāo)牌與計(jì)劃航路顯示
根據(jù)實(shí)際工作排故經(jīng)驗(yàn),實(shí)際過點(diǎn)時間的獲取從第一個由起飛報(bào)生成的數(shù)據(jù)塊之后開始遍歷數(shù)據(jù)組,每個航路點(diǎn)對應(yīng)的數(shù)據(jù)塊中包含日期(date)與時刻(time)兩個時間值,日期值為自動化系統(tǒng)處理航班信息的時間戳,時刻值為飛機(jī)預(yù)計(jì)經(jīng)過該航路點(diǎn)的時間,找到第一次出現(xiàn)time 值比date 值小時,則該time 值為飛機(jī)經(jīng)過該航路點(diǎn)的實(shí)際過點(diǎn)時間。聯(lián)程航班則分為兩段,以第一個起飛報(bào)數(shù)據(jù)塊和第二個起飛報(bào)數(shù)據(jù)塊作為分隔分別獲取。
飛行狀態(tài)的獲取包含飛行計(jì)劃狀態(tài)status、二次代碼ssr和24 位地址碼s_code。其獲取根據(jù)日志消息生成的規(guī)律,每個航路點(diǎn)的飛行狀態(tài)以該航路點(diǎn)實(shí)際過點(diǎn)時間之前并且在時間上與實(shí)際過點(diǎn)時間最鄰近的時間戳date 為準(zhǔn),從該date 時刻生成的數(shù)據(jù)塊中獲取飛行狀態(tài)。
標(biāo)牌的構(gòu)造分為航路點(diǎn)標(biāo)牌與非航路點(diǎn)標(biāo)牌,航路點(diǎn)標(biāo)牌的構(gòu)造通過先前獲得的計(jì)劃航路點(diǎn)以及對應(yīng)的實(shí)際過點(diǎn)時間和飛行狀態(tài)信息,遍歷數(shù)據(jù)組,找出與上述信息一致的數(shù)據(jù)塊,從該數(shù)據(jù)塊中獲取標(biāo)牌信息類中定義的各項(xiàng)屬性的值,并生成類對象,各航路點(diǎn)的標(biāo)牌對象組成航班標(biāo)牌信息列表。非航路點(diǎn)標(biāo)牌從飛機(jī)發(fā)生飛行狀態(tài)變化時產(chǎn)生的數(shù)據(jù)塊獲取構(gòu)成,當(dāng)飛行狀態(tài)發(fā)生改變時,會對應(yīng)生成一個無導(dǎo)航(fix)點(diǎn)即非航路點(diǎn)的數(shù)據(jù)塊,該數(shù)據(jù)塊中包含有狀態(tài)變化標(biāo)志,當(dāng)值為true 時,表明飛行狀態(tài)發(fā)生了變化,同時,數(shù)據(jù)塊中含有改變后的新飛行狀態(tài)值。通過遍歷數(shù)據(jù)組,找出各狀態(tài)變化標(biāo)志值為true 時的數(shù)據(jù)塊,從數(shù)據(jù)塊中獲取相應(yīng)標(biāo)牌信息構(gòu)成非航路點(diǎn)標(biāo)牌。與此同時,在非航路點(diǎn)標(biāo)牌構(gòu)造完成后,需以標(biāo)牌中的timer值在現(xiàn)有的標(biāo)牌信息列表中按時間先后順序插入,形成完整的航班標(biāo)牌信息列表。標(biāo)牌信息與計(jì)劃航路信息的圖形化顯示效果如圖4所示。
本文基于自動化系統(tǒng)日志分析結(jié)果,將自動化系統(tǒng)在日志文件里記錄的航班處理操作以圖形化的方式動態(tài)地呈現(xiàn)出來,主要設(shè)計(jì)分為地圖顯示和數(shù)據(jù)狀態(tài)顯示,最終通過C#設(shè)計(jì)實(shí)現(xiàn)。經(jīng)過實(shí)際的測試使用,設(shè)計(jì)提高了自動化系統(tǒng)故障排查的效率,可以作為故障智能診斷與排查的工具,具有較強(qiáng)的實(shí)用性和較好的推廣意義。