毕业论文基于matlabrtw的仿真实验说明书文档格式.docx
- 文档编号:13877341
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:32
- 大小:212.37KB
毕业论文基于matlabrtw的仿真实验说明书文档格式.docx
《毕业论文基于matlabrtw的仿真实验说明书文档格式.docx》由会员分享,可在线阅读,更多相关《毕业论文基于matlabrtw的仿真实验说明书文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
④自动生成C代码并分析各文件内容功能(生成dll动态链接库);
⑤在VisualC++环境中集成生成代码(动态链接库),构建仿真模型,运行并与Simulink仿真模型运行结果进行对比。
2.基于MATLABEngine的建模与仿真
基于MATLABEngine的建模与仿真实验有以下内容:
①理解MATLABEngine的工作原理;
②在MATLAB中搭建Simulink仿真模型并配置;
③编写VC控制台程序通过Engine引擎调用Simulink模型;
④将结果与Simulink仿真模型运行结果进行对比分析。
三.实验步骤及过程
第一步:
仿真模型搭建,构建二阶系统的Simulink模型;
第二步:
配置参数,
在SimullinkParameter选项中,配置模型参数和RTW参数;
第三步:
分析生成的C代码(生成dll动态链接库);
第四步:
在VisualC++中对生成的代码(动态链接库)进行编译运行(需要添加头文件和库文件支持);
第五步:
对比仿真结果。
2.基于MATLABEngine的建模与仿真
MATLAB中仿真模型的搭建和配置(以一个简单二阶连续系统模型为例);
配置参数,配置WorkspaceI/O属性页;
编写VC控制台应用程序(需要添加头文件和库文件支持),通过引擎得到模型仿真结果。
四.实验软件设计与实现
软件流程:
①将RTW生成的C代码封装成DLL动态链接库;
②基于VC构建应用程序,调用动态链接库,行模型执,计算系统的输出。
③模型中止,绘图,对比仿真结果。
①首先要打开MATLABEngine引擎。
②进入模型所在目录,进行初始化操作。
③设置仿真开始时刻。
④使用循环调用的方式使模型推进,期间进行状态变量迭代,将本次时间步结束时系统的终端状态记录下来,作为下一个时间步运行的初始状态。
⑤画出模型输出。
⑥最后关闭引擎。
注:
使用的MATLAB版本是MATLABR2008b。
程序结构及主要功能模块
①初始化externvoid_declspec(dllexport)RTWInitialize(void);
voidRTWInitialize(void)
{
model();
//模型注册
MdlInitializeSizes();
//初始化大小
MdlInitializeSampleTimes();
//初始化采样次数
MdlStart();
//启动模型
model_U.In1=1;
//给定输入
}
②模型执行externdouble_declspec(dllexport)RTWOutput(void);
doubleRTWOutput(void)
doubleYout;
MdlOutputs();
//计算系统输出
MdlUpdate();
//更新离散状态向量
model_derivatives();
//计算连续模型导数
Yout=model_Y.Out1;
//记录输出结果
returnYout;
③模型中止externvoid_declspec(dllexport)RTWTerminate(void);
voidRTWTerminate(void)
MdlTerminate();
①开启引擎及初始化
Engine*ep=engOpen("
\0"
);
//开启引擎
engEvalString(ep,"
cd('
D:
\MATLAB'
)"
//进入模型所在目录
xInitial=[]"
//对模型运行所需变量初始化
value=zeros(1,401)"
//生成一个0向量用于存储模型的输出结果
②设置仿真时间进行仿真
t=0.0"
//设置仿真的开始时刻
j=0"
//记录迭代次数
for(inti=0;
i<
401;
i++)
{
engEvalString(ep,"
value(1,j+1)=simout(1,1)"
//记录模型的输出
t=t+0.1"
//仿真时刻推进
j=j+1"
//迭代次数推进
xInitial=xFinal"
//状态变量迭代,将本次时间步结束时系统的终端状态记录下来,作为下一个时间步运行的初始状态
}
③画出模型输出
engEvalString(ep,"
time=[0:
0.1:
40]"
plot(time,value)"
五.实验结果分析
MATLAB仿真运行结果:
VC代码仿真结果:
结果分析:
由图看出在VC下的仿真结果与在Simulink下的输出波形是一致的,通过使用MATLAB提供的自动化代码生成工具RTW来将Simulink模型框图转化为标准的C代码,之后在C中调用,然后给定输入再执行,因此和在Simulink下的结果应该一致。
MATLAB仿真运行结果(仿真步长0.1s):
VC代码通过engine调用matlab仿真结果(仿真步长0.1s):
由上图看出在VC下的仿真结果与在Simulink下的输出波形是一致的,由于式在VC下通过MATLAB引擎调用MATLAB的函数,即将MABTLAB当作应用程序进行数据计算的引擎,只是界面部分采用VC来实现,因此得到的结果应该是一致的。
六.总结:
收获及感想
通过本次实验,在熟悉MATLAB使用的基础上进一步了解了MATLAB的两种C语言调用方法:
C代码自动生成工具RTW和Engine引擎。
MATLAB提供了很多的函数计算方法和模型的仿真工具,应用这两种C语言调用方法可以比较方便的利用MATLAB已有的资源和方法进行相关模型以及仿真环境的构建。
Engine引擎主要是在安装了MATLAB的环境中通过相应的配置和调用语句打开MATLAB的引擎,在C语言环境下可以直接执行编写好的MATLAB语句,非常方便,但前提是需要MATLAB环境的支持。
RTW代码自动生成工具相对稍显繁琐,它将构建好的SIMULINK模型直接转化成C代码,并提供调用流程和函数接口,需要用户根据不同的需要将其集成进自己的程序,已达到不同的使用目的。
了解并实践了这些是非常必要的,它为我以后的科研实践提供了很大的帮助。
七.附:
软件结构说明及程序主要代码
①封装dll工程
/*********dllmain.h********/
#include"
model.h"
model_private.h"
model_types.h"
rt_nonfinite.h"
rtGetInf.h"
rtGetNaN.h"
rtmodel.h"
rtwtypes.h"
externmodel();
externMdlInitializeSizes();
externMdlInitializeSampleTimes();
externMdlStart();
externMdlOutputs();
externMdlUpdate();
externMdlTerminate();
externvoid_declspec(dllexport)RTWInitialize(void);
externdouble_declspec(dllexport)RTWOutput(void);
externvoid_declspec(dllexport)RTWTerminate(void);
/*********dllmain.c********/
dllmain.h"
②VC中调用dll
#include<
stdio.h>
#pragmacomment(lib,"
rtwdll.lib"
)
extern_declspec(dllimport)voidRTWInitialize(void);
extern_declspec(dllimport)doubleRTWOutput(void);
extern_declspec(dllimport)voidRTWTerminate(void);
inti;
doublet=0;
doublemodel_out;
voidmain()
RTWInitialize();
for(i=0;
i<
1000;
model_out=RTWOutput();
printf("
%f,"
model_out);
//printf("
t);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 基于 matlabrtw 仿真 实验 说明书