成丕富 周 青 朱 力 孔德明
摘 要:計算機仿真輔助教學比起傳統的教學模式有很大的優勢。利用DLL動態鏈接庫技術解決VB和Matlab編程的接口問題,將VB的可視化界面功能與Matlab強大的繪圖功能結合起來,實現二者混合編程,開發出了光學實驗的仿真模擬系統。該系統具有人機交互好,生動形象,易于操作等特點,并且可以脫離VB和Matlab單獨運行。通過在物理實驗室的試用表明,該系統真正實現了輔助實驗教學。
關鍵詞:光學實驗模擬;Matlab;VB;DLL
中圖分類號:G434;G642.423 文獻標識碼:B 文章編號:1004-373X(2009)04-169-03
Development of Optical Experiment Simulation System Using Matlab and VB
CHENG Pifu1,ZHOU Qing1,ZHU Li1,KONG Deming2
(1.School of Civil Engineering and Architecture,Central South University,Changsha,410075,China;
2.School of Physics Science and Technology,Central South University,Changsha,410075,China)
Abstract:Computer simulation-aided instruction has an advantage over traditional instruction mode.This paper describes mainly about using the technology of DLL to realize merging programming,integrating the visual interface of VB and the strong plot function of Matlab.Based on this,the optical experiment simulation system is developed.The system is chara-cterized by its mutualness between person and computer,lifelikeness,as well as easiness to use.And it can run separately without VB and Matlab.The probation in physics laboratory indicates the system can truly aid in experiment instruction.
Keywords:optical experiment simulation;Matlab;Visual Basic;DLL
0 引 言
隨著計算機技術的迅猛發展和教育教學現代化的需要,計算機正逐漸走進學校,走進課堂。計算機輔助教學以其靈活、生動、形象、鮮明的文字、聲音、圖形和動畫等豐富多彩的表現形式,使物理實驗教學內容化難為易[1]。計算機輔助教學的出現改變了傳統的實驗教學的模式,促進教師教育觀念的轉變,通過人機交互、信息共享,拓展了學生的視野,很好地培養了學生創造性思維能力。
將計算機仿真技術用于光學實驗教學,不受實驗儀器和實驗場所的限制,可以通過改變實驗參數獲得不同的實驗結果,方便教師課堂演示,使課堂教學內容形象化,表現手段多樣化,創造一個生動活潑的學習氛圍,讓學生能夠結合形象的實驗現象更加深刻理解光學理論。開發光學實驗的仿真模擬系統,并將其運用到物理光學的教學和實驗當中,可以進一步提高大學物理實驗教學的現代化水平。
但是,由于光學實驗理論的復雜性、高水平仿真圖像和人性化仿真界面的要求,目前國內融合光學實驗的仿真系統開發還不多見。在此以VB為界面平臺,Matlab強大的繪圖、計算功能為基礎,解決了VB和Matlab的接口技術,開發出了光學實驗的仿真系統,并用于輔助實驗教學。
1 開發環境的選擇及技術
Visual Basic是由微軟公司開發的可視化編程語言之一,簡單易學而且功能豐富,能夠迅速有效地編制優良的可視化界面。Matlab是美國MathWorks公司推出的交互式、面向對象的程序設計語言,擅長處理數值計算和系統模擬仿真[2]。但是Matlab程序的執行速度比較慢,而且在界面設計方面遠遠比不上VB,VC 等軟件。鑒于二者各自的優勢,通過VB和Matlab的接口技術將VB功能強大的可視化界面與Matlab的繪圖功能結合起來,實現二者混合編程,即可開發出模擬光學實驗的軟件。
VB調用Matlab一直是一個難題,可以通過ActiveX自動化技術或Matlab的COM Builder技術實現。但是利用ActiveX時會在后臺啟動一個Matlab進程,不能脫離Matlab環境,而且實時性差;通過COM Builder技術雖然可以脫離Matlab環境,但是一些工具箱函數還是無法編譯,有一定的局限性,這兩種方法都難以滿足軟件開發的要求[3-5]。這里利用DLL動態鏈接庫方法實現了在VB中調用Matlab。
利用動態鏈接庫方法也就是將Matlab的M-文件轉變成為VB可以調用的DLL文件,從而實現VB對Matlab的調用[4,5]。具體過程如下:
(1) 利用Matlab編寫函數,并保存為M-文件。利用Matcom4.5軟件將其編譯為DLL文件,同時還會自動生成在VB中聲明DLL的模塊文件.bas文件和.cls文件。
(2) 把DLL文件拷貝到VB工程目錄或者是系統目錄system32下,并用上面生成的.bas文件聲明。
(3) 把生成的.cls文件添加到VB的公共模塊中。
(4) 在VB中引入MaxtrixVB庫作為與DLL的接口代理,Matlab編寫的函數就可以在VB中直接應用。
利用DLL技術能夠實現VB對Matlab的調用,這種方法可以方便地在自己開發的應用軟件中嵌入Matlab軟件的功能,實現自己的運算及圖像顯示。
2 系統設計
2.1 主體界面及設計思路
在實驗教學過程中,學生的學習過程應該是主動、自主學習的過程。本軟件的設計思想在于創立友好的人機交互界面,方便的仿真系統,開發面向學生、直觀、易于操作的輔助實驗教學軟件。在設計上,用一個主目錄窗體界面將主要的光學實驗整合在一起,這部分設計以文本屬性、窗體的鏈接為主,軟件主窗體如圖1所示。
圖1 系統目錄主界面
2.2 詳細設計說明
在各光學實驗的具體模擬中,每個光學實驗的模擬都含預習評價、實驗內容、數據處理、思考練習等部分,同時還有實驗擴展、技術應用等版塊,方便老師和學生查閱、練習,提高學生的創新能力。
以仿真模擬光柵衍射實驗為例介紹開發光學實驗仿真模擬系統的過程。
3 光柵衍射實驗的模擬
3.1 光柵衍射實驗的數學模型
設Е宋入射光波長;a為光柵上每一透光狹縫的寬度;d為光柵常數;φ為衍射角。一般光柵與光屏的距離D遠大于衍射條紋在光屏上偏離光屏中心的距離ys,б虼擻校
sin φ靬s/D
光柵衍射可以看作是N個相干光形成的縫間干涉和單縫衍射共同作用的結果。對于光屏上任一點P的光強度,等于N個相干光在該點產生的干涉光強度與寬度為aУ牡シ旆蚶屎頭蜒萇湓詬玫悴生的光強度的乘積,其強度可表示為[6]:
IP=I022
其中:I0為屏中心的最大光強;2為單縫衍射因子;(sin Nβ/sin β)2為多光束干涉因子;α=πa/λsin φ;β=πd/λsin φ。
3.2 編寫Matlab程序
根據光柵衍射實驗的數學模型,在Matlab環境下編寫光柵衍射實驗的raster.m函數文件。raster.m程序清單如下:
function y=raster(d,a,D,N,lam)
ym=1.5*lam*D/a; xs=ym;%設定圖幅范圍
n=1001;ys=linspace(-ym,ym,n);
for i=1:n%計算光強
sinphi=ys(i)/D;
alpha=pi*a*sinphi/lam; beta=pi*d*sinphi/lam;
B(i,:)=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;
B1=B/max(B);
end
NC=255; %確定繪圖灰度等級為255級
Br=(B/max(B))*NC;
subplot(1,2,1) ,image(xs,ys,Br);%畫光柵衍射圖像
colormap(gray(NC)); %用灰度顏色圖
subplot(1,2,2) ,plot(B1,ys);%畫出沿y方向的光強分布圖
3.3 將Matlab程序轉化為DLL文件
用Matcom4.5將M-文件轉化成DLL的操作步驟如下:
(1) 啟動運行Matcom,點擊菜單File/Compile to dll,選擇要寫好的raster.m文件。
(2) 點擊OK。這時在對應的Debug目錄下,有許多編譯生成的文件。在VB開發環境中需要用的文件有3個:raster.dll (DLL文件)、raster.bas(聲明DLL的模塊文件)、raster.cls(VB調用DLL的接口)。
3.4 在VB中調用DLL文件
(1) 界面設計。
在VB中新建一個工程,新建窗體。在窗體中添加控件并設置各控件的屬性(如圖2所示)。然后,通過編寫簡單程序建立文本框和相應滾動條之間的聯系。
圖2 光柵衍射實驗仿真模擬界面
(2) 導入MaxtrixVB庫和DLL文件。
為了能適應Matlab強大的矩陣運算功能,還必須將MaxtrixVB庫加入到工程中,過程為:點擊菜單Project,選擇Reference,在Reference對話框中復選Mmatrix,點擊OK。
將raster.bas和 raster.cls加入到工程中,將生成的raster.dll文件拷貝到System32目錄下。這樣就可以用raster.bas聲明raster.dll,并通過mymfile.cls建立VB調用raster.dll的接口。
(3) 主要程序代碼設計
Option Explicit ′函數申明
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte,ByVal bScan As Byte,ByVal dwFlags As Long,ByVal dwExtraInfo As Long)
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String,ByVal lpWindowName As String) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long,ByVal wMsg As Long,ByVal wParam As Long,lParam As Any) As Long
Private Sub Command1_Click() ′顯示圖像事件
Dim a(0 To 2),e,x ′定義變量
Dim winHwnd As Long,RetVal As Long
a(0) = Val(Text1.Text) ′獲取光柵常數
a(1) = Val(Text2.Text) ′獲取縫寬
a(2) = Val(Text3.Text) ′獲取縫數
a(3) = Val(Text3.Text) ′獲取光柵與屏的距離
a(4) = Val(Text3.Text) ′獲取入射光波長
e = raster(a) ′調用raster .dll文件
Call keybd_event(vbKeySnapshot,1,100,100) ′將彈出窗口的圖像拷貝到剪切板
DoEvents
Image1.Stretch = True
Image1.Picture = Clipboard.GetData(vbCFBitmap)′在圖像框中顯示圖像
winHwnd = FindWindow(vbNullString,"Figure 1")′找到彈出窗口句柄
If winHwnd <> 0 Then
RetVal = PostMessage(winHwnd,&H10;,0&,0&) ′關閉彈出的窗口
End If
End Sub
(4) 調試通過,設置參數后可以看到如圖2所示的效果。在VB中將程序生成可執行文件,再把相關的文件一起打包,制作成安裝包,就可以脫離VB和Matlab而單獨安裝使用。
4 結 語
用動態鏈接庫DLL方法成功實現了VB和Matlab的接口編程,并生成可執行程序,可以脫離VB和Matlab的環境單獨運行。這樣也隱藏了程序源代碼,提高了程序的保密性。
開發出基本光學實驗的模擬系統,實現了在實驗室做不出的實驗效果演示。該集成的光學實驗仿真系統可實現圖像的動態顯示,隨入射光波長的實時改變動態顯示光強分布的圖像,較為逼真。實驗窗口中的圖像可以由實驗者調試為單獨顯示模式,故而方便了實驗者對光學圖像的存儲。
本套光學實驗仿真系統已經在中南大學物理實驗室初步投入使用,彌補了光學實驗在此方面的空缺,提高了教學質量。而且還將提供給其他高校物理實驗室,輔助光學實驗教學。
參 考 文 獻
[1]李建平,胡瑋,董超,等.最大氣泡法測液體表面張力實驗多媒體CAI課件的開發與應用[J].實驗技術與管理,2007,24 (8):86-89.
[2]周憶,梁齊.用Matlab語言模擬光衍射實驗[J].大學物理實驗,2001,14(4):47-48.
[3]黃錫泉,姚竹亭.VB和Matlab無縫接口編程[J].微計算機應用,2005,26(2):238-240.
[4]譚炎,張凌燕.Matlab 與VB 混合編程技術研究[J].微計算機信息,2006,22(5):247-249.
[5]王正祥,劉載文,楊斌,等.Matlab 6.5與VB混合編程中的接口技術研究[J].微計算機信息,2006,22(10):187-189.
[6]鐘錫華,趙凱華.光學(上、下冊)[M].北京:北京大學出版社,1984.
[7]韓振海,賀德春.Matlab在波動光學教學中的應用[J].河西學院學報,2005,21(2):126-128.
[8]馮旭.在VB開發環境中調用由Matlab函數轉化的DLL[J].西北民族大學學報:自然科學版,2004,25(2):65-67.
[9]郭平.淺談VB與Matlab混合編程[J].廣西輕工業,2006,(5):78-79.
[10]符運良.Matlab在光學教學中的應用[J].華南熱帶農業大學學報,2004,10(3):55-57.
[11] 胡春霞,賀昌海,賀敏.在VB.NET中應用Matlab 實現三維數據可視化[J].微機發展,2005,15(5):66-71.
作者簡介 成丕富 男,1986年出生,山西平遙人,學士,中南大學橋梁工程系。
孔德明 男,1971年出生,河南新縣人,博士,中南大學物理實驗中心副主任,從事實驗教學、計算機仿真的研究。
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。