張 原,張 昭,劉 蕊
(1.海軍航空兵學院,遼寧 葫蘆島125001;2.海軍航空工程學院,山東 煙臺264001)
虛擬實驗系統(tǒng)是指采用網(wǎng)絡(luò)、遠程控制、虛擬現(xiàn)實、計算機仿真、多媒體等技術(shù)實現(xiàn)的各種虛擬實驗環(huán)境,它涵蓋了兩個層面:一是基于Web對真實儀器設(shè)備的遠程控制和遙控操作;二是以 Web為基礎(chǔ)的面向教學的純粹由軟件實現(xiàn)的虛擬實驗環(huán)境[1]。
目前我國信息化教學多以文字加圖片的教學方式為主,注重理論教學,缺乏實驗內(nèi)容。對一些過程復雜、空間感強的內(nèi)容尚不能充分描述清楚。另一方面,院校現(xiàn)有實驗教學中普遍存在人均實驗設(shè)備擁有量少、設(shè)備更新周期長以及學習時間沖突等問題。利用虛擬現(xiàn)實以及多媒體技術(shù)構(gòu)建一個具有動態(tài)交互能力的虛擬實驗系統(tǒng),利用網(wǎng)絡(luò)和多媒體技術(shù)充實實驗內(nèi)容,增開綜合性實驗項目是必要且緊迫的[1~4]。
許多學者在虛擬現(xiàn)實方面做出相應(yīng)的工作,如利用Java、VRML、Labview等構(gòu)建虛擬實驗平臺。但是,很多方法的構(gòu)建效率較低,穩(wěn)定性較差,且平臺通用性不好,Java運行過程中客戶端還需下載插件。Flash技術(shù)由于其采用了矢量圖形技術(shù),所生成的動畫體積很小,跨平臺性好且圖形可以任意縮放,這正符合了氣動實驗高度動態(tài)表現(xiàn)力的要求。隨著ActionScript 3.0(AS 3.0)的出現(xiàn),近年來國內(nèi)在Flash虛擬實驗平臺開發(fā)方面有了較大發(fā)展,但開發(fā)的過程往往為了項目實現(xiàn)而未能充分考慮到系統(tǒng)的拓展性和代碼重用性。虛擬實驗平臺是未來實驗建設(shè)的方向,如果每次都重頭開發(fā),則原來的代碼浪費了,非??上?,而且開發(fā)的效率也很低。
為了解決以上問題,本文采用MVC設(shè)計模式開發(fā)了空氣動力學虛擬實驗室系統(tǒng),而具有優(yōu)秀的Web應(yīng)用特性和良好的跨平臺特性的豐富互聯(lián)網(wǎng)應(yīng)用RIA(Rich Internet Application)技術(shù)成為更合適的虛擬實驗系統(tǒng)的實現(xiàn)方案。
2006年起,RIA以其良好的用戶體驗、快速的響應(yīng)速度、出色的兼容性以及卓越的Web應(yīng)用特性和優(yōu)秀的跨平臺特性迅速贏得了大家的青睞,將RIA技術(shù)整合到虛擬實驗室系統(tǒng)的建設(shè)中去,是解決當前虛擬實驗室存在的問題的一個有效方法。
ActionScript 3.0(AS 3.0)是目前最流行的RIA開發(fā)語言,它們可運行在瀏覽器的Flash Player中,或?qū)dobe AIR作為一個桌面應(yīng)用程序運行在移動設(shè)備上。與 AS 1.0和 AS 2.0不同,AS 3.0與ECMAScript標準兼容,引入了一些其他領(lǐng)域新的或更強的功能,它對面向?qū)ο缶幊蘋OP語言完全支持,深層優(yōu)化了OOP架構(gòu),徹底更新了顯式對象系統(tǒng)架構(gòu),全面支持正則表達式并采用了先進的E4X,新增強大的異常處理機制。AS 3.0強大的新特性使其對于大型應(yīng)用程序開發(fā)更有吸引力。同時,新一代ActionScript引擎AVM2(ActionScript Virtual Machine2)較 AS 2.0時代的AVM1性能大幅增加,ActionScript 3.0代碼執(zhí)行速度最多可以比原有ActionScript代碼快10倍[5]。
AS 3.0和AVM2帶來的變革使得RIA極具潛力與活力。結(jié)合Java組件技術(shù)和數(shù)據(jù)庫技術(shù),RIA可以實現(xiàn)與MATLAB、C++、C#等語言的協(xié)同開發(fā)[6],如今利用 AS 3.0在3D 領(lǐng)域進行虛擬現(xiàn)實也已經(jīng)實現(xiàn),隨著AS語言的完善和AVM的發(fā)展,其性能也必將更加強大。同時,AVM2和Flex在開源的方向上大步邁進,這意味著AS與RIA將有超強的生命力和號召力。
設(shè)計模式是指一系列從實踐中總結(jié)出來的、可重復使用的面向?qū)ο蟮脑O(shè)計方法。MVC設(shè)計模式是許多交互和界面系統(tǒng)的構(gòu)成基礎(chǔ),實現(xiàn)模型與數(shù)據(jù)、界面設(shè)計、控制功能的分離,使得各部分修改時相對獨立,代碼的可維護性增強;同時,也提高了應(yīng)用程序的重用性,便于擴展,開發(fā)速度也有了顯著提高。
大型軟件開發(fā)的可持續(xù)性與易維護性取決于軟件設(shè)計階段對設(shè)計模式的選擇。虛擬實驗系統(tǒng)作為推廣性、擴展性強的開放式互動系統(tǒng),一方面,隨著實驗要求的提高和實驗種類的增加,極有可能需要拓展新的實驗模塊;另一方面,作為互動平臺的虛擬實驗室在設(shè)計過程中難免出現(xiàn)對使用者操作考慮不周的情況,故系統(tǒng)出現(xiàn)BUG、功能異常及存在人性化設(shè)計缺陷的情況不可避免。如果在設(shè)計階段沒有一個合理的設(shè)計模式做基礎(chǔ),將會導致所開發(fā)的系統(tǒng)完成后不僅難于擴展新功能,更不利于代碼的維護和更新。
教學用虛擬實驗室系統(tǒng)可以分為三個部分:模型及后臺數(shù)據(jù)、用戶界面和用戶操作。MVC模式正是使應(yīng)用程序按上述三個部分劃分所需要的對象:M為模型(Model),也包括后臺數(shù)據(jù),一個模型能為多個視圖提供業(yè)務(wù)數(shù)據(jù)。同一個模型可以被多個視圖重用。V為視圖(View),指用戶界面,可以向模型查詢業(yè)務(wù)數(shù)據(jù),但不能直接改變模型中的業(yè)務(wù)數(shù)據(jù)。視圖還能接收模型發(fā)出的業(yè)務(wù)數(shù)據(jù)更新事件,從而對用戶界面進行同步更新。C代表控制器(Controller),即用戶操作,接收用戶的輸入并調(diào)用模型和視圖去完成用戶的請求。MVC模式的簡單結(jié)構(gòu)如圖1所示。
Figure 1 MVC structure diagram圖1 MVC結(jié)構(gòu)示意圖
首先,操作者根據(jù)視圖提供的界面對其進行操作,控制器接收到視圖轉(zhuǎn)發(fā)過來的用戶的輸入信息,并通知相應(yīng)的模型做出處理;然后,模型用相應(yīng)的方法來處理這些信息并返回數(shù)據(jù);最后,通過控制器通知與這些數(shù)據(jù)相關(guān)的視圖更新[7]。顯然,對于具有這種體系結(jié)構(gòu)的可視化組件,可以利用這樣的內(nèi)部機制,通過模型對數(shù)據(jù)的存儲及維護功能,控制輸入和輸出。使用MVC需要花費一定的時間和精力去進行精心的設(shè)計,但采用它將會使軟件在健壯性、代碼重用和結(jié)構(gòu)方面上一個新臺階。盡管在最初構(gòu)建MVC框架時會花費一定的工作量,但從長遠角度看,它會大大提高后期軟件開發(fā)的效率。
下面以開發(fā)全機氣動力系數(shù)測量實驗(界面見圖2)為例,說明設(shè)計方案的形成過程。
Figure 2 Aerodynamic coefficients of the whole aircraft measurement interface圖2 全機氣動力系數(shù)測量實驗界面
分析實驗的運行流程,判斷其所有可能的操作及相應(yīng)事件。全機氣動力系數(shù)測量實驗基本流程如圖3所示。
根據(jù)如圖3所示的流程圖可以看出,居中一列在虛擬實驗平臺中負責對數(shù)據(jù)和各控件參數(shù)進行初始化,響應(yīng)用戶操作并根據(jù)實驗原理調(diào)用內(nèi)部算法對參數(shù)進行更新,最后將結(jié)果傳遞出去,這一部分承擔了模型(Model)的主要職責;右側(cè)一列主要負責界面各個控件的顯示,根據(jù)模型返回的數(shù)據(jù)實時調(diào)整機體的姿態(tài)位置、顯示測量結(jié)果,即可將該部分看做視圖(View);而靠左一列控制著實驗的流程,傳遞著用戶的指令,實現(xiàn)了界面和算法的交互,即扮演著控制器(Controller)的角色。通過上面的劃分,對虛擬實驗平臺進行總體設(shè)計,將整個開發(fā)項目分作界面層、控制層、數(shù)據(jù)層三層,并對開發(fā)小組進行分工,同步對三層進行開發(fā),界面定制完畢后通過類綁定與控制層、數(shù)據(jù)層進行交互和通信,三者相互協(xié)調(diào),完成實驗所需的功能。
Figure 3 Aircraft aerodynamic coefficients measurement basic flowchart圖3 全機氣動力系數(shù)測量實驗基本流程圖
在虛擬實驗平臺具體的開發(fā)實現(xiàn)中,選擇Flash作為主體工具,本節(jié)將重點關(guān)注如何利用Flash進行可重用控件的開發(fā),再將這些控件進行有機組合,并結(jié)合實驗原理通過模塊內(nèi)部的算法來復現(xiàn)實驗現(xiàn)象。
虛擬教學實驗平臺中的不同實驗科目之間有很多相通之處,為降低開發(fā)難度,縮短開發(fā)周期,在系統(tǒng)設(shè)計時采用了模塊化理念,其主要思想是把實驗中相通的部分看作一個模塊,將它們做成一個或一組影片剪輯(MovieClip)。例如,可將風洞開關(guān)或?qū)嶒炚f明作為一個模塊,設(shè)計實驗場景時只需將它拖入舞臺,根據(jù)需要稍加修改即可。
要實現(xiàn)模塊化,類綁定技術(shù)將大量運用。以往的Flash開發(fā)多將代碼寫在幀上,雖然幀代碼直接、簡單,但代碼分散在不同層、不同影片剪輯的不同幀中,因此代碼不易于維護且?guī)缀鯖]有重用性。要想使一個控件具有較好的可移植性,或者希望一類控件都具有良好的可移植性,就需要使用類綁定降低代碼和影片的耦合度。
以全機氣動力系數(shù)測量實驗中的風洞開關(guān)按鈕為例,這個按鈕上有靜態(tài)文字,以便需要更換按鈕的說明文字時不必對按鈕的每一幀都修改,另外當鼠標在按鈕或文本上時,鼠標均會變成手指的形狀,該按鈕的功能是點擊開啟風洞,同時初始化各項參數(shù)開始實驗。為了實現(xiàn)這些效果和功能,首先將按鈕外觀設(shè)計好,再設(shè)置一個靜態(tài)文本“開啟風洞”轉(zhuǎn)化為影片剪輯并命名為label_txt,將兩者放在同一個影片剪輯中,將BasicButton.as綁定到該影片剪輯上,BasicButton.as代碼如下:
package{
import flash.display.*;
import flash.events.*;
import flash.text.*;
public class BasicButton extends MovieClip{
private var_lable:String;
private var allButtons:Array;
public function BasicButton(){
buttonMode=true;
label_txt.mouseEnabled=false;
this.addEventListener(MouseEvent.CLICK,clickButton);
function clickButton(evt:MouseEvent):void{
Global.windstatus=true;
var wag:windArrowGroup= new windArrowGroup();
wag.x=230;
wag.y=15;
stage.addChild(wag);
}
}
}
}
代碼中windArrowGroup為影片剪輯(MovieClip),它包含一組表示風向的箭頭,并令其為ActionScript導出,從而自動生成默認的類來進行綁定。這樣我們需要批量創(chuàng)建類似的按鈕時,只需要改變靜態(tài)文本和BasicButton.as中的功能代碼即可。比如要實現(xiàn)關(guān)閉風洞的按鈕功能時,只需在庫中復制開啟風洞的 MovieClip,并將新MovieClip的靜態(tài)文本改成“關(guān)閉風洞”,同時將BasicButton.as中addChild換成removeChild,另存為BasicButton2.as并將其綁定在關(guān)閉風洞的MovieClip上即可。這樣進行控件開發(fā)省時省力,更重要的是結(jié)構(gòu)清晰,易于維護和查錯。
利用MVC設(shè)計模式和模塊化思想,能使開發(fā)周期大大縮短,隨著開發(fā)的進行,加入一個新的實驗功能往往只需一到兩天便可實現(xiàn)。
實驗操作者對界面功能不熟悉,在實驗中難免出現(xiàn)流程錯誤或參數(shù)輸入錯誤,因此在本系統(tǒng)中設(shè)置了實驗容錯系統(tǒng)和誤操作提示功能。例如,在雷諾實驗中測定下臨界雷諾數(shù)時,若未將無級調(diào)速器開至最大位置就點擊開始實驗,系統(tǒng)將提示學員首先操作可控無級調(diào)速器。
在翼型表面壓力分布測量實驗時,如果調(diào)節(jié)風洞風速過大,則會提示到達風洞風速上限。這種人性化的提示使實驗過程更加完整,方便學員熟悉實驗流程,具有更強的沉浸感,使虛擬實驗逐漸回歸現(xiàn)實[8]。
使用異常處理機制的最主要原因是讓程序更加健壯、更加易于維護。有時,根本不能通過修改代碼來處理異常,原因是有的異??赡軄碜杂诘谌浇M件或者源碼的缺陷。如果是第三方編譯好的組件,則不能訪問其代碼。如果是源碼,可能由于其結(jié)構(gòu)龐大,缺少詳細文檔,查錯困難,不如在自己的代碼中集中處理這些異常。因此,在本系統(tǒng)的代碼設(shè)計中,碰到異常就盡可能就地解決。如果在當前代碼中無法處理,那么再繼續(xù)拋出,并寫好注釋,方便日后修改和調(diào)試。
異常發(fā)生后,系統(tǒng)將在代碼及使用的第三方工具中,記錄下異常的發(fā)生原因、次數(shù)和發(fā)生場景,生成的錯誤日志對日后的調(diào)試和維護非常重要。同時,注重編程規(guī)范,杜絕使用空代碼處理異常的現(xiàn)象[5,9]。
本文在對空氣動力學的理論研究和實驗研究的基礎(chǔ)上,采用MVC設(shè)計模式站在全局規(guī)劃的高度,利用模塊化思想構(gòu)建了界面友好實時交互的網(wǎng)絡(luò)化空氣動力學虛擬實驗室。該系統(tǒng)的設(shè)計思路更加清晰,可操作性強,便于多人分工協(xié)作,注重代碼的重用性和健壯性,方便了系統(tǒng)功能的拓展和維護,并為接下來進行的虛擬現(xiàn)實項目打下了基礎(chǔ)。
通過學生對該虛擬實驗平臺的使用,對比仿真實驗的模擬結(jié)果與真實實驗結(jié)果可以看到,虛擬實驗平臺能夠獲得較準確合理的結(jié)果。而在Linux服務(wù)器上,該平臺亦能穩(wěn)定運行。本文設(shè)計的空氣動力學虛擬實驗平臺更加人性化,操作簡便,功能較全面,跨平臺、跨操作系統(tǒng)的能力強,可適用多種網(wǎng)絡(luò)交互客戶端。同時,系統(tǒng)虛擬的實驗過程完整,更具沉浸性,使虛擬實驗逐漸回歸現(xiàn)實,并可以利用Flash的網(wǎng)絡(luò)優(yōu)勢輕松實現(xiàn)在線互動。使用者通過模擬過程,可達到熟悉實驗儀器和裝置、掌握實驗操作過程的目的,能夠滿足儀器操作培訓、實驗教學的網(wǎng)絡(luò)學習等方面的需要。
憑借其獨有的技術(shù)和經(jīng)濟優(yōu)勢,虛擬儀器和虛擬實驗室將成為今后實驗室建設(shè)的研究重點并具有廣闊的發(fā)展前景。在下一步的工作中,將進一步深入研究加入語音的實時交互與更多線上交互功能,未來的方向主要是實現(xiàn)虛擬與現(xiàn)實儀器協(xié)同化、同步化,真正建立起立體化全時空的網(wǎng)絡(luò)三維仿真虛擬實驗室。
[1] Li Xin.Virtual reality and its educational applications[M].Beijing:Science Press,2008.(in Chinese)
[2] Chen Juan,Wang Xiao-ping,Lu Jian-feng.Development of virtual aerodynamic experimental platform based on flash technology[J].Mechatronics,2010,16(1):43-45.(in Chinese)
[3] Zhang Gang,Luo Xiao-h(huán)ua,He Li-fang.Research on technologies to support web virtual lab[J].Research and Exploration in Laboratory,2008,27(3):55-58.(in Chinese)
[4] Ma Zheng,Zhou Yan,Xie Shi-bo.Research and applications of MVC design pattern in NMS[J].Journal of University of Electronic Science and Technology of China,2005,34(5):51-56.(in Chinese)
[5] Sun Ying.Flash ActionScript 3:Halls of the road[M].Beijing:Electronic Industry Press,2009.(in Chinese)
[6] Peng Gui-fu,Gu Ji-ye,Xu Qing.Design of the virtual experiment system based on RIA technology[J].Computer CD Software and Applications,2010(8):172-176.(in Chinese)
[7] Liu Zhi-guang,Wang Hai-yong,Li Jian,et al.The construction of workstations for networked physical chemistry virtual laboratory based on MVC design pattern and Flash component technology[J].Computers and Applied Chemistry,2007,24(8):1110-1114.(in Chinese)
[8] Liu Zhi-guang,Hu Zhao-qin,Wang Hai-yong,et al.The research and construction of emulational virtual chemistry lab(E-VCL)for the electric potential analysis based on Flash[J].Computers and Applied Chemistry,2006,23 (10):1023-1030.(in Chinese)
[9] Sutter H,Alexandrescu A.C++coding standards 101rules,guidelines,and best practices[M].Hongkong:Pearson Education Asia Ltd,2006.
附中文參考文獻:
[1] 李欣.虛擬現(xiàn)實及其教育應(yīng)用[M].北京:科學出版社,2008.
[2] 陳娟,王曉平,陸劍峰.基于Flash技術(shù)的虛擬氣動實驗平臺的開發(fā)[J].機電一體化,2010,16(1):43-45.
[3] 張剛,羅小華,賀利芳.構(gòu)建網(wǎng)絡(luò)虛擬實驗室技術(shù)研究[J].實驗室研究與探索,2008,27(3),55-58.
[4] 馬爭,周艷,謝世波.MVC設(shè)計模式在網(wǎng)管系統(tǒng)中的應(yīng)用與研究[J].電子科技大學學報,2005,34(5):51-56.
[5] 孫穎.Flash ActionScript 3殿堂之路[M].北京:電子工業(yè)出版社,2009.
[6] 彭桂馥,顧繼業(yè),徐青.基于RIA技術(shù)的虛擬實驗室系統(tǒng)設(shè)計[J].計算機光盤軟件與應(yīng)用,2010(8):172-176.
[7] 劉志廣,王海勇,李健,等.基于MVC設(shè)計模式和Flash組件技術(shù)構(gòu)建物理化學網(wǎng)絡(luò)虛擬實驗室工作站的報告[J].計算機與應(yīng)用化學,2007,24(8):1110-1114.
[8] 劉志廣,胡照琴,王海勇,等.基于Flash技術(shù)的電位分析仿真虛擬實驗室的構(gòu)建方法研究[J].計算機與應(yīng)用化學,2006,23(10):1023-1030.