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