labview调用matlab函数.docx

上传人:b****5 文档编号:6610667 上传时间:2023-01-08 格式:DOCX 页数:12 大小:369.65KB
下载 相关 举报
labview调用matlab函数.docx_第1页
第1页 / 共12页
labview调用matlab函数.docx_第2页
第2页 / 共12页
labview调用matlab函数.docx_第3页
第3页 / 共12页
labview调用matlab函数.docx_第4页
第4页 / 共12页
labview调用matlab函数.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

labview调用matlab函数.docx

《labview调用matlab函数.docx》由会员分享,可在线阅读,更多相关《labview调用matlab函数.docx(12页珍藏版)》请在冰豆网上搜索。

labview调用matlab函数.docx

labview调用matlab函数

labview调用matlab函数的实现

一、用matlab生成dll

1、mcc编译环境设置

在桌面上右键单击“我的电脑”图标出现以下菜单,单击“属性”菜单项,出现“系统特性”对话框,单击“高级”选项卡,如下图所示

在上图中,单击“环境变量”按钮,出现“环境变量”对话框,添加系统变量matlab值为F:

\Matlab\R2012b即matlab2012的安装路径,如下图所示

在环境变量path中添加f:

\MATLAB\R2012b\bin\win32:

f:

\MATLAB\R2012b\runtime\win32;如下图所示

按“确定”完成设置后,重启计算机或注销当前用户,即可应用新设置。

2、Matlab2012编译器设置

(1)mex命令设置

(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mex-setup”命令后,按回车键,安装Matlab编译器;

(b)命令窗口出现如下提示:

Welcometomex-setup.Thisutilitywillhelpyousetup

adefaultcompiler.Foralistofsupportedcompilers,see

PleasechooseyourcompilerforbuildingMEX-files:

Wouldyoulikemextolocateinstalledcompilers[y]/n?

此时键入”y”,按回车;

(c)命令窗口出现如下提示:

Selectacompiler:

[1]Lcc-win32C2.4.1inF:

\Matlab\R2012b\sys\lcc

[2]MicrosoftVisualC++2005SP1inD:

\ProgramFiles\MicrosoftVisualStudio8

[0]None

此时键入”2”,按回车;选择MicrosoftVisualC++2005的编译器

(d)命令窗口出现如下提示:

Pleaseverifyyourchoices:

Compiler:

MicrosoftVisualC++2005SP1

Location:

D:

\ProgramFiles\MicrosoftVisualStudio8

Arethesecorrect[y]/n?

此时键入”y”,按回车;确认选择MicrosoftVisualC++2005的编译器

(2)mbuild命令设置

(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mbuild-setup”命令后,按回车键,安装Matlab编译器;

(b)命令窗口出现如下提示:

Welcometombuild-setup.Thisutilitywillhelpyousetup

adefaultcompiler.Foralistofsupportedcompilers,see

PleasechooseyourcompilerforbuildingsharedlibrariesorCOMcomponents:

Wouldyoulikembuildtolocateinstalledcompilers[y]/n?

此时键入”y”,按回车;

(c)命令窗口出现如下提示:

Selectacompiler:

[1]Lcc-win32C2.4.1inF:

\Matlab\R2012b\sys\lcc

[2]MicrosoftVisualC++2005SP1inD:

\ProgramFiles\MicrosoftVisualStudio8

[0]None

Compiler:

此时键入”2”,按回车;选择MicrosoftVisualC++2005的编译器

(d)命令窗口出现如下提示:

Pleaseverifyyourchoices:

Compiler:

MicrosoftVisualC++2005SP1

Location:

D:

\ProgramFiles\MicrosoftVisualStudio8

Arethesecorrect[y]/n?

此时键入”y”,按回车,确认选择MicrosoftVisualC++2005的编译器,编译器设置完成。

3、编写Matlab函数

用matlab写下addmatlab.m,内容如下。

functionc=addmatlab(a,b)

c=a+b;

4、将Matlab函数转成DLL函数

在Matlab2012的CommandWindow下输入命令:

mcc-Wlib:

libname-Tlink:

libfunctionname.m比如

mcc-Wlib:

addmatlab-Tlink:

libaddmatlab.m。

注意:

functionname.m可以嵌套调用其它的.m和.mex的函数,但不能用load调用数据。

addmatlab.dll

addmatlab.h

addmatlab.lib

这些文件是我们后面需要用到的。

二、用vs2005包装matlab生成的dll

从addmatlab.h里面可以看到函数原型

externLIB_addmatlab_C_APIboolMW_CALL_CONVmlfAddmatlab(intnargout,mxArray**c,mxArray*a,mxArray*b);其中的参数类型是矩阵型,不能直接在labview中调用,需要用vs2005对matlab生成的dll重新封装一下,生成新的dll,这样labview就可以调用了。

操作步骤如下:

1、新建vs2005DLL项目。

点击文件—>新建项目—选择win32控制台程序,输入名称,按确定。

再点下一步,先择DLL,点完成。

2、复制文件

将上面生成的三个文件addmatlab.dll,addmatlab.h,addmatlab.lib复制到工程目录中,

3、配置工程属性

点击项目,选择属性,打开C/C++常规,在附加包含目录里加入matlab目录。

如果matlab安装在F盘,则目录为F:

\Matlab\R2012b\extern\include

点击链接器-->常规,加入附加库目录,路径为F:

\Matlab\R2012b\extern\lib\win32\microsoft

点击链接器-->输入,加入附加依赖项,addmatlab.libmclmcr.libmclmcrrt.lib

4、编辑源文件

打开addvs.cpp,加入包含的头文件

#include"mclmcrrt.h"

#include"mclmcr.h"

#include"addmatlab.h"

添加函数

voidaddtest(double*arg1,double*arg2,intm,double*result)

{

addmatlabInitialize();

/*Createtheinputdata*/

mxArray*A=mxCreateDoubleMatrix(1,m,mxREAL);//创建一个x4的矩阵A

memcpy(mxGetPr(A),arg1,m*sizeof(double));//给矩阵赋值

mxArray*B=mxCreateDoubleMatrix(1,m,mxREAL);

memcpy(mxGetPr(B),arg2,m*sizeof(double));

mxArray*C=mxCreateDoubleMatrix(1,m,mxREAL);

mlfAddmatlab(1,&C,A,B);

memcpy(result,mxGetPr(C),m*sizeof(double));

/*Freethememorycreated*/

mxDestroyArray(A);

mxDestroyArray(B);

mxDestroyArray(C);

addmatlabTerminate();

return;

}

addmatlabInitialize();addmatlabTerminate();mlfAddmatlab(1,&C,A,B);这三个函数的原型在addmatlab.h里面,并且addmatlabInitialize();addmatlabTerminate();这两个函数必须调用,否则会出错。

mxArray*A=mxCreateDoubleMatrix(1,m,mxREAL);

memcpy(mxGetPr(A),arg1,m*sizeof(double));

mxArray*B=mxCreateDoubleMatrix(1,m,mxREAL);

memcpy(mxGetPr(B),arg2,m*sizeof(double));

mxArray*C=mxCreateDoubleMatrix(1,m,mxREAL);memcpy(result,mxGetPr(C),m*sizeof(double));

这几句的作用是为了做数据类型转换,把double类型的输入转换成mxArray类型,再把mxArray类型的输出转换成double类型。

5、添加.def文件

添加addvs.def文件,内容为如下,

LIBRARY"addvs"

EXPORTS

addtest@1

并在属性—>链接器—>输入—>模块定义文件中加入addvs.def

这样操作后编译后就会在dubug目录里生成.lib文件,并且能在libview里找到addtest这个函数。

6、build项目

在dubug目录里生成.dll文件,这个文件后面会用到。

三、用labview调用vs2005生成的dll

新建VI,添加calllibraryfunctionnode,双击打开属性页面,在librarynameandpath里找到之前vs2005编译生成的dll,在functionname里找到addtest函数。

这里要注意的是要把第一节里用matlab生成的addmatlab.dll也放在和addvs.dll相同的目录里,否则labview会报错。

点击parameters卡片,设置参数的类型,再点OK

添加输入变量和输出变量,进行测试。

这里以两个四个元素的一维数据相加为例。

运行结果为,调用成功。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1