劉桂艷, 王一拙, 楊建梅, 計(jì)衛(wèi)星, 高玉金
(1. 北京理工大學(xué) 生命學(xué)院, 北京 100081; 2. 北京理工大學(xué) 計(jì)算機(jī)學(xué)院, 北京 100081)
虛擬仿真技術(shù)探索與實(shí)踐
面向藥物化學(xué)類實(shí)驗(yàn)的虛擬裝配引擎VAEPCE
劉桂艷1, 王一拙2, 楊建梅1, 計(jì)衛(wèi)星2, 高玉金2
(1. 北京理工大學(xué) 生命學(xué)院, 北京 100081; 2. 北京理工大學(xué) 計(jì)算機(jī)學(xué)院, 北京 100081)
使用Java語(yǔ)言設(shè)計(jì)了一個(gè)簡(jiǎn)便的實(shí)現(xiàn)藥物化學(xué)實(shí)驗(yàn)虛擬化的虛擬實(shí)驗(yàn)設(shè)備裝配引擎——VAEPCE。主要介紹了VAEPCE中藥物化學(xué)類虛擬實(shí)驗(yàn)裝置和器件的內(nèi)部數(shù)據(jù)表示、虛擬裝配過(guò)程關(guān)鍵技術(shù)和連接正確性檢查的實(shí)現(xiàn)原理。使用VAEPCE可以方便地設(shè)計(jì)虛擬裝置、定制虛擬器件、實(shí)現(xiàn)虛擬裝配和標(biāo)準(zhǔn)裝配流程展示等功能。
藥物化學(xué)實(shí)驗(yàn); 虛擬化實(shí)驗(yàn); 虛擬裝配; 裝配引擎
實(shí)驗(yàn)教學(xué)虛擬化是現(xiàn)代計(jì)算機(jī)與電子技術(shù)在實(shí)驗(yàn)教學(xué)中的應(yīng)用。虛擬化實(shí)驗(yàn)教學(xué)與傳統(tǒng)的實(shí)體實(shí)驗(yàn)教學(xué)相比,在教學(xué)成本、過(guò)程可重現(xiàn)性、標(biāo)準(zhǔn)化等方面具有很大的優(yōu)勢(shì)[1]。目前,很多高校在實(shí)驗(yàn)教學(xué)中引入虛擬實(shí)驗(yàn)作為輔助教學(xué)手段,并將其作為實(shí)驗(yàn)教學(xué)改革的主要內(nèi)容之一[2]。虛擬化實(shí)驗(yàn)作為輔助手段,對(duì)于耗時(shí)長(zhǎng)、耗材毒性大或易燃易爆等危險(xiǎn)類實(shí)驗(yàn)尤其具有重要意義。
目前市場(chǎng)上的虛擬化工具軟件適用范圍廣、功能強(qiáng)大[3],應(yīng)用也十分復(fù)雜,但并不適合很多本科教學(xué)的簡(jiǎn)單實(shí)驗(yàn)虛擬化[4]。筆者基于藥物化學(xué)類實(shí)驗(yàn)虛擬化原理的研究成果和經(jīng)驗(yàn),使用Java語(yǔ)言設(shè)計(jì)了一個(gè)簡(jiǎn)便的虛擬實(shí)驗(yàn)設(shè)備裝配引擎——VAEPCE(virtual assembly engine for pharmaceutical chemistry experiment),該引擎原理簡(jiǎn)單,使用和掌握十分方便,適用于大部分虛擬實(shí)驗(yàn)裝置的裝配虛擬化。
任何實(shí)驗(yàn)都會(huì)使用若干套實(shí)驗(yàn)裝置,各實(shí)驗(yàn)裝置在實(shí)驗(yàn)過(guò)程中相對(duì)獨(dú)立,并且有不同的結(jié)構(gòu)和功能。在特定的實(shí)驗(yàn)中,這些裝置按照實(shí)驗(yàn)的需求,按照特定的操控流程運(yùn)行。
根據(jù)面向?qū)ο蠹夹g(shù)的原理[5-7],虛擬化裝置是裝置結(jié)構(gòu)(即對(duì)象的內(nèi)部靜態(tài)結(jié)構(gòu))、行為功能和操控流程3方面信息的匯集。
(1) 裝置結(jié)構(gòu)。指構(gòu)成虛擬裝置的各種虛擬器件及其之間的關(guān)系,包括各器件在顯示屏幕上的位置、外形、輪廓、紋理以及器件之間的鄰接關(guān)系等。
(2) 行為功能。指虛擬裝置在內(nèi)部激勵(lì)或外部輸入輸出驅(qū)動(dòng)下,按照自身運(yùn)行規(guī)律所呈現(xiàn)出的行為和功能,是構(gòu)成裝置的所有器件的行為功能的集合。這里的“行為”特指內(nèi)部狀態(tài)的變化,而“功能”則是指裝置在不同狀態(tài)引發(fā)的輸入和輸出。
(3) 操控流程。實(shí)驗(yàn)裝置通常具有多項(xiàng)功能,虛擬實(shí)驗(yàn)的過(guò)程就是操作者發(fā)出操控指令(即實(shí)驗(yàn)操作)、調(diào)用實(shí)驗(yàn)裝置功能的過(guò)程。顯然,即便使用同樣的裝置,不同操控流程也將實(shí)現(xiàn)不同的實(shí)驗(yàn)過(guò)程。預(yù)先編制的標(biāo)準(zhǔn)操控流程可用于判定操作者實(shí)時(shí)操控過(guò)程的正確性,也用于驅(qū)動(dòng)裝置標(biāo)準(zhǔn)使用過(guò)程的演示。
在虛擬實(shí)驗(yàn)軟件系統(tǒng)中,上述三方面的模型以軟件方式運(yùn)行于計(jì)算機(jī)中,各種相關(guān)圖形、圖像、音視頻等呈現(xiàn)在學(xué)習(xí)者面前,學(xué)習(xí)者對(duì)虛擬裝置的操控,如同在現(xiàn)實(shí)世界中對(duì)實(shí)體實(shí)驗(yàn)裝置的使用[8-9]。
實(shí)驗(yàn)虛擬化原理適用于大多數(shù)實(shí)驗(yàn)過(guò)程,但本文主要關(guān)注于虛擬實(shí)驗(yàn)設(shè)備的裝配[10],因此,下文的操控流程特指虛擬裝置的裝配流程,器件行為功能也特指與器件擺放姿態(tài)等有關(guān)的行為。
要實(shí)現(xiàn)虛擬裝配,就需要實(shí)現(xiàn)器件外觀圖在屏幕上的拖動(dòng)、器件本身在拖動(dòng)過(guò)程中的狀態(tài)數(shù)據(jù)更新、器件連接正確性檢查等功能,而這一切的基礎(chǔ)是實(shí)現(xiàn)實(shí)驗(yàn)裝置的建模,即虛擬裝置在軟件內(nèi)部的數(shù)據(jù)結(jié)構(gòu)。
2.1 裝置與器件內(nèi)部格式
根據(jù)上文的實(shí)驗(yàn)虛擬化原理,在VAEPCE中的實(shí)驗(yàn)裝置由多個(gè)實(shí)驗(yàn)器件構(gòu)成,這些具體器件可能是不同類型的,但顯然具有一些共性。實(shí)際上,不但實(shí)體實(shí)驗(yàn)設(shè)備是由器件構(gòu)成的,器件本身通常也是由各種零部件構(gòu)成的;但VAEPCE在器件虛擬化中,對(duì)于器件不再進(jìn)行更詳細(xì)的拆分,而是將各種器件的共性封裝成VirDev類。對(duì)于特定類型器件的特殊性質(zhì)和功能,使用VirDev的派生類描述。在具體建模中,為表示各種數(shù)據(jù)結(jié)構(gòu),需要引入更多的類,因此,VirDev具有如圖1和表1所示的靜態(tài)結(jié)構(gòu)。
類Location、Size用于描述屏幕直角坐標(biāo)和圖形的寬/高;類Face用于描述器件的外觀,其中含有外觀圖顯示比例尺、圖形坐標(biāo)(相對(duì)器件矩形輪廓左上角)以及圖形動(dòng)畫(huà)GIF文件的路徑。
VAEPCE器件圖上的一些點(diǎn)被稱作檢查點(diǎn),這些點(diǎn)使用ChechPoint類描述,其中包括點(diǎn)的相對(duì)坐標(biāo)和在該點(diǎn)需要進(jìn)行的檢查項(xiàng)目(CheckItem對(duì)象)。在虛擬裝配過(guò)程中適當(dāng)時(shí)刻,VAEPCE會(huì)調(diào)用特定函數(shù)對(duì)檢查點(diǎn)進(jìn)行檢查,以確定器件是否正確裝配。
圖1 VAEPCE的虛擬設(shè)備VirApp相關(guān)類結(jié)構(gòu)
類變量類型含義說(shuō)明VirDev虛擬器件devnameString器件名typeDEVICETYPE器件類型xyLocation位置,中心坐標(biāo)whSize尺寸,即寬和高alphaint旋轉(zhuǎn)角度,繞x軸和y軸mfaceFace外觀,如刻度等zorderint層次,覆蓋順序parentVirApp本器件所屬裝置cpointList
2.2 器件定制與更新
VAEPCE為虛擬裝配過(guò)程提供了相對(duì)便利的交互機(jī)制。例如,每當(dāng)從器件庫(kù)拖動(dòng)一個(gè)器件圖標(biāo)到裝配區(qū)(如圖2所示),當(dāng)鼠標(biāo)按鍵釋放時(shí),對(duì)于這個(gè)圖標(biāo),VAEPCE內(nèi)部會(huì)自動(dòng)創(chuàng)建相應(yīng)的VirDev派生類,并彈出該器件的屬性窗口,等待用戶填寫(xiě)空白的屬性信息(坐標(biāo)、類型等信息自動(dòng)填寫(xiě))。
盡管虛擬裝配過(guò)程所涉及的器件外觀圖都是靜態(tài)圖像,但由于在裝配過(guò)程中,器件會(huì)經(jīng)常被鼠標(biāo)拖動(dòng)到屏幕不同的位置、改變顯示層次,甚至被旋轉(zhuǎn),因此裝配過(guò)程中經(jīng)常需要對(duì)器件外觀進(jìn)行重新繪制,并將器件的位置、形狀等信息記錄下來(lái)。VAEPCE的這個(gè)過(guò)程是結(jié)合GEF框架[10-11]實(shí)現(xiàn)的,VAEPCE本身只要提供存儲(chǔ)圖形的文件即可。實(shí)際上,VAEPCE的功能部分等同于簡(jiǎn)單的圖形用戶界面管理系統(tǒng)[12]。
當(dāng)結(jié)束器件圖在屏幕上拖動(dòng)、鼠標(biāo)左鍵抬起時(shí),VAEPCE調(diào)用該圖形類VirDev或其派生類的信息更新函數(shù)public void Update(Location xy,Sizewh,int alpha,intzOrder)對(duì)相關(guān)信息進(jìn)行存儲(chǔ),該函數(shù)調(diào)用Face類的publicvoid Draw(VirDev parent),并根據(jù)器件信息對(duì)器件模型進(jìn)行重新更新。在GEF中創(chuàng)建的控制器負(fù)責(zé)監(jiān)聽(tīng)模型變動(dòng),并更新模型可視化表示。
圖2 器件定制、設(shè)備組裝及提供界面
2.3 連接正確性檢查
在虛擬裝置裝配過(guò)程中,器件連接正確性檢查是虛擬裝配的核心問(wèn)題之一,VAEPCE使用了如下的簡(jiǎn)單機(jī)制。
2.3.1 預(yù)置檢查點(diǎn)
為實(shí)現(xiàn)連接正確性檢查,在設(shè)計(jì)器件和裝置外形圖時(shí),需要為參與某點(diǎn)連接的各個(gè)器件預(yù)置檢查點(diǎn),即物理上的檢查點(diǎn)位于器件的可能連接點(diǎn)處。只有擁有同類型檢查點(diǎn)的器件才能互連,并且連接點(diǎn)處所連接器件的檢查點(diǎn)必須為同類檢查點(diǎn)。
例如圖3(a)中的柱層析實(shí)驗(yàn)裝置,該裝置所需的鐵架臺(tái)(類SupporStand)、錐形瓶(類ErlenFlask)、硅膠柱(類Column)、管夾(類Holder)等器件上都預(yù)置了檢查點(diǎn)(圖3(b)),同類型檢查點(diǎn)為同色標(biāo)記(在VAEPCE中,這些檢查點(diǎn)是不顯示的)。
通常,每個(gè)器件可有多個(gè)不同類型的檢查點(diǎn),例如錐形瓶瓶口和瓶底的檢查點(diǎn)為不同類型。根據(jù)圖3(a),可理解VAEPCE的器件連接正確性的原理:在裝配過(guò)程中,當(dāng)不同器件的同類型檢查點(diǎn)的屏幕坐標(biāo)基本相同,則說(shuō)明器件連接關(guān)系正確。
圖3 器件檢查點(diǎn)與連接檢查示意圖
每個(gè)器件的檢查點(diǎn)存儲(chǔ)在VirDev數(shù)據(jù)成員cpoints所指向的List列表中。VAEPCE可在器件圖定制對(duì)話框中定制檢查點(diǎn)。
2.3.2 設(shè)置檢查項(xiàng)
實(shí)際上,在判斷器件連接關(guān)系是否正確時(shí),僅查驗(yàn)相連器件檢查點(diǎn)坐標(biāo)是否相同是不夠的,往往還需要對(duì)器件角度、相對(duì)位置以及其他約束條件進(jìn)行查驗(yàn),即一個(gè)檢查點(diǎn)具有多個(gè)檢查項(xiàng)。檢查項(xiàng)以類CheckItem描述,其中包含檢查項(xiàng)類型CHECKTYPE type、標(biāo)準(zhǔn)值intvalidvalue、錯(cuò)誤提示信息等數(shù)據(jù)成員(見(jiàn)圖1和表1)。
檢查項(xiàng)類型CHECKTYPE以enum類型的方式定義。以圖3中的器件為例,與其相關(guān)的檢查項(xiàng)類型定義如下,與每個(gè)檢查點(diǎn)關(guān)聯(lián)的是若干個(gè)檢查項(xiàng)。
publicenum CHECKTYPE {Unknown, LINK_Erlen_Column, // Green LINK_Erlen_Support, // Purple LINK_Holder_Support,// Red LINK_Holder_Column, // Blue Rot_XXXX, // This is for rotation …… }
VirDev提供的檢查機(jī)制僅僅適用于一般器件的簡(jiǎn)單裝配規(guī)則,對(duì)于某些特定器件的特殊約束條件,應(yīng)該在該器件類(VirDev派生類)提供專門(mén)的檢查函數(shù),并重寫(xiě)父類VirDev的連接正確性檢查函數(shù)。
2.3.3 連接檢查
通過(guò)上文檢查點(diǎn)和檢查類型的解釋,很容易理解連接正確性判據(jù)為:相連器件連接點(diǎn)處的檢查點(diǎn)位置相同、檢查項(xiàng)類型相同、檢查值相同,即VAEPCE進(jìn)行器件連接正確性檢查時(shí),只是檢查連接點(diǎn)附近各器件檢查點(diǎn)是否滿足上述3個(gè)“相同”:如是,則認(rèn)為連接正確;如否,則認(rèn)為連接錯(cuò)誤。
VAEPCE提供的連接正確性檢查有兩種:一種是對(duì)單個(gè)器件的連接性檢查,另一種是對(duì)所有器件的連接性檢查。對(duì)于單個(gè)器件的連接性檢查而言,驅(qū)動(dòng)該檢查的事件是當(dāng)用戶拖動(dòng)器件圖到裝配區(qū)后松開(kāi)左鍵時(shí),鼠標(biāo)消息傳遞給控制器,由控制器調(diào)用該器件所屬類(VirDev或其派生類)的正確性檢查函數(shù)。VirDev的檢查函數(shù)如下:
publicboolean Check(VirDevvd) {//This function just check this device with vd for(int i=0; i 可以看到,函數(shù)Check()遍歷當(dāng)前器件的所有兄弟器件(即當(dāng)前器件父類的所有器件),遍歷它們的所有檢查點(diǎn),查看當(dāng)前器件是否與它們正確連接。 對(duì)于所有器件的連接性檢查發(fā)生于用戶主動(dòng)申請(qǐng)進(jìn)行正確性檢查時(shí),該檢查過(guò)程是用戶點(diǎn)擊“連接性檢查”工具圖標(biāo)或選單項(xiàng)、控制器調(diào)用VirApp的正確性檢查函數(shù)實(shí)現(xiàn)的,該函數(shù)分別對(duì)VirApp的所有器件進(jìn)行連接正確性檢查,算法與單器件檢查類似。 在上述正確性檢查實(shí)現(xiàn)過(guò)程中使用了Java的多態(tài)性。由于正確性檢查函數(shù)的調(diào)用都是通過(guò)List 由于每個(gè)器件都有自己的特定功能,這個(gè)功能不適合在VirDev描述,而應(yīng)該放置在VirDev的派生類中。由于篇幅所限,對(duì)于器件功能虛擬化主要涉及器件功能建模、器件外觀動(dòng)畫(huà)制作和動(dòng)畫(huà)播放控制等,本文僅給出VAEPCE實(shí)現(xiàn)功能虛擬化的策略。 由于VAEPCE涉及大量的交互,為便于實(shí)現(xiàn),除上述虛擬器件外,還應(yīng)提供虛擬操作者類Actor,該類對(duì)象負(fù)責(zé)與現(xiàn)實(shí)世界的學(xué)習(xí)者交互,根據(jù)學(xué)習(xí)者的鼠標(biāo)和鍵盤(pán)操作,建立裝配子流程,按照該流程調(diào)用VirApp、VirDev或者通知GEF控制器。 在VAEPCE實(shí)現(xiàn)中,還可以將預(yù)先定義的裝配流程存儲(chǔ)于Actor對(duì)象中,由其按照該流程控制進(jìn)行虛擬裝置標(biāo)準(zhǔn)裝配過(guò)程的自動(dòng)演示。 VAEPCE目前已經(jīng)應(yīng)用于多個(gè)實(shí)驗(yàn)的虛擬化中,涉及到柱層析、旋轉(zhuǎn)蒸發(fā)儀、HPLC、索氏提取等多個(gè)實(shí)驗(yàn)裝置,這些應(yīng)用證明VAEPCE的虛擬化原理可行,基本能夠滿足本科實(shí)驗(yàn)教學(xué)中藥物化學(xué)實(shí)驗(yàn)虛擬化的需求。 References) [1] 孫丕波,周利江.一種通用性虛擬教學(xué)平臺(tái)的研究[J].中國(guó)科技信息,2006(8):288-289,285. [2] 宋象軍.虛擬實(shí)驗(yàn)室在高校實(shí)驗(yàn)教學(xué)中的應(yīng)用前景[J].實(shí)驗(yàn)技術(shù)與管理,2005,22(1):35-37,47. [3] 劉英杰,楊雪,闞寶朋.基于3ds Max和Virtools的大學(xué)物理虛擬實(shí)驗(yàn)的設(shè)計(jì)與開(kāi)發(fā)[J].現(xiàn)代教育技術(shù),2008(6):88-92. [4] 王晶琳,焦瑋.虛擬現(xiàn)實(shí)技術(shù)與應(yīng)用[J].實(shí)驗(yàn)技術(shù)與管理,2003,20(1):58-61. [5] Dale Skrien.面向?qū)ο笤O(shè)計(jì)原理與模式[M].騰靈靈,仲婷,譯.北京:清華大學(xué)出版社,2009. [6] 劉峰,陳媛,范偉.組件式虛擬實(shí)驗(yàn)系統(tǒng)面向?qū)ο蟮膶?shí)現(xiàn)方法[J].重慶理工大學(xué)學(xué)報(bào):自然科學(xué),2012(5):86-89. [7] 宋佳聲.面向?qū)ο蟮乃枷朐谔摂M儀器開(kāi)發(fā)中的應(yīng)用[J].計(jì)算技術(shù)與自動(dòng)化,2008(3):141-144. [8] 藺海曉,岳高偉,楊大方.材料力學(xué)虛擬演示實(shí)驗(yàn)的應(yīng)用與教學(xué)[J].實(shí)驗(yàn)技術(shù)與管理,2012,29(5):124-126. [9] 雷冬,朱飛鵬,殷德順,等.力學(xué)虛擬仿真教學(xué)實(shí)驗(yàn)室建設(shè)的探討[J].實(shí)驗(yàn)技術(shù)與管理,2014,31(12):95-96,100. [10] 黃河,張生貴,劉鋼,等.一種杠桿系統(tǒng)虛擬裝配方法:中國(guó),CN103678737A[P].2014-03-26. [11] 白明,張健.基于GEF的計(jì)算機(jī)組成原理實(shí)驗(yàn)仿真[J].實(shí)驗(yàn)技術(shù)與管理,2010,27(9):81-84. [12] 田邊,戴航,戴冠中,等.PDUIMS:基于持久存儲(chǔ)的用戶界面管理系統(tǒng)的設(shè)計(jì)與應(yīng)用[J].計(jì)算機(jī)學(xué)報(bào),2000,23(6):660-666. A virtual assembly engine for pharmaceutical chemistry experiment Liu Guiyan1, Wang Yizhuo2, Yang Jianmei1, Ji Weixing2, Gao Yujin2 (1. School of Life Science,Beijing Institute of Technology,Beijing 100081,China;2. School of Computer Science & Technology,Beijing Institute of Technology,Beijing 100081,China) A virtual assembly engine for pharmaceutical chemistry experiment is presented,with which the designation of the virtual apparatus,virtual devices,virtual assemblage and the exhibition of the standard flow for virtual assemblage can be finished easily. The principles for implementing the key techniques of virtual assemblage,apparatus and devices are elucidated. pharmaceutical chemistry experiment; virtualization experiment; virtual assembly; assembly engine 2015- 02- 04 北京理工大學(xué)教改項(xiàng)目“生命學(xué)科實(shí)驗(yàn)教學(xué)虛擬化及其可行性研究” 劉桂艷(1965—),女,吉林遼源,博士,副教授,主要從事天然藥物化學(xué)與天然產(chǎn)物生物轉(zhuǎn)化研究 E-mail:gyliu@bit.edu.cn 高玉金(1974—),男,河南新野,博士,講師,主要從事計(jì)算機(jī)體系結(jié)構(gòu)和軟件工程自動(dòng)化的研究和教學(xué). E-mail:paulgyj@bit.edu.cn TP391.9 A 1002-4956(2015)10- 0111- 043 關(guān)于功能虛擬化和虛擬操控者
4 結(jié)束語(yǔ)