房云龍
(中國民用航空青島空中交通管理站,山東 青島266100)
航空氣象服務的目的是為航空飛行的安全、正常、效率服務。航空氣象探測和天氣預報是航空氣象服務的基礎和組織實施飛行的重要依據(jù)[1-5]?!吨袊裼煤娇諝庀蠊ぷ饕?guī)則》規(guī)定民航氣象服務單位應使用“電碼格式的民航氣象情報(Code format Civil Aviation Meteorological Information,CCAMI)” 進行發(fā)布和交換民航氣象信息。CCAMI包含種類很多,本文僅指民航領域最常用的 “機場例行天氣報告SA”“機場特殊天氣報告SP”“9小時機場預報FC”“24小時或30小時機場天氣預報FT”,其中SA,SP包含附加其后的趨勢型著陸預報。由于CCAMI編碼本身的復雜性、不同氣象人員對編碼的理解程度不同、各地發(fā)送CCAMI的軟件終端不同,加之一些人為或通信的因素,都可能造成發(fā)布和交換的CCAMI并不符合行業(yè)標準的要求,進而影響了氣象信息的準確性與真實性。因此,CCAMI編碼的規(guī)范性成了航空氣象保障能力和服務水平的重要一環(huán)。全國每天有上千份CCAMI參與國內(nèi)或國際交換,人工進行質(zhì)量控制顯然不合實際,因此有必要利用軟件技術手段對參與發(fā)布與交換的CCAMI進行質(zhì)量監(jiān)控。
本文根據(jù)目前民航氣象領域存在的各類CCAMI發(fā)布軟件糾錯原理和實現(xiàn)過程,并結合筆者多年的工作經(jīng)驗,歸納總結出兩種CCAMI糾錯方案,即“集成法”和“解析法”,并從糾錯原理及實現(xiàn)方式等方面分析二者差異和優(yōu)缺點,為CCAMI糾錯軟件的編寫提供參考。
CCAMI一般由“報頭”和“情報內(nèi)容”組成。由于報頭為固定編碼,構成簡單,一般不易出錯,故本文主要針對情報內(nèi)容進行質(zhì)量控制。CCAMI情報內(nèi)容是由情報中各類關鍵詞、機場四字代碼、發(fā)布時間、有效時段以及若干氣象要素構成,本文把這些統(tǒng)稱為CCAMI組成要素(Meteorological Information Components,MIC),各組成要素之間以空格分隔。
CCAMI糾錯依據(jù)是民用航空氣象各類標準、規(guī)范等,具體包括:《中國民用航空氣象工作規(guī)則》(交通運輸部2016年第23號),《民用航空飛行氣象情報發(fā)布與交換辦法》(AP-117-TM-01R2),《民用航空氣象地面觀測規(guī)范》(AP-117-TM-02-R1),《民用航空氣象預報規(guī)范》(AP-117-TM-2019-01)。為簡便起見,下文中對以上各種規(guī)定標準等統(tǒng)稱為“規(guī)范”。
“集成法”依靠軟件界面分解出CCAMI各組成要素,分別進行糾錯控制之后,按照固定順序集成為完整CCAMI?;?“集成法”的發(fā)布軟件界面控件與CCAMI各組成要素一一對應,表1是CCAMI組成要素對應常見的軟件界面控件。以Windows系統(tǒng)為例,根據(jù)組成要素的特點,常用下拉框或文本框。每個CCAMI組成要素嚴格對應軟件界面的某一控件,這樣在編輯情報之前就通過軟件界面把CCAMI分解成獨立部分,以便于糾錯工作的展開。
每個CCAMI組成要素都有固定的編寫規(guī)定,不同要素之間還有相應的一致性原則,本文把“規(guī)范”規(guī)定的CCAMI所必須滿足的約束條件統(tǒng)稱為“編報規(guī)則”?!凹煞ā弊铒@著的特點就是CCAMI要素與軟件界面控件相互綁定,一一對應。“集成法”糾錯工作的本質(zhì)就是把CCAMI“編報規(guī)則”轉(zhuǎn)化為軟件界面控件對應的文本內(nèi)容之間相互關系的約束,例如“編報規(guī)則”規(guī)定風的編報必須滿足陣風與平均風速之差≥5 m/s,根據(jù)軟件界面陣風與平均風速對應的控件把文本轉(zhuǎn)化為數(shù)值型變量,然后進行判斷即可(圖1)。
具體操作過程中,按照軟件界面的不同設計風格,既可以把多個組成要素合并為整體對應一個軟件界面控件(例如多個天氣現(xiàn)象對應一個“天氣現(xiàn)象控件”),也可以把單獨組成要素拆分為不同組成部分對應不同的軟件界面控件(例如把單獨的“云層”分為“云量”“云狀”“云高”三個組成部分,并分別對應三個不同的軟件界面控件)。待所有軟件界面控件均進行糾錯檢驗之后,把控件文本內(nèi)容按照固定的順序集成組合起來即為完整的CCAMI。
表1 CCAMI組成要素及對應的軟件界面控件
“解析法”是通過解析完整CCAMI獲取各組成要素進而根據(jù)“規(guī)范”判斷CCAMI正確新的一種糾錯方法?!敖馕龇ā卑淹暾腃CAMI作為計算機程序中的一個字符串,以“空格符”或者“回車”或者“換行”將字符串解析成CCAMI的組成要素,然后根據(jù)各個組成要素的特點對CCAMI進行糾錯。
“解析法”不依賴于發(fā)布軟件界面控件,無論通過何種方式形成的CCAMI均可通過“解析法”進行糾錯處理。依然以“平均風速與陣風”為例來說明“解析法”的工作原理。如圖1所示,通過解析CCAMI獲取情報“風組”數(shù)據(jù),并進一步根據(jù)“風組”的結構屬性解析出“平均風速”與“陣風”,然后根據(jù)“編報規(guī)則”進行糾錯判斷。雖然要素“解析法”關于要素糾錯方法與“集成法”完全一致(如圖2中“風的糾錯方法”),但兩種糾錯方法最本質(zhì)的區(qū)別在于要素的獲取方式的差異,“集成法”通過軟件界面控件直接獲取,而“解析法”去通過解析原始CCAMI獲取要素數(shù)據(jù)。
圖1 “集成法”與“解析法”糾錯流程圖(以陣風與平均風速之間約束條件為例)
圖2 “集成法”與“解析法”的工作流程結構圖
雖然“解析法”糾錯過程與軟件界面無關,但這并不意味著“解析法”不需要軟件界面,設計優(yōu)異的軟件界面會提高民航氣象人員編輯CCAMI的工作效率。無論采用何種界面,只要最后形成的CCAMI相同,糾錯結果就完全一致。
如圖2所示,“集成法”原理簡單,包含3個過程,分別為“信息轉(zhuǎn)化過程”“要素糾錯過程”和“情報集成過程”?!靶畔⑥D(zhuǎn)化過程”把軟件界面控件對應的文本信息轉(zhuǎn)化為程序可識別的各類數(shù)據(jù)。要素糾錯(Element Error Connection,EEC)過程包含“單要素獨立糾錯 (Single element Independent error Connection,SIC)” 和 “多要素組合糾錯 (Multi-element Combinational error Connection,MCC)”兩個步驟。SIC只涉及要素本身語法規(guī)則,MCC則考慮不同要素之間的匹配關系。滿足SIC與MCC后,“情報集成過程”把各要素按照固定順序集成為CCAMI即可?!凹煞ā敝?,“信息轉(zhuǎn)化過程”和“情報集成過程”處理方式簡單,“要素糾錯過程”是“集成法”的主體與核心。
“解析法”原理復雜,涵蓋面廣,包含“解析過程”“判斷過程”“要素糾錯過程”“排序過程”以及“其他糾錯過程”等結構。 “解析法”通過“解析過程”拆分CCAMI獲取字符串,通過“判斷過程”分析字符串對應何種要素,然后進行ECC,最后通過“排序過程”與“其他糾錯過程”進行檢驗最后形成糾錯結論。
“集成法”與“解析法”均包含ECC,但區(qū)別在于ECC是“集成法”的主體與核心,占據(jù)了“集成法”95%以上的代碼量;而“解析法”中,ECC僅為整個算法的一個組成部分,占全部代碼量的30%左右。
分析CCAMI各組成要素是所有糾錯方法的基礎?!凹煞ā敝蠧CAMI各組成要素與軟件界面綁定,即“集成法”依靠軟件界面分解各組成要素,這種方案雖然在一定程度上降低了分析原始CCAMI的難度,但其固有工作方式也對糾錯過程造成了很多限制,不同的軟件界面對應著不同的糾錯方法。理論上不同的糾錯方法應該有相同的糾錯結果,但隨著軟件代碼量的增大,加之氣象代碼本身的復雜性,很難保證糾錯結果的一致性。如圖3所示,“集成法”有三個軟件界面,由于不同界面對應的CCAMI要素不同,因此有三種糾錯方法和三種糾錯結果,雖然最后形成的CCAMI一致,但三種糾錯結果可能不完全一致?!敖馕龇ā敝苯咏馕鯟CAMI本身,這樣只有一種糾錯方法和一種糾錯結果。無論軟件界面如何,只要最后形成的CCAMI一致,那么糾錯方法和糾錯結果就一致。
如圖3所示,“集成法”依靠軟件界面分解出CCAMI組成要素并進行單獨和組合糾錯,待糾錯完成后將個要素集成為完整的CCAMI,糾錯過程在形成情報之前。這種糾錯方法可能造成最后形成的CCAMI存在錯誤,因為即使各組成要素完全正確,也無法保證CCAMI的正確性,即存在“集成錯誤”的可能性。“解析法”的工作對象是完整的CCAMI,通過軟件技術將CCAMI解析成單獨要素并進行單獨寄組合糾錯。由于“解析法”直接檢驗最終的CCAMI,故不存在“集成錯誤”。
“界面層”與“邏輯層”是軟件工程理論證實的較好的軟件設計理念?!敖馕龇ā钡募m錯方法是一個獨立的邏輯處理模塊,可編譯為單獨動態(tài)鏈接庫文件(DLL),可供多個界面(界面層)調(diào)用,具有很好的可移植性,如果發(fā)現(xiàn)算法錯誤,修改也很簡單;“集成法”糾錯過程以來界面設計,界面層和邏輯層結合在一起,只能編譯成獨立的“可執(zhí)行文件”,幾乎沒有移植性,發(fā)現(xiàn)錯誤就要重新更改應用程序,維護和修改的難度大大增加。
圖3 “集成法”與“解析法”中軟件界面與糾錯方法關系的比較
軟件測試是軟件應用得非常必要的環(huán)節(jié)。“集成法”的糾錯過程依賴軟件界面,只能通過手動測試,效率低下?!敖馕龇ā钡募m錯模塊獨立于界面層,故可單獨對糾錯模塊進行測試,利用民航氣象數(shù)據(jù)庫每年幾十萬條完整的CCAMI對“解析法”糾錯模塊進行批量循環(huán)測試,提高了測試的效率,發(fā)現(xiàn)并改正程序中的各種bug,優(yōu)化代碼。
無論從糾錯原理設計的完整性、產(chǎn)品適用性、可移植性及測試效率等各方面,“解析法”都優(yōu)于“解析法”。
民航青島空管站氣象臺歷來重視利用軟件技術來提升CCAMI的發(fā)布質(zhì)量,從2010年就開始著手研發(fā)具有糾錯功能的CCAMI發(fā)布軟件,成功開發(fā)了基于“集成法”的“TAF報文糾錯軟件”并在青島空管站氣象臺預報室穩(wěn)定運行。后來對軟件進行功能升級,分離軟件“界面層”與“邏輯層”,編寫基于“解析法”的核心糾錯部件。由于糾錯算法采用了“縱向”不同要素依次順序糾錯與“橫向”三層邏輯控制相結合,故將此糾錯算法命名為“縱橫糾錯法”。目前,“縱橫糾錯法”已經(jīng)根據(jù) 《民用航空氣象預報規(guī)范》(AP-117-TM-2019-01)重新修改了糾錯算法,實現(xiàn)了算法的升級。
“縱橫糾錯法”由工作在民航氣象一線,同時具有一定編程能力的專業(yè)氣象人員編寫,可有機結合民航氣象與計算機編程兩個學科的特點,避免了計算機軟件人員缺乏民航氣象知識導致的軟件代碼正確性及穩(wěn)定性的問題,目前可以實現(xiàn)FC,F(xiàn)T,SA,SP的糾錯。
“縱橫糾錯法”對近幾年參加情報交換的全國數(shù)十個機場的氣象情報進行循環(huán)測試,已經(jīng)完成了百萬量級的測試工作,保障了算法的糾錯質(zhì)量。“縱橫糾錯法”現(xiàn)已經(jīng)編譯為dll文件,C#,Visual Basic,Visual Basic.NET,Java等多種語言均可調(diào)用,目前已經(jīng)廣泛應用青島空管站CCAMI發(fā)布與監(jiān)控系統(tǒng)中,有效保障了青島機場氣象情報的正確性和規(guī)范性。
本文通過研究CCAMI內(nèi)在屬性及組織結構,提出了CCAMI糾錯的兩種基本方法,分別是 “集成法”和“解析法”?!凹煞ā币揽寇浖缑娣纸獬鯟CAMI各組成要素,分別進行糾錯控制之后,按照固定順序集成為完整CCAMI?!敖馕龇ā蓖ㄟ^解析完整CCAMI獲取各組成要素,進而根據(jù)“規(guī)范”判斷CCAMI正確性。
根據(jù)二者的工作原理及處理流程,比較了二者的不同點,得出以下結論:
(1)“集成法”原理簡單,主體內(nèi)容為“要素糾錯過程”;“解析法”原理復雜,涵蓋面廣,除“要素糾錯過程”外,還包含“解析過程”“判斷過程”及 “排序過程”等結構。
(2)“集成法”糾錯結果受制于軟件界面,“解析法”與外部界面無關。
(3)“集成法”先糾錯后情報;“解析法”先情報后糾錯。
(4)基于“集成法”的軟件,界面層和邏輯層結合,沒有移植性;基于“解析法”的軟件,界面層和邏輯層分離,符合軟件工程理念,可移植性強。
(5)“解析法”測試效率遠高于“集成法”。
鑒于“解析法”的優(yōu)點,CCAMI糾錯軟件應首選“解析法”。 “縱橫糾錯法”是民航青島空管站氣象人員提出的一種基于“解析法”的CCAMI糾錯算法,可廣泛應用于CCAMI發(fā)布、監(jiān)控軟件中。