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