VB和Matlab混合编程在圆度误差评定中的应用研究*
2011-09-26曾浩然张琳娜赵凤霞
曾浩然 张琳娜 赵凤霞
(郑州大学机械工程学院,河南郑州450001)
1 概述
圆度误差是控制回转体零件精度的一个重要指标,运用各种测量仪器对圆度误差进行测量时,不仅要运算大量的数据,而且需要将图形实时地显示出来,单纯采用一种编程语言很难满足要求。
Visual Basic由于其可视化的用户界面设计功能使程序设计人员摆脱繁琐复杂的界面设计,已经成为快速应用程序开发(RAD,Rapid Application Development)工具的代表;但其数学计算能力不强,尤其是在大量的数据处理、矩阵运算、优化计算时,编程复杂,工作量大,对程序设计人员要求高,开发效率低。
Matlab是Mathworks公司开发的一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言。它编程效率高,用户使用方便,语句简单,开放性较好,而且具有高效方便的矩阵运算,被广泛用于工程计算及数值分析等领域。但Matlab也是一种脚本解释语言,运算速度慢;且底层硬件操作和界面开发能力差;源代码的公开不利于算法和数据的保密,不能用于开发商用软件。而且,由于Matlab开发平台的局限性,在其上面开发的程序不能够脱离Matlab运行环境,在处理实际问题时就显得有些灵活性不足。
由于二者各自的特点,使用一种方法将他们结合起来,各献所长,将会给用户的开发带来极大的方便。本文基于VB和Matlab混合编程对圆度误差的评定进行了研究,重点研究了利用MatrixVB和COM组件实现VB和Matlab的混合编程,通过零件圆度误差评定的实例证明了该方法的可行性。
2 VB与Matlab混合编程的方法
VB与Matlab混合编程方法主要有以下几种:①DDE编程实现VB与Matlab混合编程。DDE(Dynamic Data Exchange,动态数据交换)是一种开放的、与语言无关的、基于消息的协议。它允许应用程序之间共享数据,是一种建立在Windows消息系统上支持应用程序之间数据交换的方法;②借助ActiveX技术实现VB与Matlab混合编程。它与具体的编程语言无关,是一种用于模块集成的新协议,允许应用程序或者组件控制另一个应用程序或组件的运行。ActiveX部件是一些遵循ActiveX规范编写的具有特定功能的可执行代码,在某一应用程序中增加ActiveX部件后,它将为应用程序增加新的功能。在VB环境下可以通过ActiveX自动化接口将Matlab作为VB的一个ActiveX部件调用;③通过COM组件技术实现VB与Matlab混合编程。Matlab 6.5以后的版本都提供了Matlab COM Builder,利用该工具能够将M函数文件编译成COM组件。生成的COM组件以DLL形式存在,VB集成开发环境可以直接调用。利用该方式可以脱离Matlab环境,具有很大的灵活性;④利用MatrixVB实现VB与Matlab混合编程。MatrixVB是MathWorks公司针对Visual Basic开发的一个插件,它包含了600多个Matlab基本函数,可以提供大量有效的算法,包括基本的数学运算、功能强大的信号处理、线性代数、优化运算及图形图像处理功能等。利用MatrixVB可以大大增强Visual Basic的计算功能和图形图像处理功能;⑤通过中间文件传递的方法实现VB与Matlab混合编程。用VB编写前端用户交互界面,收集一些必要的参数信息,并保存在一个中间文件中,可以利用异步程序调用的方法执行Matlab程序。
通过对以上5种混合编程方法的分析介绍,可以了解几种方法各有其特点。通过ActiveX实现VB和Matlab二者通信编程效率高,但脱离不了Matlab环境,占用内存大,执行速度慢,且在开发应用程序时使用不便。DDE方式时,必须打开Matlab,同样不能脱离Matlab环境。与ActiveX方式不同的是,使用DDE方式必须预先打开Matlab,而ActiveX可以自动打开Matlab软件。使用COM组件技术,可以将Matlab函数打包,完全脱离Matlab环境,在应用程序开发时使用此方法将特定功能函数打包使用,可以提高程序的开发效率。但在调用时,运行速度较低。matrixVB方法简单,编程效率高。
各种混合编程方法都有其优缺点,根据圆度误差评定的技术要求和特点,同时选择MatrixVB和COM组件两种方式实现VB和Matlab的混合编程,在系统软件开发过程中,充分利用了各自语言的优点。
3 COM组件的创建及调用
Matlab 6.5以后的版本都提供了 Matlab COM Builder,在使用COM Builder创建COM 组件之前需要对Matlab COM Builde进行配置,选择一种编译器,如Borland C++Builder 4、Borland C++Builder 5、Microsoft Visual Studio 6.0和 Microsoft Visual Studio.NET等。在Matlab中创建COM组件具体步骤如下:①以函数形式编写M文件。在M文件中,给出Matlab要完成的功能;②配置编译器,选择VC++或C;③在Matlab命令窗口输入 comtool,打开 Matlab/COM/Builder(如图1);④点击“file”按钮,选择“new/project”,新建一个工程;⑤加载编写好的M文件,并编译,生成 COM组件;待编译完成,选择 Component/Package Component,用以发布应用程序。打包后的主要文件及其功能见表1。
表1 应用COM Builder工具生成的文件
在VB中调用COM组件时事先需要将组件注册到目标计算机上,如果组件的创建与调用在同一台计算机则无需注册即可直接调用。注册的方法是将上面组件创建过程中第⑤步产生的文件夹拷贝到目标计算机上并执行解压缩操作,然后执行解压文件夹中distrib文件夹下的组件动态链接文件进行注册,之后把注册生成的所有DLL文件拷贝到计算机的$windowssystem32目录下即可完成注册。最后在VB中新建一个工程项目,打开该工程项目的ProjectReference对话框,引用已经注册完成的组件就可以在下面的程序中调用M文件编写的相应函数。
4 基于混合编程的圆度误差评定实例
4.1 用VB调用Matlab优化函数
在圆度误差评定的4种方法中,除最小二乘法外,其他3种评定方法:最小区域法、最小外接法和最大内接法在拟合时都会涉及到一个非线性优化函数(linprog函数)。直接用VB编写优化函数技术难度太大,效率太低,不易实现。虽然MatrixVB也提供了优化运算函数(如lp函数),但经过实际测试,在处理大量数据时,这些函数运算速度慢,效率低,精度不高。因此,我们采用COM组件的方式,将linprog函数打包直接在VB中调用。经过实际测试发现该方法效率高,速度快,精度也较高。具体步骤为:
(1)编写优化算法的M文件。注意:一定是Matlab函数形式的M文件。代码如下:
(2)确认 M文件无误后,根据前面讲述的方法打开 Matlab COM Builder,并新建工程。新建工程名和类名分别为 lpcom和 lpcomclass,如图2所示。
(3)加载编好的 M文件,并打包。
(4)打包之后,在程序设计时,打开VB引用对话框,选择 lpcom 1.0 Type Library(如图3所示)。编写代码时,就可以直接引用了。调用部分关键代码如下:
优化求解的结果保存在变量yp中。可见采用此方法实现混合编程方法简单、实用。
4.2 混合编程评定圆度误差
下面以回转体几何误差中圆度误差为例,利用VB和Matlab混合编程,开发了圆度误差评定系统,该系统是VB对已经生成的COM组件的引用。评定结果如图4~7所示,圆度误差的计量结果如表2所示。
表2 圆度误差计量结果 μm
5 结语
本文研究了VB与Matlab混合编程方法,利用Matlab强大的计算与数值分析能力,结合VB丰富的可视化界面功能,可以提高开发软件的性能,降低开发难度,缩短开发周期。因此,将VB和Matlab有机地结合起来将会对科研过程和工程实际产生巨大的影响,使程序更加专业和灵活,为商业软件的开发提供了可能性,具有较高的实际意义。
本文所有程序均在VB6.0和Matlab6.5下调试通过,而且这里所得到的评定结果十分理想,代码简单、程序可移植性更高。结合实验室现有圆柱度仪通过大量测量实例证明了该方法的正确性。这种方法还可以推广到圆柱度、直线度、平面度等形状误差的评定计算过程中。
[1]岳玉芳,尤忠生,张玉双.基于COM的VB与Matlab混合编程[J].计算机工程与设计,2005(1),61 -65.
[2]王梦蛟,王丽莉.基于COM组件的VB与Matlab混合编程在医学影像处理中的应用[J].医院数字化,2009(24):32-33.
[3]管亮,冯新沪.VB6.0调用 Matlab6.5编程的实现[J].控制工程,2004(11):54-56.
[4]Matlab COM Builder user's guide[Z].TheMathworks Inc,2002.
[5]方沁林,徐振高.圆度误差评定的算法研究与软件设计[D].中国优秀硕士学位论文全文数据库,2009(3).
[6]周剑平.基于MATLAB的圆度评定方法[J].计量与测试技术,2005(32).