滕 凱,馬秀麗
(1.徐州工程學(xué)院,江蘇 徐州 221018;2.徐州機(jī)電技師學(xué)院,江蘇 徐州 221131)
隨著計算機(jī)和信息技術(shù)的飛速發(fā)展,虛擬仿真技術(shù)在航空航天、智能制造、化工能源、教育教學(xué)等領(lǐng)域都得到了廣泛的應(yīng)用和發(fā)展。數(shù)控虛擬仿真實(shí)驗(yàn)就是利用虛擬現(xiàn)實(shí)技術(shù),在虛擬制造環(huán)境中,借助視覺、聽覺及觸覺等傳感通道與虛擬環(huán)境進(jìn)行多維度的實(shí)時交互,完成程序編制、機(jī)床操作、工藝制定、加工制造等一系列工程訓(xùn)練。虛擬仿真不僅具有沉浸感和逼真性,而且還能夠降低實(shí)驗(yàn)風(fēng)險,減少資源投入,增強(qiáng)工程能力培養(yǎng)。
蔡衛(wèi)國[1]指出數(shù)控虛擬仿真彌補(bǔ)了設(shè)備老化、經(jīng)費(fèi)不足的缺陷,避免了撞刀、過切等現(xiàn)象,提高了實(shí)驗(yàn)安全性和機(jī)床利用率。李建廣等[2]以Excel表為考評數(shù)據(jù)載體,開發(fā)了數(shù)控虛擬仿真加工操作過程考核系統(tǒng)。高洪[3]將數(shù)控加工虛擬仿真項(xiàng)目與傳統(tǒng)加工虛擬仿真項(xiàng)目相結(jié)合,突破了傳統(tǒng)教學(xué)階段在時間和空間上的限制,彌補(bǔ)了傳統(tǒng)教學(xué)模式的不足,有效地提高了工程訓(xùn)練的教學(xué)效果。李淑穎等[4]將數(shù)控虛擬仿真與實(shí)際操作相結(jié)合,構(gòu)建了以項(xiàng)目驅(qū)動為導(dǎo)向的開放式實(shí)踐教學(xué)模式。
研究發(fā)現(xiàn),數(shù)控虛擬仿真在傳統(tǒng)意義上的模擬制造基礎(chǔ)上,增加了面向加工對象模型的幾何及物理性能仿真模塊,涉及到切削力、振動、切屑形成、工件表面質(zhì)量等諸多方面[5-7]。但這也導(dǎo)致仿真系統(tǒng)變得越來越龐大、復(fù)雜,交互界面變得越來越繁瑣,增加了實(shí)驗(yàn)操作難度。同時,虛擬仿真還忽略了與傳統(tǒng)教學(xué)的融合,缺少了教學(xué)資源、實(shí)踐項(xiàng)目等多方供給,進(jìn)而弱化了其在數(shù)控技術(shù)課程實(shí)驗(yàn)教學(xué)中的重要作用[8,9]。實(shí)驗(yàn)中發(fā)現(xiàn),學(xué)生經(jīng)常遇到由于原理理解不清、實(shí)驗(yàn)路線選擇不合理、仿真操作失誤等所導(dǎo)致的實(shí)驗(yàn)失敗現(xiàn)象。為此,本文開發(fā)設(shè)計了一款數(shù)控虛擬仿真實(shí)驗(yàn)輔助教學(xué)系統(tǒng),對實(shí)驗(yàn)流程進(jìn)行全程跟蹤與指導(dǎo),切實(shí)提高虛擬仿真實(shí)驗(yàn)實(shí)效。
在數(shù)控虛擬仿真系統(tǒng)構(gòu)架下,基于Visual Basic可視化編程環(huán)境,開發(fā)了實(shí)驗(yàn)輔助教學(xué)系統(tǒng)。該系統(tǒng)操作界面簡潔,人機(jī)交互友好,可實(shí)現(xiàn)與虛擬仿真系統(tǒng)交互運(yùn)行。它構(gòu)建了一個從實(shí)驗(yàn)?zāi)康摹⒃沓霭l(fā),以實(shí)驗(yàn)向?qū)閷?dǎo)引,逐步實(shí)現(xiàn)交互仿真實(shí)驗(yàn)的輔助教學(xué)系統(tǒng),實(shí)驗(yàn)流程如圖1所示。學(xué)生在虛擬實(shí)驗(yàn)中遇到任何問題,都可以通過實(shí)驗(yàn)輔助系統(tǒng)尋求幫助。
實(shí)驗(yàn)原理是整個實(shí)驗(yàn)設(shè)計的指導(dǎo)思想和依據(jù)。該模塊通過索引引導(dǎo)學(xué)生進(jìn)入多媒體教學(xué)環(huán)節(jié),通過調(diào)用實(shí)驗(yàn)導(dǎo)引課件、指導(dǎo)文件和視頻資源,使學(xué)生明確實(shí)驗(yàn)?zāi)康?,理清?shí)驗(yàn)原理,掌握實(shí)驗(yàn)難點(diǎn),把握實(shí)驗(yàn)關(guān)鍵。
數(shù)控虛擬仿真的實(shí)驗(yàn)方法與步驟是復(fù)雜多樣的,每一個學(xué)生都可以制定一個個性化的實(shí)驗(yàn)流程圖。也正因如此,部分學(xué)生很難制定出適合自己的實(shí)驗(yàn)方法與路線。實(shí)驗(yàn)向?qū)K可為學(xué)生提供經(jīng)典的實(shí)驗(yàn)路線規(guī)劃示例,供其參考;此外,學(xué)生也可通過模塊提供的“導(dǎo)向工具欄”進(jìn)行人機(jī)交互,不斷探求正確合理的實(shí)驗(yàn)方法與路徑。
數(shù)控虛擬仿真系統(tǒng)所提供的虛擬機(jī)床本體和數(shù)控系統(tǒng),往往與實(shí)體機(jī)床還是有一定的差別和不同,學(xué)生也很難加以明確區(qū)分[10]。為此,學(xué)生可通過實(shí)驗(yàn)輔助系統(tǒng)尋求線上或線下幫助,解決實(shí)驗(yàn)中遇到的任何問題,真正實(shí)現(xiàn)在做中學(xué)、在學(xué)中做。
圖1 實(shí)驗(yàn)流程
該模塊通過在Form窗體中創(chuàng)建一個OLE容器控件,可以在虛擬仿真應(yīng)用程序運(yùn)行期間預(yù)覽與調(diào)用PowerPoint課件、Word文檔、PDF指導(dǎo)手冊等文件,用以指導(dǎo)實(shí)驗(yàn)。
在Form窗體上右鍵選擇“菜單編輯器”,完成課件導(dǎo)引的下拉菜單設(shè)計,并在窗體上創(chuàng)建一個PictureBox控件,該控件中內(nèi)嵌1個OLE控件、3個CommandButton控件。
CommandButton的“名稱”屬性分別命名為:“播放”和“關(guān)閉”;CausesValidation屬性為Ture,執(zhí)行窗體頁面上的驗(yàn)證;“播放”控件Defauit屬性為True,讓該按鈕作為缺省的活動按鈕,缺省時,按回車鍵可以觸發(fā);“關(guān)閉”控件Cancel屬性為True,讓該按鈕作為缺省的取消按鈕,按ESC鍵可以觸發(fā)。
以“PPT”調(diào)用為例,在窗體中添加如下程序控制代碼:
Private Sub KJCall_Click() '課件調(diào)用
PPT播放
Courseware = "e:Microsoft Office PowerPoint實(shí)驗(yàn)原理.ppt"
OLE2.SourceDoc = Courseware '將對象插入,以便程序調(diào)用
OLE2.SourceItem = Courseware
OLE2.CausesValidation = True ' 失去焦點(diǎn)控件的Validate事件觸發(fā)
OLE2.Class= PowerPoint.Show.8' 設(shè)置嵌入對象的類名
OLE2. OLETypeAllowed =2-Either'設(shè)置OLE容器控件包含的對象類型
OLE2.Action = 1 '打開
End Sub
Private Sub PLAY_Click()'課件播放
OLE2.Action = 7 'DoVerb打開一個對象
Courseware = " "
End Sub
在VB6.0中利用API函數(shù)mciSendString()來播放MPEG、AVI、WAV、MP4等多媒體文件。
在Form窗體中創(chuàng)建1個PictureBox控件,用以實(shí)現(xiàn)MCISendString()的多媒體文件播放;再創(chuàng)建多個OptionButton控件和CommandButton控件,并按照邏輯關(guān)系分別添加到各自的Frame控件中,如圖2所示。
以“AVI”視頻調(diào)用為例,在窗體中添加如下程序控制代碼:
Private Sub Form_Load()'視頻調(diào)用
Dim AVI_Name As String, AVI As String
Dim S As Integer
For S = 0 To 13
Option1(S).CausesValidation = True
……
Next S
Select Case ShiPingJX
Case 0
AVI_Name = "e:視頻強(qiáng)化實(shí)驗(yàn)原理.avi"
Option1(0).Value = True
Case 1
……
End Select
mciSendString "close MyAVI", "", 0, 0 '關(guān)閉先前可能打開的avi文件
……
Picture1.ScaleMode = 3 'pixel設(shè)置Picture坐標(biāo)系單位為像素
Picture1.AutoSize = True '?picture根據(jù)載入的圖片自動調(diào)整大小
End Sub
Private Sub Command2_Click(Index As Integer) '播放/暫停
Dim s As Integer
Select Case Index
Case 0
mciSendString "play MyAVI", "", 0, 0 '播放
Case 1
mciSendString "pause MyAVI", "", 0, 0 '暫停
Case 2
Form_Unload 0 '關(guān)閉動畫文件
For s = 0 To 13
Option1(s).Value = False
Next s
Case 3
mciSendString "stop MyAVI", "", 0, 0 '停止
……
End Select
End Sub
數(shù)控虛擬仿真輔助系統(tǒng)添加了實(shí)驗(yàn)導(dǎo)引“快捷工具欄”和仿真解析模塊,學(xué)生可以根據(jù)工具欄指引和仿真解析來完成實(shí)驗(yàn)[11]。
圖2 多媒體強(qiáng)化模塊
在輔助系統(tǒng)Form窗體中,創(chuàng)建1個Toolbar標(biāo)準(zhǔn)工具欄,添加1個imagelist控件,并在imagelist的相應(yīng)屬性里依次添加若干個ico圖標(biāo)文件,然后在toolbar屬性的“通用”選項(xiàng)卡的圖像列表下拉菜單選擇“imagelist”;再在“按鈕”選項(xiàng)卡,按照實(shí)驗(yàn)步驟依次插入若干個快捷操作按鈕,每一個按鈕添加其對應(yīng)的“關(guān)鍵字”、按鈕“圖像”和“工具提示文本”,如圖3所示。
圖3 實(shí)驗(yàn)向?qū)?dǎo)引界面
實(shí)驗(yàn)向?qū)K的仿真解析功能實(shí)現(xiàn),是在輔助系統(tǒng)Form窗體中插入多個個性化用戶控件,以便實(shí)時展示仿真實(shí)例的刀具路徑圖。在操作界面的PictureBox控件中,創(chuàng)建1個RichTexBox控件數(shù)組,用來顯示仿真實(shí)例加工程序;創(chuàng)建1個TexBox控件數(shù)組,用來指示當(dāng)前執(zhí)行程序段。
虛擬仿真實(shí)驗(yàn)的在線交互系統(tǒng)采用Client/Server網(wǎng)絡(luò)結(jié)構(gòu)模式,通過TCP協(xié)議與用戶建立雙向的網(wǎng)絡(luò)連接服務(wù)[12],如圖4所示。通過在線網(wǎng)絡(luò)交互平臺,實(shí)現(xiàn)師生之間的實(shí)時交互,有力保障實(shí)驗(yàn)的順利進(jìn)行。
圖4 在線仿真交互系統(tǒng)
Client/Server通訊網(wǎng)絡(luò)通過設(shè)置服務(wù)端LocalPort屬性,來設(shè)定本地偵聽端口;通過設(shè)置客戶端RemotePort屬性,來設(shè)定遠(yuǎn)程偵聽端口。兩端口屬性值均為一個其他TCP/IP應(yīng)用程序沒有使用過的整數(shù)值。
服務(wù)端使用Listen()進(jìn)入偵聽狀態(tài),等待客戶機(jī)程序的連接請求??蛻舳耸褂肅onnect()向服務(wù)器提出連接請求,使服務(wù)器程序產(chǎn)生ConnectionRequest事件,該事件得到一個參數(shù)requestID。 服務(wù)器端用Accept()接受客戶端的requestID請求。這樣,客戶端就可以用SendData()發(fā)送數(shù)據(jù)了。Accept()依次用上一步得到的requestID作為其參數(shù)。 當(dāng)服務(wù)端用GetData()接收到數(shù)據(jù)時,產(chǎn)生DataArrival數(shù)據(jù)到達(dá)觸發(fā)事件。服務(wù)端進(jìn)行服務(wù)處理請求,用SendData()向客戶端發(fā)送數(shù)據(jù),如果接受到Close事件,則關(guān)閉TCP/IP連接??蛻舳擞肎etData()接收到應(yīng)答數(shù)據(jù),如果接受到Close事件,則關(guān)閉TCP/IP連接。
創(chuàng)建服務(wù)端與客戶端的Winsock控件源程序如下:
Private Sub scksever_ConnectionRequest(ByVal requestID As Long)
If scksever.State <> 0 Then scksever.Close
scksever.Accept requestID
End Sub
Private Sub scksever_DataArrival(ByVal bytesTotal As Long)
'數(shù)據(jù)到達(dá)觸發(fā)
Dim strdata As String
Dim sdata As String
scksever.GetData strdata
sdata = Left$(strdata, 7)
Select Case sdata'系統(tǒng)消息
Case "SYSINFO"
xtxx = Right$(strdata, Len(strdata) - 7)'發(fā)送消息
Case "SENDINF"
sendxx = Right$(strdata, Len(strdata) - 7)
sendform.sendtxt.Text = sendxx
Case "OUITMYF"'關(guān)閉服務(wù)端
scksever.Close
scksever.Listen
Timer1.Enabled = True
Case "GETFXIF"
xtxx = Right$(strdata, Len(strdata) - 7)
End Select
End Sub
Private Sub scksever_Click() '客戶端連接
If txtip.Text = "" Then
MsgBox "請輸入IP,后連接", vbInformation, "提示"
Exit Sub
Else
KeHuDuan.Enabled = False
sckclient.RemoteHost = txtip.Text '遠(yuǎn)程計算機(jī)名(IP)
sckclient.LocalPort = 1008 '本地機(jī)通信應(yīng)用程序端口
sckclient.RemotePort = 1007
sckclient.Connect '向遠(yuǎn)程主機(jī)發(fā)出連接請求
End If
End Sub
Private Sub sckclient_DataArrival(ByVal bytesTotal As Long) 'GetdData接收到數(shù)據(jù)時觸發(fā)
……
ClassName = Space(256)
ClassName = "Shell_TrayWnd"
StartWindow = FindWindow(ClassName, vbNullString)
wnd = FindWindow(sTrayWindow, vbNullString)
sckclient.GetData sdata
myCHUFA = Left$(sdata, 7)
Select Case myCHUFA
Case "JIAOHU" '信息交互
xinxi= Right$(sdata, Len(sdata) - 7)
infoform.Refresh
infoform.Show
Case "FZJH" '仿真交互
FangZhenJiaoHu
Case "JIANCE" '在線監(jiān)測
ZaiXianJianCe
……
Case "GuanBiXT" '退出
sckclient.SendData "關(guān)閉服務(wù)端"
End
End Select
End Sub
數(shù)控虛擬仿真雖然具有逼真性和沉浸感,但與實(shí)際操作還是有一定的差異,還不能完全用虛擬仿真代替實(shí)際數(shù)控加工實(shí)驗(yàn)。虛擬仿真實(shí)驗(yàn)輔助系統(tǒng)較好地解決了虛擬仿真與實(shí)體數(shù)控加工之間的銜接問題,拓展了實(shí)驗(yàn)教學(xué)的深度和廣度,提高了實(shí)驗(yàn)教學(xué)實(shí)效。