Matlab RTW&Engine 建模仿真实验报告
更新时间:2024-05-05 20:40:01 阅读量: 综合文库 文档下载
- matlab推荐度:
- 相关推荐
1
基于MATLAB RTW/Engine
的建模仿真实验
实验报告
院(系)名称 专学学任
自动化 导航、制导与控制
苏泽亚 SY1103508
李妮
业生
名姓
称 名 号
课老师
2011年 12 月 17日
北京航空航天大学研究生实验报告
1 实验目的
MATLAB集成了各类应用领域的专用库函数和模块,用于数值计算、系统建模、控制和信号处理的软件包。Simulink工具可以对分系统或单个仿真模型进行设计。
RTW(Real-Time Workshop)是MATLAB提供的自动化代码生成工具,将Simulink模型框图转化为标准的C代码;Engine是MATLAB提供的C语言调用接口,可以通过API函数调用像Simulink模型等MATLAB资源。 学会利用MATLAB/Simulink创建仿真模型,利用MATLAB RTW和Engine工具,通过两种不同的方式在Visual C++环境中对Simulink模型进行集成和调用,从而辅助在科研及工程实践中准确、通用快速的建立分布交互仿真体系结构下的复杂系统仿真模型。
2 实验内容
(1)基于MATLAB RTW的建模与仿真 理解MATLAB RTW工作原理,在MATLAB中搭建Simulink仿真模型,对仿真模型参数及RTW参数进行配置,自动生成C代码,理解生成的C代码的功能,分析各个文件内容,并在Visual C++环境中集成生成代码,构建仿真模型,运行得到仿真结果,并与Simulink仿真模型的运行结果进行比较。
- 1 -
北京航空航天大学研究生实验报告
(2)基于MATLAB Engine的建模与仿真
理解MATLAB Engine调用机制以及帧周期的概念,熟悉Engine的常用接口函数,在MATLAB中搭建Simulink仿真模型,对仿真模型参数及Engine参数进行配置,对模型进行仿真得到仿真结果,编写VC应用程序,通过Engine引擎调用Simulink仿真模型,将运行的结果与使用Simulink仿真得到的结果进行比较。
3实验步骤及过程
(1) 基于MATLAB RTW的建模与仿真
第一步:搭建Simulink模型,如图1:
图 1
图1所示模型为六自由度飞行模拟器Stewart平台的洗出算法模型,模型有六个输入In_fAAx、In_fAAy、In_fAAz、In_Omega、In_Cita、In_Fi分别为要模拟的飞行器在纵向、横向、垂向的比力和俯仰、横摇、侧滚的角速度,模型有六个输出Out_L1、Out_L2、Out_L3、Out_L4、Out_L5、Out_L6分别为飞行模拟器六个作动器的伸长量。
- 2 -
北京航空航天大学研究生实验报告
仿真时间为0到30秒,类型选择为定步长,ode4(Runge-Kutta)数值分析方法,设置固定步长大小为0.01秒;
第二步:配置RTW参数,在Real-Time Workshop属性页中将系统目标文件选择为grt.tlc,
选择只生成代码,其余设置均采用默认设置,最后点击“Generate code”按钮,生成代码; 第三步:分析代码,在Visual C++中建立Windows窗体应用程序,设计窗体应用程序的前面板,包括参数设置区和图像绘制区。在解决方案属性页中添加MATLAB头文件、库文件目录,将生成的C代码加入到工程中,根据模型执行过程编写模型的模块,编译调试通过;
第四步:执行C++程序,绘制仿真波形,与Simulink模型得到的结果进行比较。 (2) 基于MATLAB Engine的建模与仿真
第一步:搭建Simulink仿真模型,如图1:
图 2
图2中模型与图1中相同为Stewart平台的洗出算法模型,在用Matlab仿真时仿真时间为0到30秒,类型选择为定步长,ode4(Runge-Kutta)数值分析方法,步长大小为0.1秒,模型中的simout中的数据保存格式选择为Array,并运行模型得到仿真结果;
- 3 -
北京航空航天大学研究生实验报告
第二步:配置Workspace I/O属性页,初始状态设为xInitial,用于工作控件中加载变量, Final state选为xFinal,用于存储每个时间段运行结束时的终端状态,并且选择数据类型为Array;
第三步:在Visual C++中建立Windows窗体应用程序,设计窗体应用程序的前面板,包括参数设置区和指令显示区,在解决方案属性页中添加MATLAB头文件、库文件目录,编先仿真模块,编译调试通过;
第四步:将运行结果与在Simulink下的输出波形进行比较。
4 实验软件设计与实现
编程环境为Visual Studio 2008,MATLAB版本为R2011b。
4.1软件流程
建立Windows窗体应用程序,设计软件主窗体如图3,包括两个选项卡,RTW选项卡和ENGINE选项卡。打开软件时默认显示RTW选项卡,RTW选项卡包括两个区域,输入参数设置区和仿真结果绘制区,仿真结果绘制区含两个绘图区,上面的绘图区用于绘制Out_L1、Out_L2、Out_L3的仿真结果,下面的绘图区用于绘制Out_L4、Out_L5、Out_L6的仿真结果。
图 3
ENGINE选项卡如图4,可选择模型路径,设置模型名称、仿真步长和仿真时间,指令显示区用来显示配置完成后要发送到ENGINE的指令。
- 4 -
北京航空航天大学研究生实验报告
图 4
整个软件的操作流程如图5所示:
- 5 -
北京航空航天大学研究生实验报告
选择选项卡RTWENGINE设置模型输入参数设置模型路径、模型名称点击仿真按钮设置仿真步长、仿真时间查看仿真结果确认要发送到ENGINE的指令点击开启ENGINE按钮点击执行按钮查看仿真结果 图 5
(1)基于MATLAB RTW的建模与仿真
基于RTW的仿真的流程主要包括设置仿真模型输入参数、模型的初始化、模型的执行与终止几个部分,要在主函数中声明需要用到的外部函数,软件流程为:
a) 设置仿真模型输入参数; b) 模型注册;
c) 初始化大小和采样时间,启动模型,为输入变量赋值;
d) 计算机输出数据,更新离散状态变量,计算连续模行导数,根据输出数据实时绘制图形,更新进度条,此过程执行3000次; e) 终止模型。
(2)基于MATLAB Engine的建模与仿真
基于ENGINE的仿真流程包括设置仿真参数、Matlab引擎的开启、Simulink模型的调用与关闭引擎的操作几个部分,软件流程为:
a) 设置仿真模型路径、模型名称、仿真步长、仿真时间; b) 开启引擎;
c) 进入模型所在目录;
d) 模型初始化,设置仿真开始时刻,根据输出数据的维数、仿真步长和仿真时间的大小定义一个数组用于存放输出结果;
e) 调用本地模型,根据设置的仿真步长进行逻辑时间推进,记录模型输出,时间推进
之后将前一状态的输出作为下一个状态的输入,继续执行,根据仿真步长和仿真时
- 6 -
北京航空航天大学研究生实验报告
间确定循环次数; f)
画出仿真结果。
4.2程序结构及主要功能模块
(1)基于MATLAB RTW的建模与仿真
基于RTW的仿真主要过程由“Simulate”按钮的响应函数System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e)实现,其中调用的RTW功能函数及绘图函数主要有:
函数 cw(); MdlInitializeSizes(); MdlInitializeSampleTimes(); MdlStart(); MdlOutputs(); MdlUpdate(); cw_derivatives(); MdlTerminate(); DrawLine() progressBar1->PerformStep()
(2)基于MATLAB Engine的建模与仿真
基于RTW的仿真主要过程由“执行”按钮的响应函数System::Void button2_Click(System::Object^ sender, System::EventArgs^ e),其中调用的Engine引擎的函数主要有:
函数 engOpen() engEvalString() engClose()
功能 开启引擎 执行MATLAB命令 关闭引擎 功能 模型注册 初始化大小 初始化采样时间 启动模型 计算机系统输出 更新离散状态向量 计算连续模型导数 模型终止 绘制图形 更新进度条 5.实验结果分析
(1)基于MATLAB RTW的建模与仿真
仿真时模型的输入参数In_fAAx、In_fAAy、In_fAAz、In_Omega、In_Cita、In_Fi分别设置为6.37、0、-9.8、0、0.6981、0,仿真步长0.01s,仿真时间30s。
MATLAB仿真结果如图6、图7所示,图6显示Out_L1、Out_L2、Out_L3的仿真结果,图7显示Out_L4、Out_L5、Out_L6的仿真结果:
- 7 -
北京航空航天大学研究生实验报告
图 6
图 7
VC程序仿真结果如图8所示:
图 8
- 8 -
北京航空航天大学研究生实验报告
结果分析:通过VC程序得到仿真数据并绘制图形,得到仿真结果,与Simulink仿真模型得到的结果进行比较发现,输出波形是相同,说明可以通过VC对Simulink模型进行仿真,快速准确的得到仿真结果,且仿真时可以配置输入参数,但不可配置仿真步长仿真速度较快。
(2)基于MATLAB Engine的建模与仿真 仿真时模型的输入参数In_fAAx、In_fAAy、In_fAAz、In_Omega、In_Cita、In_Fi分别设置为6.37、0、-9.8、0、0.6981、0,仿真步长0.1s,仿真时间30s。
MATLAB仿真结果如图9、图10所示,图9显示Out_L1、Out_L2、Out_L3的仿真结果,图10显示Out_L4、Out_L5、Out_L6的仿真结果:
图 9
图 10
VC程序调用Engine的仿真结果如图11、图12所示:
- 9 -
北京航空航天大学研究生实验报告
图 11
图 12
结果分析:VC程序和Simulink得到的仿真波形一致,说明通过VC程序可以操纵MATLAB Engine引擎得到准确的仿真结果。仿真时可配置仿真步长和仿真时间,不过仿真速度较慢。
6 实验总结
实验过程中,不但对MATLAB RTW和MATLAB Engine的调用方法有了深入的学习,同时,对MATLAB中的一些操作和执行语句有了一定的了解,更是锻炼了自己的编程能力。 在解决问题的过程中对基于vc++ .net的编程进行了学习,为今后的工作打下了基础。通过MATLAB RTW及Engine工具以两种不同的方式在Visual C++环境中对Simulink模型进行集成和调用,准确、通用、快速地建立复杂系统仿真模型,这在以后的科研及工程实践中会有很大的帮助。
7附:程序主要代码
(1) 基于MATLAB RTW的建模与仿真
“Simulate”按钮的响应函数:
System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) {
int i; double t=0; cw();//模型注册 MdlInitializeSizes(); MdlInitializeSampleTimes(); MdlStart();//启动模型 //获得输入参数
cw_U.In_fAAx=System::Decimal::ToDouble(numericUpDown1->Value); cw_U.In_fAAy=System::Decimal::ToDouble(numericUpDown2->Value); cw_U.In_fAAz=System::Decimal::ToDouble(numericUpDown3->Value); cw_U.In_Omega=System::Decimal::ToDouble(numericUpDown4->Value); cw_U.In_Cita=System::Decimal::ToDouble(numericUpDown5->Value); cw_U.In_Fi=System::Decimal::ToDouble(numericUpDown6->Value); progressBar1->Value=0; PointF tempPt1=Point(23,90);
- 10 -
北京航空航天大学研究生实验报告
PointF tempPt2=Point(23,90); PointF tempPt3=Point(23,90); PointF tempPt4=Point(23,280); PointF tempPt5=Point(23,280);
PointF tempPt6=Point(23,280); //设置画笔 Pen^ myPen1=gcnew Pen(Color::Blue,1.0f); Pen^ myPen2=gcnew Pen(Color::Red,1.0f); Pen^ myPen3=gcnew Pen(Color::LightGreen,1.0f); Graphics^ gs=this->pictureBox1->CreateGraphics(); pictureBox1->Refresh(); for (i = 0; i < 3000; i++) { MdlOutputs(0);//产生输出 MdlUpdate(0);//更新状态
cw_derivatives();//连续模型导数 t = t + 0.01;//时间推进
progressBar1->PerformStep();//更新进度条
PointF endPt1=Point(t*10+23,90-(cw_Y.Out_L1*210)); PointF endPt2=Point(t*10+23,90-(cw_Y.Out_L2*210)); PointF endPt3=Point(t*10+23,90-(cw_Y.Out_L3*210)); PointF endPt4=Point(t*10+23,280-(cw_Y.Out_L4*210)); PointF endPt5=Point(t*10+23,280-(cw_Y.Out_L5*210));
PointF endPt6=Point(t*10+23,280-(cw_Y.Out_L6*210)); //绘制图形
gs->DrawLine(myPen1,tempPt1,endPt1); gs->DrawLine(myPen2,tempPt2,endPt2); gs->DrawLine(myPen3,tempPt3,endPt3); gs->DrawLine(myPen1,tempPt4,endPt4); gs->DrawLine(myPen2,tempPt5,endPt5); gs->DrawLine(myPen3,tempPt6,endPt6); tempPt1=endPt1; tempPt2=endPt2; tempPt3=endPt3; tempPt4=endPt4; tempPt5=endPt5; tempPt6=endPt6;
}
MdlTerminate();//模型终止 }
(2) 基于MATLAB Engine的建模与仿真
“执行”按钮的响应函数:
System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {
- 11 -
北京航空航天大学研究生实验报告
int i;
String^ module_path; String^ module_name; String^ temp; Decimal step,time;
module_path=textBox1->Text;//模型路径 module_name=textBox2->Text;//模型名称 step=numericUpDown7->Value;//仿真步长 time=numericUpDown8->Value;//仿真时间 temp=\+textBox1->Text+\;
engEvalString(ep,(char*)(void*)Marshal::StringToHGlobalAnsi(temp));//进入模型所在目录 engEvalString(ep,\);//对模型运行所需变量初始化
temp=\+int(numericUpDown8->Value/numericUpDown7->Value+1)+\;
engEvalString(ep,(char*)(void*)Marshal::StringToHGlobalAnsi(temp));//生成一个矩阵用于存
储模型的输出结果
engEvalString(ep,\);//设置仿真的开始时刻 engEvalString(ep,\);
engEvalString(ep,\);//载入模型参数 progressBar2->Value=0;
progressBar2->Maximum=int(numericUpDown8->Value/numericUpDown7->Value); for(i=0;i
temp=\+textBox2->Text+\+step.ToString()+\+step.ToString()+\;
engEvalString(ep,(char*)(void*)Marshal::StringToHGlobalAnsi(temp));//调用本地节点
的SIMULINK,将模型运行的逻辑时间推进.1s }
}
/////////画出模型输出///////////
temp=\+Decimal(numericUpDown7->Value)+\+int(numericUpDown8->Value)+\; engEvalString(ep,(char*)(void*)Marshal::StringToHGlobalAnsi(temp)); engEvalString(ep,\); engEvalString(ep,\); engEvalString(ep,\);
engEvalString(ep,\); engEvalString(ep,\); engEvalString(ep,\); engEvalString(ep,\);
engEvalString(ep,\);
engEvalString(ep,\);//记录模型输出 engEvalString(ep,\);
engEvalString(ep,\);//状态变量迭代,将本次时间步结束时系统 //的中断状态记录下来,作为下一个时间步运行的初始状态 progressBar2->PerformStep();//更新进度条
- 12 -
正在阅读:
Matlab RTW&Engine 建模仿真实验报告05-05
生产企业出口退税申报系统2.1版操作指南 - 图文12-17
2022年汕头大学高教所633教育学综合之中国教育史考研冲刺五套模04-10
机试练习4(31-40套含答案)04-16
管道水头损失计算09-03
公司股份制改造总体方案三篇03-16
模拟有机化学试卷110-27
DANFOSS - FC302变频器设置说明 - DP07-11
项目4 LED广告灯设计07-22
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 建模
- 仿真
- 实验
- 报告
- Matlab
- Engine
- RTW
- amp
- 历年中西医结合执业医师高频考题 - 1
- 基础护理学重点简答题
- 高新区应急处置技术方案汇编
- 中央空调冷水机组的设计
- 英语五元教学模式学习心得
- 2012年3.15国际消费者维权日知识竞赛试题
- 学校综合考核实施意见2012
- 高考数学解题的思维策略
- 语文版教材九年级语文(上)单元测试试卷 - 图文
- 2019年中考安徽名校大联考试卷(二)语文试题(Word版 含答案)
- 面料
- 物业开办所需要的物品
- 时代光华《领导力的基础认知》课后测试答案
- 地质作用 - 图文
- 2013年试题整理 2
- 20160913 磁悬浮、离心机、螺杆机、多联机之间的对比
- 数控机床的保养与维护(备课资料)
- 老安山隧道施工方案
- 人教A版高一数学第一次月考试题
- 动态规划基本原理