脱离MATLAB工作环境,实现MATLAB与VisualBasic语言的混合编程
以下讨论是在MATLAB70软件和vc++60软件环境中进行:
一、将MATLAB的m文件编译成exe文件,实现MATLAB与Visual Basic语言的混合编程
1、将 \MATLAB7\toolbox\compiler\deploy\matlabrcm 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注释掉,或者干脆删掉,否则,在没有安装MATLAB的机子上运行MATLAB与VisualBasic语言混合编成的程序时,会出现:“Undefinedcommand/function 'set_param'”的错误。
2、在Matlab7 的命令窗口运行下列命令:rehash toolboxcache
完成工具箱加载和更新。
3、在Matlab7 的命令窗口运行下列命令:
Mcc –m m
将MATLAB的m文件(M文件必须以Function开始,即必须是函数文件)编译成exe文件,将编译生成的ctf文件和exe文件拷贝到VB工程的目录中,他们是脱离matlab环境运行必需的文件;
4、在VB工程中用下列语句对MATLAB的m文件编译成的exe文件进行调用:
lTask = Shell("rt2exe",vbHide)
hProc= OpenProcess(PROCESS_QUERY_INFORMATION, False, lTask)
IflTask = 0 Then MsgBox "程序执行失败"
Do
GetExitCodeProcess hProc, lExit
DoEvents
LoopWhile lExit = STILL_ACTIVE
5、将VB工程进行打包,打包时,要将在MATLAB中编译生成的ctf文件和exe文件添加到VB工程包中,他们是脱离matlab环境运行必需的文件;
6、将打包好的VB工程安装包拷贝到客户计算机中,并将matlab7\toolbox\compiler\deploy\win32下的MCRInstallerexe程序也一起拷贝到客户计算机中。
7、在客户计算机中,运行程序:MCRInstallerexe,将matlab compiler runtime安装到客户计算机中。注意:安装目录必须位于它所在的文件夹;
8、运行VB工程安装包中的setup程序,进行VB工程的程序安装;
至此,在客户机中,即可正常运行MATLAB与Visual Basic语言混合编成的程序。
注意事项:
1、在VB工程所在目录中,不能有其它的dll文件存在,否则在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现下列错误提示:
“Warning:Failed to startthe Java Virtual machine”
“Warning:Disabling Javasupport”
“Undefined function orvariable ‘matlabrc’”
二、将MATLAB的m文件编译成dll文件,实现MATLAB与Visual Basic语言的混合编程
1、将 \MATLAB7\toolbox\compiler\deploy\matlabrcm 中的81行 set_param(0,'PaperType',defaultpaper)
和82行set_param(0,'PaperUnits',defaultunits)
注释掉,或者干脆删掉,否则,在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现:“Undefined command/function 'set_param'”的错误。
2、在Matlab7 的命令窗口运行下列命令:rehash toolboxcache
完成工具箱加载和更新。
3、安装vc++60软件,为Matlab编译器的安装和配置做准备;
4、在Matlab7 的命令窗口运行下列命令:
mbuild –setup
对Matlab的编译器进行安装和配置;
5、在Matlab中创建COM组件
用Matlab COM生成器创建COM组件,包括4个步骤,即创建工程、管理m文件、生成组件、打包和分发组件。
在Matlab中创建COM组件步骤如下:
(1) 创建工程。在Matlab命令窗中键入comtool命令,调用Matlab编译器,打开Matlab COM Build主窗口。在该窗口中,选择File→New Project,创建一个新的工程,在此对话框中对新工程进行设置,输入组件名和类名,选择合适的编译器。
(2) 管理m文件。单击“AddFile”按钮,添加编写好的M函数文件(M文件必须以Function开始,即必须是函数文件)。
(3) 生成组件。使用Build--àCom object菜单,创建COM组件,将MATLAB的m文件编译成dll文件。
(4)打包和分发组件:编译成功并通过测试后,就可以把有关文件打包和分发给目标器。单击 “Component”→”Package Component”,创建自解压可执行程序。注意:在使用Component--àPackageComponent菜单,生成exe文件时,要将“includeMCR”前的选择框选中,使生成的exe文件中能包含MCRInstallerexe程序。
6、将编译生成的ctf文件和dll文件以及exe文件拷贝到VB工程的目录中;
7、创建VB工程并调用COM组件新建“标准EXE”工程,进入VB编程环境,在“工程”菜单中单击“引用”选项, 在列表中选中第5步中生成的这些组件,以及添加MWComUtil 70 Type Library,单击“确定”按钮。
在VB工程引用这些组件后,需按照以下步骤来调用Matlab文件:
Dim rt2 As rt2_1rt2_1class '声明一个COM组件
Set rt2 = New rt2_1rt2_1class
Call rt2rt2 '执行rt2_1_1_0dll文件
8、将VB工程进行打包,打包时,要将在MATLAB中编译生成的ctf文件和dll文件以及exe添加到VB工程包中;
9、在客户计算机中,运行第5步中生成的exe程序,对第5步中生成的dll动态链接库进行注册,并自动运行MCRInstallerexe程序,将matlab compiler runtime安装到客户计算机中。
10、将打包好的VB工程安装包拷贝到客户计算机中,运行VB工程安装包中的setup程序,进行VB工程的程序安装;
至此,在客户机中,即可正常运行MATLAB与Visual Basic语言混合编成的程序。
注意事项:
1、VB编译生成的MATLAB与Visual Basic语言混合编成的exe应用程序不能简单的移植,必须要打包,在打包时应带上dll文件,然后将打包好的VB工程安装包拷贝到客户机中,运行VB工程安装包中的setupexe安装程序,进行VB工程的安装,VB工程安装完成后,再在客户机中,运行第5步中生成的exe程序,就可以避免出现下列各种错误提示:
(1)“Warning:Failedto start the Java Virtualmachine”
“Warning:Disabling Javasupport”
“Undefined function orvariable ‘matlabrc’”
(2)“Automation错误”或者“自动化错误”
(3)“运行时错误’429’:ActiveX部件不能创建对象”
(4)“MCR instance isnot available”
2、在VB工程所在目录中,除了包含第5步中生成的dll动态链接库文件外,不能有其它的dll文件存在,否则在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,会出现下列错误提示:
“Warning:Failed to startthe Java Virtual machine”
“Warning:Disabling Javasupport”
“Undefined function orvariable ‘matlabrc’”
3、如果直接将Vb工程程序拷贝到客户机中,而不是通过安装Vb工程程序,来运行MATLAB与VisualBasic语言混合编成的程序时,会出现:“Automation错误”或者“自动化错误”的错误提示,这时可以通过下列方法之一解决:
(1)在客户机中运行第5步中生成的exe程序,对第5步中生成的dll动态链接库进行注册,就可以解决“Automation错误”或者“自动化错误”引起的程序运行异常。
(2)在客户机中直接运行regsvr32exe程序,对第5步中生成的dll动态链接库进行注册,也可以解决“Automation错误”或者“自动化错误”引起的程序运行异常。
4、如果在客户机中,没有运行第5步中生成的exe程序,对第5步中生成的dll动态链接库进行注册,那么在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,就会出现:“运行时错误’429’:ActiveX部件不能创建对象”的提示,或者出现:“Automation错误”或者“自动化错误”的错误提示。
5、如果在客户机中运行MATLAB与Visual Basic语言混合编成的程序时,出现:“MCR instance isnot available”的错误提示时,可以通过将打包好的VB工程安装包拷贝到客户计算机中,运行VB工程安装包中的setup程序,进行VB工程的程序安装,就可以解决这种错误。
数控机床编程时,可采用绝对值编程、增量值编程或二者混合编程。
1、绝对值编程
绝对值编程是根据预先设定的编程原点计算出绝对值坐标尺寸进行编程的一种方法。即采用绝对值编程时,首先要指出编程原点的位置,并用地址x、Z进行编程(X为直径值)。有的数控系统用G90指令指定绝对值编程。
2、增量值编程
增量值编程是根据与前一个位置的坐标值增量来表示位置的一种编程方法。即程序中的终点坐标是相对于起点坐标而言的。采用增量值编程时,用地址U、W代替X、Z进行编程。
3、混合编程
绝对值编程与增量值编程混合起来进行编程的方法叫混合编程。编程时也必须先设定编程原点。
简单点的,你就用matlab写一个接口程序,封装你的c程序,类似下面这种:(matlab的例子,实现数组相乘,文件为arrayProductc)
#include "mexh"
/ 你的c /
void arrayProduct(double x, double y, double z, mwSize n)
{
mwSize i;
/ multiply each element y by x /
for (i=0; i<n; i++) {
z[i] = x y[i];
}
}
/ 接口程序 /
void mexFunction( int nlhs, mxArray plhs[],
int nrhs, const mxArray prhs[])
{
/初始化输入输出/
double multiplier; / input scalar /
double inMatrix; / 1xN input matrix /
mwSize ncols; / size of matrix /
double outMatrix; / output matrix /
/ 参数检查,如果程序较简单也可以不用做/
if(nrhs!=2) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs","Two inputs required");
}
if(nlhs!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs","One output required");
}
/ make sure the first input argument is scalar /
if( !mxIsDouble(prhs[0]) ||
mxIsComplex(prhs[0]) ||
mxGetNumberOfElements(prhs[0])!=1 ) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notScalar","Input multiplier must be a scalar");
}
/ check that number of rows in second input argument is 1 /
if(mxGetM(prhs[1])!=1) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:notRowVector","Input must be a row vector");
}
/ get the value of the scalar input /
multiplier = mxGetScalar(prhs[0]);
/ create a pointer to the real data in the input matrix /
inMatrix = mxGetPr(prhs[1]);
/ get dimensions of the input matrix /
ncols = mxGetN(prhs[1]);
/ create the output matrix /
plhs[0] = mxCreateDoubleMatrix(1,ncols,mxREAL);
/ get a pointer to the real data in the output matrix /
outMatrix = mxGetPr(plhs[0]);
/ call the computational routine /
arrayProduct(multiplier,inMatrix,outMatrix,ncols);
}
这个看起来复杂,其实很简单的,就几步:
1、使用mxGet将输入变为matlab兼容形式
2、使用mxSet初始化输出空间
3、使用你的C程序运算
以上就是关于matlab混合编程怎么设置环境全部的内容,包括:matlab混合编程怎么设置环境、什么是数控混合编程、matlab和c混合编程如何运行等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)