labview调用matlab函数

更新时间:2024-01-30 22:17:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

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 的命令窗口 (Command Window) 键入“ mex -setup ”命令后,按回车键,安装 Matlab 编译器;

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

Welcome to mex -setup. This utility will help you set up

a default compiler. For a list of supported compilers, see

http://www.mathworks.com/support/compilers/R2012b/win32.html

Please choose your compiler for building MEX-files:

Would you like mex to locate installed compilers [y]/n?

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

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

Select a compiler:

[1] Lcc-win32 C 2.4.1 in F:\\Matlab\\R2012b\\sys\\lcc

[2] Microsoft Visual C++ 2005 SP1 in D:\\Program Files\\Microsoft Visual Studio 8

[0] None

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

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

Please verify your choices:

Compiler: Microsoft Visual C++ 2005 SP1

Location: D:\\Program Files\\Microsoft Visual Studio 8

Are these correct [y]/n?

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

(2) mbuild 命令设置

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

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

Welcome to mbuild -setup. This utility will help you set up

a default compiler. For a list of supported compilers, see

http://www.mathworks.com/support/compilers/R2012b/win32.html

Please choose your compiler for building shared libraries or COM components:

Would you like mbuild to locate installed compilers [y]/n?

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

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

Select a compiler:

[1] Lcc-win32 C 2.4.1 in F:\\Matlab\\R2012b\\sys\\lcc

[2] Microsoft Visual C++ 2005 SP1 in D:\\Program Files\\Microsoft Visual Studio 8

[0] None

Compiler:此时键入 ” 2” ,按回车 ;选择Microsoft Visual C++ 2005 的编译器

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

Please verify your choices:

Compiler: Microsoft Visual C++ 2005 SP1

Location: D:\\Program Files\\Microsoft Visual Studio 8

Are these correct [y]/n?

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

3 、编写 Matlab 函数

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

function c = addmatlab(a,b) c = a+b;

4 、将 Matlab 函数转成 DLL 函数

在 Matlab2012 的 Command Window 下输入命令 : mcc -W lib:libname -T link:lib functionname.m比如

mcc -W lib:addmatlab -T link:lib addmatlab.m 。

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

addmatlab.dll addmatlab.h addmatlab.lib

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

二、用vs2005包装matlab生成的dll

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

extern LIB_addmatlab_C_API bool MW_CALL_CONV mlfAddmatlab(int nargout, mxArray** c, mxArray* a, mxArray* b);其中的参数类型是矩阵型,不能直接在labview中调用,需要用vs2005对matlab生成的dll重新封装一下,生成新的dll,这样labview就可以调用了。操作步骤如下:

1、新建vs2005 DLL项目。

点击文件—>新建项目—选择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.lib mclmcr.lib mclmcrrt.lib

4、编辑源文件

打开addvs.cpp,加入包含的头文件 #include \#include \#include \添加函数

void addtest(double * arg1, double * arg2,int m,double * result) {

addmatlabInitialize();

/* Create the input data */

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)); /* Free the memory created */ 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 \EXPORTS

addtest @1

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

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

6、build 项目

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

三、用labview调用vs2005生成的dll

新建VI,添加call library function node,双击打开属性页面,在library name and path里找到之前vs2005编译生成的dll,在function name里找到addtest函数。这里要注意的是要把第一节里用matlab生成的addmatlab.dll也放在和addvs.dll相同的目录里,否则labview会报错。

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

添加输入变量和输出变量,进行测试。这里以两个四个元素的一维数据相加为例。

运行结果为,调用成功。

本文来源:https://www.bwwdw.com/article/jumw.html

Top