labview调用matlab函数Word文档下载推荐.docx
- 文档编号:19624424
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:12
- 大小:369.65KB
labview调用matlab函数Word文档下载推荐.docx
《labview调用matlab函数Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《labview调用matlab函数Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。
(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:
Arethesecorrect[y]/n?
此时键入”y”,按回车;
确认选择MicrosoftVisualC++2005的编译器
(2)mbuild命令设置
(a)运行Matlab,在Matlab的命令窗口(CommandWindow)键入“mbuild-setup”命令后,按回车键,安装Matlab编译器;
Welcometombuild-setup.Thisutilitywillhelpyousetup
PleasechooseyourcompilerforbuildingsharedlibrariesorCOMcomponents:
Wouldyoulikembuildtolocateinstalledcompilers[y]/n?
[0]None
选择MicrosoftVisualC++2005的编译器
此时键入”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"
mclmcr.h"
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();
这三个函数的原型在addmatlab.h里面,并且addmatlabInitialize();
这两个函数必须调用,否则会出错。
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
添加输入变量和输出变量,进行测试。
这里以两个四个元素的一维数据相加为例。
运行结果为,调用成功。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- labview 调用 matlab 函数