楊宛璐,韓 立,王建普,鄧鑄洲
(航空工業(yè)洪都,江西 南昌, 330024)
飛行模擬器分為飛機(jī)性能仿真分系統(tǒng)、座艙模擬分系統(tǒng)、視景、教員臺控制分系統(tǒng)、計算機(jī)和網(wǎng)絡(luò)分系統(tǒng)、航空電子模擬分系統(tǒng)、聲音模擬分系統(tǒng)、輔助分系統(tǒng)等八大分系統(tǒng)。 其中教員控制臺(IOS—Instructors Operating Station)作為飛行模擬器與教員的人機(jī)交互界面,是整個系統(tǒng)中重要的環(huán)節(jié)之一。 通過教員控制臺可以控制整個飛行模擬器的全過程,如訓(xùn)練開始、訓(xùn)練結(jié)束、設(shè)置飛機(jī)數(shù)據(jù)、機(jī)場數(shù)據(jù)、飛行環(huán)境、特情等。除此之外,通過態(tài)勢監(jiān)控、電子地圖、語音通信等功能操作,教員可以隨時掌握飛行訓(xùn)練中的每一個細(xì)節(jié)。
目前國內(nèi)大部分飛行模擬器教員控制臺大都采用可視化集成開發(fā)工具來開發(fā)教員控制臺軟件,但界面設(shè)計與底層邏輯代碼的緊密耦合度高,隨著程序功能的拓展與擴(kuò)張,代碼量也會相應(yīng)地增加,程序也會變得十分復(fù)雜,使得在后期維護(hù)修改時,工作量繁重,牽一發(fā)而動全身,后期維護(hù)較為不便。
針對上述缺點, 將MVVM 模式應(yīng)用在教員臺系統(tǒng)的設(shè)計上可以很好地解決上述問題,MVVM 模式是基于微軟.Net 架構(gòu)以及WPF 全新設(shè)計模式,將數(shù)據(jù)層、業(yè)務(wù)邏輯層以及表現(xiàn)層分開,并利用Data/Binding(數(shù)據(jù)綁定與命令綁定)進(jìn)行接口粘合,可以使業(yè)務(wù)邏輯與界面最大程度地分離開來。
根據(jù)教員控制臺的應(yīng)用特點,結(jié)合各種先進(jìn)技術(shù)的發(fā)展,并考慮到系統(tǒng)設(shè)計的通用性,提出以下設(shè)計思路:采用面向?qū)ο蠹夹g(shù)進(jìn)行教員控制臺軟件引擎的分析與實現(xiàn),利用模塊化的軟件結(jié)構(gòu)和網(wǎng)絡(luò)通訊框架提高系統(tǒng)的通用性、擴(kuò)展性和可移植性,注重從界面布局、風(fēng)格設(shè)計和功能實現(xiàn)方法等方面增強(qiáng)人機(jī)交互界面的靈活性和友好性。
教員控制臺系統(tǒng)是飛行模擬器的一個重要組成系統(tǒng),擔(dān)負(fù)著整個飛行模擬器的輸入控制和輸出顯示工作,它與模擬器幾乎所有的系統(tǒng)都存在著直接或間接的信息交互。
教員控制臺軟件采用三層架構(gòu),底層為網(wǎng)絡(luò)通訊層,用于主控計算機(jī)與其他計算機(jī)網(wǎng)絡(luò)數(shù)據(jù)的接收和發(fā)送;中間層為數(shù)據(jù)的邏輯處理層;最上層為用戶交互界面,實現(xiàn)界面布局和顯示。
在飛行訓(xùn)練過程中,教員控制臺軟件將教員設(shè)置的各類控制指令通過以太網(wǎng)發(fā)送給仿真計算機(jī),仿真計算機(jī)通過數(shù)據(jù)處理模塊將解算出的飛行數(shù)據(jù)及指令通過以太網(wǎng)反饋給教員臺,用于軟件界面的實時顯示。
本系統(tǒng)界面采用WPF 編程實現(xiàn):
1) 采用Visual Studio 2010 和.Net Framework 4.0平臺架構(gòu)。
2) 應(yīng)用C#、XAML 語言進(jìn)行開發(fā),C# 用于軟件框架的搭建,XAML 用于軟件界面的布局和設(shè)計,XML 用于系統(tǒng)數(shù)據(jù)配置文件。
界面設(shè)計采用微軟的Expression Blend 4 和Visual Studio 2012。Blend 主要負(fù)責(zé)界面設(shè)計,包括空間布局,背景色,控件樣式以及自定義控件;Visual Studio 2012 主要完成界面上控件的響應(yīng)及界面之間的傳值,完成用戶與系統(tǒng)的信息交互。
教員控制臺軟件界面采用數(shù)據(jù)驅(qū)動的方式實現(xiàn),在完成內(nèi)部功能模塊設(shè)計后,將界面顯示與配置文件和數(shù)據(jù)驅(qū)動模型進(jìn)行綁定。 界面配置文件,包括中英文切換、單位切換、值域編輯、屏幕分辨率配置、系統(tǒng)樣式以及圖標(biāo)更換,均采用XAML 文件存儲,這些文件修改之后不需要進(jìn)行再編譯,重新啟動軟件后將自動識別載入系統(tǒng)數(shù)據(jù)。
數(shù)據(jù)交換處理模塊主要是用于將操作界面發(fā)出的請求發(fā)送給仿真框架中的仿真管理系統(tǒng)主機(jī),并將網(wǎng)絡(luò)接收過來的數(shù)據(jù)實時傳給教員控制臺,供界面顯示。
主控系統(tǒng)框架采用MVVM(Model-View-ViewMode)模式。 該模式由Model(模型層)、View(視圖層)和ViewModel(視圖模型)三部分組成,該模式系統(tǒng)框架如圖1 所示。 View 先綁定ViewModel,然后執(zhí)行一些命令向其請求動作。 ViewModel 與Model 通訊,通知響應(yīng)UI。 View 層只需展示數(shù)據(jù)格式不同生成的不同窗體視圖的界面設(shè)計。 ViewModel 實現(xiàn)數(shù)據(jù)邏輯的展示,它只關(guān)注操作任務(wù)、操作邏輯的行為,Model 層制定數(shù)據(jù)模型。 相對于之前把邏輯結(jié)構(gòu)卸載Code Behind 里面的方式,MVVM 幾乎完全解耦視圖與邏輯業(yè)務(wù)的關(guān)系, 通過數(shù)據(jù)綁定和命令來處理UI 屬性及事件驅(qū)動。 同理,ViewModel 的視圖交互業(yè)務(wù)邏輯處理導(dǎo)致的屬性變更也會通知到View 前端,讓View前端實時更新,關(guān)系如圖1 所示。View 使用XAML 語言只包含界面相關(guān)邏輯代碼,并運用綁定屬性和綁定命令的方式與視圖模型層進(jìn)行交互。當(dāng)一個控件值改變后,XAML 會根據(jù)控件綁定的ViewModel 的屬性進(jìn)行相應(yīng)的更新,同理,若ViewModel 的屬性值發(fā)生變化時,可調(diào)用INotify Property Changed 的事件來通知前臺進(jìn)行改變。這樣的通訊機(jī)制使得系統(tǒng)構(gòu)建十分容易。 在系統(tǒng)界面和功能越來越松耦合的同時,功能可測性越來越強(qiáng)。
圖1 MVVM 架構(gòu)圖
根據(jù)模擬器對教員控制臺的需求分析,將軟件模塊分為以下內(nèi)容,如圖2 所示。
圖2 教員控制臺功能模塊設(shè)計
1) 窗口布局管理
(1)加載各類資源文件,完成主窗口的動態(tài)創(chuàng)建顯示;
(2)加載頁面資源,完成各功能頁面內(nèi)容的動態(tài)創(chuàng)建顯示;
(3)實現(xiàn)各功能頁面間的切換顯示。
2) 通用顯示和控制
(1)讀取基本界面元素配置文件,實現(xiàn)頁面中界面元素的加載,如參數(shù)設(shè)置按鈕、狀態(tài)設(shè)置按鈕、標(biāo)志按鈕、參數(shù)狀態(tài)顯示框、圖片控件等。
(2)利用WPF 的數(shù)據(jù)綁定和依賴項屬性等特性,實時顯示從主機(jī)網(wǎng)絡(luò)服務(wù)軟件獲取的數(shù)據(jù);
(3)根據(jù)控制指令的數(shù)據(jù)類型,通過開關(guān)按鈕、彈出對話框輸入數(shù)據(jù)或選擇狀態(tài)等不同方式,將控制指令對應(yīng)的數(shù)據(jù)發(fā)送到主機(jī)網(wǎng)絡(luò)服務(wù)軟件。
3) 故障管理
(1)按系統(tǒng)分頁顯示可設(shè)故障名稱以及各故障的描述內(nèi)容;
(2)提供即時觸發(fā)和預(yù)設(shè)故障的設(shè)置及取消;
(3)所有已激活故障集中顯示,便于教員了解當(dāng)前故障設(shè)置狀態(tài);
(4)故障預(yù)設(shè)的觸發(fā)條件管理。
4) 多語言版本管理
(1)創(chuàng)建語言切換配置文件,描述不同語言版本下對應(yīng)的翻譯內(nèi)容;
(2)實現(xiàn)軟件顯示內(nèi)容多語言版本的動態(tài)切換。
5) 網(wǎng)絡(luò)通訊
(1)實現(xiàn)與主機(jī)網(wǎng)絡(luò)服務(wù)軟件通過UDP 進(jìn)行數(shù)據(jù)交互,完成數(shù)據(jù)的發(fā)送和接收。
(2)接收主機(jī)網(wǎng)絡(luò)服務(wù)軟件發(fā)送過來的信息包和數(shù)據(jù)包; 解析信息包獲取數(shù)據(jù)包的拆解描述信息;解析數(shù)據(jù)包,獲取數(shù)值更新到數(shù)據(jù)資源,用于界面實時顯示數(shù)據(jù)信息;
(3)發(fā)送控制指令時,提供控制指令對應(yīng)的唯一標(biāo)識、數(shù)據(jù)類型和值,按數(shù)據(jù)發(fā)送協(xié)議組包并序列化后的數(shù)據(jù)包發(fā)送給主機(jī)網(wǎng)絡(luò)服務(wù)軟件。
教員臺主控軟件顯示界面即MVVM 模式中的View 層, 以數(shù)字和圖形的方式顯示了以太網(wǎng)接收的所有數(shù)據(jù)。 顯示界面的前端為用戶提供程序交互界面。 View 層通過豐富多樣的圖形化界面使得使用者能得到很好的人機(jī)交互體驗。 ViewModel 與View 通過屬性綁定在一起,將數(shù)據(jù)以更加直觀的圖形化的方式展現(xiàn)給用戶,若用戶需改變圖形界面顯示,只需將界面與數(shù)據(jù)重新綁定一次即可。對于整體模塊無需進(jìn)行多余修改。
圖3所示教員臺系統(tǒng)的界面設(shè)計,主界面左側(cè)為導(dǎo)航欄,內(nèi)容包括:任務(wù)(創(chuàng)建任務(wù)、選擇任務(wù)、任務(wù)頁面)、故障設(shè)置、活動目標(biāo)、檔案管理和系統(tǒng)設(shè)置。
以天氣設(shè)置界面設(shè)計為例,如圖3 所示,風(fēng)向的設(shè)置由一個自定義的控件DashBoard 組成,將控件的Maximum 最大值、Minumum 最小值、和Value 當(dāng)前值定義為依賴屬性(Dependency Property),這樣就可以跟WPF 的原生控件一樣, 允許對該控件進(jìn)行屬性綁定, 將風(fēng)向設(shè)置的TextBox 的Text 屬性與DashBoard的Value 屬性綁定在一起, 如:Text="{BindingValue,ElementName=DashBoard},這樣使得TextBox 與Dash-Board 間建立關(guān)聯(lián),產(chǎn)生聯(lián)動效果。 利用自定義控件制作動畫來顯示風(fēng)向,使得同一個數(shù)據(jù)擁有兩種不一樣的表現(xiàn)形式,雖然兩種表現(xiàn)方式、效果完全不一樣,但兩者來源的數(shù)據(jù)是一樣的。底層數(shù)據(jù)并沒有因為界面顯示的不同而進(jìn)行代碼修改,就可有兩種不同的顯示方式,很好地將界面的設(shè)計開發(fā)與底層的數(shù)據(jù)開發(fā)分離。
圖3 風(fēng)向設(shè)置界面
傳統(tǒng)的界面監(jiān)控設(shè)計思路是消息觸發(fā)機(jī)制,結(jié)合TCP/UDP 通訊協(xié)議即可以搭建完整的網(wǎng)絡(luò)監(jiān)控系統(tǒng)。 本文采用的是數(shù)據(jù)綁定機(jī)制,此方法是對消息觸發(fā)方式的一次革新,更加強(qiáng)調(diào)模塊化設(shè)計,與常規(guī)桌面軟件的設(shè)計,帶來了全新的設(shè)計思路。 其中關(guān)鍵的技術(shù)革新即為一對多的數(shù)據(jù)綁定取代了一對一的消息觸發(fā)機(jī)制,突破了數(shù)據(jù)來源與界面顯示的專一性,僅在需要顯示的界面才進(jìn)行數(shù)據(jù)綁定,模塊化程度高。
將MVVM 框架融合于飛行模擬器教員臺軟件系統(tǒng)中,使其具備低耦合、可重用性、可測試性等優(yōu)點,通過綁定及自動更新,使得后臺業(yè)務(wù)邏輯更加清晰,便于進(jìn)行飛行模擬器教員臺界面設(shè)計的修改和更新,給傳統(tǒng)桌面開發(fā)帶來全新的設(shè)計理念,為以后開發(fā)桌面交互設(shè)計界面提供了開發(fā)經(jīng)驗。