




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
相关图片如下:VB与MATLAB混合编程探讨 文章作者:朱志松 郭晓丽 朱小松 文章类型:设计应用 文章出处:电子技术应用 - 摘要:介绍了与混合编程的方法,二者结合可以充分利用的方便快捷和软件工具箱的强大功能。 关键词: 编译 是公司开发的科学计算环境,具有强大的计算绘图能力,提供大量的函数库、工具箱,几乎涵盖了所有的工程计算领域,被誉为“演算纸”式的工程计算工具。但是语言是一种解释执行的脚本语言,运算速度较慢是一个比较突出的问题。 作为一门易学易用的编程语言,受到很多工程技术人员的青睐,其执行速度相对较快,界面友好。因此实现与混合编程,可以为科研工作和工程应用提供有力的技术支持。 基本思路及实现方法 提供了与、的程序接口,并没有提供直接与的接口。目前与混合编程方面主要使用以下一些方法: ()在中通过调用的引擎()接口,使用的或通道与通信。通过语句在程序中直接使用提供的函数库和图形库。这种方法可以较快地编写出程序;但在调用引擎时,会在后台启动一个进程,影响程序运行速度,占用内存。 ()通过使用嵌入的矩阵函数库的方法。是由原公司开发的第三方插件,利用与相似的函数、语法嵌入到中,可以象使用的函数、命令一样使用函数。这种方法语法和函数使用比较简单,编程效率很高,几乎完全融入语言,特别对图形的处理非常方便,弥补了其他方法在图形处理上的弱点。安装后,只需在打开的工程中添加库即可(在工程引用对话框中选中)。但由于其仍然采用解释执行,执行效率较低,实时运算难以实现。 ()借助 与的接口,将的程序文件()编译为动态链接库(),在代码中调用生成的中的函数,实现算法,便于用户脱离环境使用。由于算法部分采用语句,运行速度较快,可应用于实时运算。这种方法对开发者在设置和编程上有一定要求,本文将详细阐述具体实现步骤。其基本思路如图所示。 第一步,编写文件。在中打开,按照程序格式输入代码,实现算法,调试成功。注意:文件必须以开始,避免在中出现转换错误。 第二步,使用新提供的编译插件 在中转换为文件。在转换前做好与的接口连接。步骤如下: 在中运行“ ”,选择 选项,安装 文件到目录,确认;接着运行“ ”,选择 作为本地默认编译器;然后在下运行“”和“”命令, 可以脱离环境找到路径。 在中选择“工具定制()附加项和宏文件 页”,选中“ ”。这样,在工具栏出现 图标,在新建工程对话框中会出现“ ”。至此连接工作完成。 打开,在新建工程中选择“ ”,按照提示,选择“ ”,输入文件位置,开始转换。如果文件没有错误,在工程文件夹中会生成一系列文件。其中与文件同名的文件即为转换的代码。 第三步,编译文件(强烈建议不要对刚刚生成的代码作任何修改)。选择“编译”菜单,构建文件,在文件夹中会生成与工程名相同的文件。 第四步,在中调用文件。在第二步生成的代码中找到所要的接口函数,注意大小写,记下函数名。在中使用语句声明这个函数。在窗体的“通用声明”输入如下语法: 函数名 “文件名” “函数名” 参数表 (具体语法可参看使用手册)。 在程序代码中直接调用声明的函数即可。需要注意的是函数调用过程中的参数传递问题。由于和的数据类型以及参数传递形式不太一样,传递不当,可能会造成调试困难。特别是中用到的大量矩阵(数组)参数,调用需十分当心。本文在下面例子中采用文件方式传递参数,利用和的文件读写功能传递数组参数,对于实时性要求不高的应用,可以方便稳妥地实现数据传递。 应用举例 在中利用随机数生成个以内的整数,作为一个信号序列,利用的快速傅立叶变换函数()对序列进行变换,再将变换结果传递回,并显示在窗体上。 在中编辑好文件(),实现读取序列文件及并写回序列文件,调试成功。代码如下: 以读写文本方式打开 文件 文件以整数格式读入 矩阵 运算 文件指针指向文件头 向文件写入矩阵 按照前述步骤在中转换为文件,找到接口函数,本例为()。 () (,); (); (,); 编译生成文件。 在中生成随机序列并写入文件: () ( * ) , () () () () 声明()函数: 调用该函数的事件代码: () 调用函数 本例中未向函数传递参数,也无需函数返回运算结果,故采用调用子程序过程()方式直接调用。结果由读取文件获得: () () () 本例在 、下调试通过。与的混合编程,可以脱离环境运行,有利于程序发布及使用。通过二者结合,减少了设计算法的时间,降低了编程难度,同时兼顾了代码安全和界面友好。程序界面如图(见回复)所示。工业生产中经常遇到复杂的数据信息处理问题,需要大运算量的矩阵计算及对分析结果进行实时、直观的图形化显示。Matlab是集数值分析、矩阵运算、信号处理和图形显示于一体的高性能数学软件,将其强大的计算功能与VB在图形用户界面开发方面的优势结合起来,实现应用系统的无缝集成,对于有效缩短开发周期、优化系统性能是十分有意义的。下面将分别讨论Matlab与VB集成的四种方法。一、借助 ActiveX部件Microsoft把所有以COM为基础的技术统称为ActiveX技术。自动化是大多数ActiveX技术的基础,它可使解释性的宏语言(如VB)能够在不了解应用程序实现细节的情况下控制自动化对象。Matlab实现了ActiveX自动化服务支持,在VB下通过ActiveX自动化接口可将Matlab作为Visual Basic语言的一个ActiveX部件调用。Matlab ActiveX自动化服务的功能主要包括在Matlab工作空间执行Matlab命令,以及直接从工作空间存取矩阵等,下面列出了Matlab自动化服务支持的几个主要方法,其参数和返回值的类型采用ActiveX自动化协议所定义的与语言无关的类型描述: BSTR Execute(in BSTR Command);BSTR表示宽字符串类型,它与VB存储字符串所采用的数据格式相同。该方法接收字符串命令并在Matlab中执行,将结果以字符串形式返回。 void GetFullMatrix(in BSTR Name,in BSTR Workspace,in, out SAFEARRAY(double)* pr,in, out SAFEARRAY(double)* pi);该方法从指定的工作空间检索一个完整的一维或二维的实型或虚mxArray,其实部和虚部被分别存放到两个单独的Double型数组中。 void PutFullMatrix(in BSTR Name,in BSTR Workspace,in SAFEARRAY(double) pr,in SAFEARRAY(double) pi);该方法将一个mxArray放入指定的工作空间。各参数的含义及调用方法与GetFullMatrix方法类似。示例代码如下:Dim Matlab As Object 声明对象Dim MReal1(5,5) As Double 声明存放实部的Double型数组Dim MImag() As Double 声明存放虚部的Double型数组Set Matlab=CreateObject(“Matlab.Application”) 初始化对象Matlab.Execute(“a=hilb(5)”) 执行Matlab命令Call Matlab.GetFullMatrix(“a”,“base”,MReal1,MImag) 将结果分别存入实部、虚部数组二、借助DDE技术DDE(Dynamic Data Exchange)允许Microsoft Windows应用程序通过交换数据实现彼此间的通信。应用程序间彼此通信要先建立一个DDE会话,对会话进行初始化的应用程序称为客户端(Client),对Client端作出响应的应用程序称为服务器(Server)。图1描述了Matlab作为服务器时与其他应用程序的通信机制。图1 借助DDE时应用程序通信机制图1 借助DDE时应用程序通信机制其中,DDE功能函数既可以由应用程序提供,也可以由Matlab引擎库提供。初始化会话时,客户端应用程序必须指定两个参数service name(服务器应用程序的名称)和topic(会话主题)。下面的示例说明了VB与Matlab建立并完成DDE会话的全过程:说明: TextInput是输入文本框,TextOutput是输出文本框。在TextInput中输入Matlab命令回车后,由Matlab在后台执行并将结果返回给TextOutput显示。Sub TextInput_KeyPress(KeyAscii As Integer)If KeyAscii = vbKeyReturn then初始化TextInput与Matlab间的DDE会话 TextInput.LinkMode = vbLinkNoneTextInput.LinkTopic = “MATLAB|Engine”TextInput.LinkItem =“EngEvalString”TextInput.LinkMode = vbLinkManualszCommand = TextInput.Text执行Matlab命令TextInput.LinkExecute szCommandTextInput.LinkMode = vbLinkNone初始化TextOutput与Matlab间的DDE会话TextOutput.LinkMode = vbLinkNoneTextOutput.LinkTopic = “MATLAB|Engine”TextOutput.LinkItem =“EngStringResult”TextOutput.LinkMode = vbLinkManual返回执行结果并显示TextOutput.LinkRequestTextOutput.LinkMode = vbLinkNoneEnd IfEnd Sub三、通过M文件Matlab产生的M文件不能直接在VB中调用,可利用mcc将M文件直接编译成.EXE文件,然后在VB中声明下面三个API函数,最后使用Shell命令即可实现VB与Matlab的无缝集成。1. 用mcc生成独立的外部应用程序。可使用如下两种命令:mcc -p file.m 或 mcc -m file.m2. 在VB中声明调用的三个API函数: Declare Function WaitForSingleObject Lib “kernel32”(ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Declare Function CloseHandle Lib “kernel32”(ByVal hObject As Long) As Long Declare Function OpenProcess Lib “kernel32”(ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long,ByVal dwProcessId As Long) As Long3. 示例代码: Dim lTask As Long, lret As Long, lHandle As Long执行file.exe文件lTask = Shell(“file.exe”, vbNormalFocus)lHandle = OpenProcess(SYNCHRONIZE, False, lTask)等待进程执行完毕lret = WaitForSingleObject(lHandle, INFINITE)lret = CloseHandle(lHandle) file.exe文件执行完毕后,继续执行应用程序通过以上编码,应用程序可以在执行过程中调用.EXE完成特定的计算或图形功能后,再继续其执行过程,从而实现与Matlab的集成。四、引入MatrixVBMatrixVB是MathWorks针对VB提供的一个Matlab库,它提供了600多个函数,包括基本的数学运算和功能强大的信号处理、线性代数、串运算及图形图像处理功能等,为VB提供了强大的功能扩展。在VB中使用该数学工具包可避免重复性劳动,从而减少开发人员实现算法和界面设计的困难。MatrixVB是一个独立的产品(可以从得到),其使用十分方便。MatrixVB安装完成后,只需在VB工程中引用Mmatrix即可。示例代码如下:说明: 工业生产中经常需要对采集到的原始信号进行分析,并对分析结果进行实时的图形化显示,下面通过在VB中引用Mmatrix来实现这一功能。代码如下: Dim ax as Variant 声明坐标轴Private Sub Form_Resize()vbrefresh ax 刷新坐标轴End SubPrivate Sub Form_Load()ax = vbaxes(Form1.hWnd) 将坐标轴置于窗体Call Form_ResizeEnd SubPrivate Sub Command1-Click()Dim I,C As Matrix 声明向量Dim m As Integer从数据库中取原始信号存入一维向量I,取其对应的碳含量存入一维向量Cm为向量I、C的元素个数Call Icheck ( I , C , m ) 调用校正函数End SubPrivate Sub Icheck (I As Variant, C As Variant, ByVal m As Integer)Dim II,CC,Z As MatrixDim a0,a1,a2 As DoubleII =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 大连翻译职业学院《水处理生物学》2023-2024学年第一学期期末试卷
- 石家庄职业技术学院《数字音频音效制作》2023-2024学年第一学期期末试卷
- 德阳科贸职业学院《影视音乐作品赏析》2023-2024学年第一学期期末试卷
- 西藏警官高等专科学校《藏药矿物学》2023-2024学年第一学期期末试卷
- 广州体育职业技术学院《油画人物头像》2023-2024学年第一学期期末试卷
- 河南测绘职业学院《分子免疫学》2023-2024学年第一学期期末试卷
- 成都大学《汽车造型设计概论》2023-2024学年第一学期期末试卷
- 中央音乐学院《施工组织学A》2023-2024学年第一学期期末试卷
- 楚雄师范学院《医学影像后处理技术》2023-2024学年第一学期期末试卷
- 河北地质大学《中国美术史》2023-2024学年第一学期期末试卷
- 弱电工程项目经理职责
- 青马工程培训班培训课件
- 双碳知识培训
- 新交际英语(2024新版)一年级上册Unit 1~6全册教案
- 三家比价合同范例
- 2025年慢性阻塞性肺疾病全球创议GOLD指南修订解读课件
- GB/T 19077-2024粒度分析激光衍射法
- GB/T 44481-2024建筑消防设施检测技术规范
- 代牧牛羊合同模板
- 感术行动专项考核试题及答案
- DB34∕T 3468-2019 民用建筑楼面保温隔声工程技术规程
评论
0/150
提交评论