成丕富 周 青 朱 力 孔德明
摘 要:计算机仿真辅助教学比起传统的教学模式有很大的优势。利用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格式阅读原文。