gui指导教程系列(9):在gui中调用含未知参数的simulink模型_第1页
gui指导教程系列(9):在gui中调用含未知参数的simulink模型_第2页
gui指导教程系列(9):在gui中调用含未知参数的simulink模型_第3页
gui指导教程系列(9):在gui中调用含未知参数的simulink模型_第4页
gui指导教程系列(9):在gui中调用含未知参数的simulink模型_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本节教程主要向大家演示使用三种不同的方法,在 GUIDE 中嵌入 Simulink 模块。关于原理大家可以参考 /access/ . g_guis/f6-8865.html在 Simulink 中能够直观快速的搭建系统模型,如果再联合 GUIDE 的面向对象可视化编程,可以说是锦上添花!将 Simulink 融入到 GUIDE 中可以方便模型的终端用户,很容易直接可视化的操控模型参数和显示仿真结果,而此时并不需要进入 Simulink 环境。构建 Simulink 模型该部分我们将快速的构建一个 Simulink 模型方便在后面的 GUIDE 中使用。本次我们就使用一个简单的二阶“质量- 弹簧-阻尼”系统作为示例吧。在使用该教程时,我们假定您已经具备 Simulink 相关建模基础和了解“质量-弹簧-阻尼”系统的理论。因此在这里我就不深入介绍 Simulink 模型的建立和“质量-弹簧-阻尼”系统的数学推导。如果的确需要,建议您参考下/Tutorials/Matlab/Simulink/index.html1、先下载论坛为您制作好的 Simulink 和 GUI 模型 simulink-gui.zip (13.04 KB, 下载次数: 1130) ,包含 simulink_gui.fig、 simulink_gui.m、 simulateButton.m 和 mass_spring.mdl 四个文件,将其解压到 MATLAB 工作目录。2、在 Simulink 中打开模型,框图如下所示3、请注意增益(Gain) 模块的增益使用的是变量 1/m、c/m 和 k/m,而不是数值。因为Simulink 默认使用基本状态空间(Base WorkSpace)的数据,因此在仿真之前必须先在状态空间定义参数 m、c 和 k,否则将出错。当然我们可以使用 set_param()函数直接设置参数,这个将会在后面讲解。4、由于函数有自己的状态空间( 不是 Base Workspace),因此在函数中使用 sim()函数进行模型仿真,即使你在函数中定义了模型的必要参数,但是这些参数只存在于函数状态空间中,模型在仿真是没法获取。比如下面的代码将会导致错误 function runSimulinkModel(m,c,k) % 即使在函数中有模型的参数输入或定义,但是 Simulink 默认只使用基本状态空间的数据 sim(mass_spring);复制代码5、由于函数状态空间和基本状态空间的变量和数据不兼容,这就增加了在 GUIDE 中调用 Simulink 模型的难度。在接下来的教程中,我们将讨论使用三种方法来解决这个问题!GUIDE 调用 Simulink方法一:主要使用 set_param 函数设置仿真参数,具体参考 /thread-17464-1-1.html方法二:Simulink 中提供的 simset()函数,可以让用户自定 Simulink 模型的运行空间(默认是 Base Workspace), 我们只要将 Simulink 设置为从当前工作空间运行就 Ok 了。关于 simset 的更多用法,感兴趣的网友可以自己参考 Matlab 帮助!1、在 GUIDE 中打开 simulink_gui.fig 文件(不会使用 GUIDE,那先看下/thread-5217-1-1.html),GUI 布局如下所示2、打开 simulink_gui.m 文件定位到 Simulate!按钮的回调函数simulate_pushbutton_Callback,在后面添加如下代码 axes(handles.axes1) % 将 axes1设置为当前坐标系,便于绘制仿真结果 m=str2num(get(handles.mass_editText,String); % 获取质量 c=str2num(get(handles.damping_editText,String); % 获取阻尼 k=str2num(get(handles.spring_editText,String); % 获取劲度系数 % 配置 Simulink 仿真选项,使其使用当前工作空间 % 设置 Simulink 从当前工作空间运行 options = simset(SrcWorkspace,current); % 使用 sim()函数对模型进行仿真 % 第一参数是模型名称 % 第二个参数是向量,指定仿真开始和结束时间 % 如果设置为 ,则使用在 Simulink 中设置的始末时间 % 第三个参数设置 Simulink 仿真选项 sim(mass_spring,options); % 绘制图形% 模型中有一个 OUT 模块,使用它我们可以设置输出变量为 tout 和 yout % 然后就可以直接调用 Simulink 的获取仿真结果 tout 和 yout 进行绘图了 plot(tout,yout) xlabel(Time) ylabel(Displacement) Title(2nd Order Mass Spring System) grid on复制代码3、保存修改,再运行 GUI。 在文本框中输入“质量-弹簧 -阻尼”系统的三个参数(注意不要输入字母、符号或负数),然后点击 “Simulate!”按钮,看看我们的劳动成果吧!方法三:1、同样在 GUIDE 中打开未经有修改的 simulink_gui.fig 文件2、双击“Simulate!”按钮打开属性查看器 ,将 Callback 属性修改为 simulateButton。以后每次点击“Simulate!”按钮时,则 GUI 只响应 simlateButton 中定义的操作,而不是simulate_pushbutton_Callback。注意:simulateButton 是另外编写的一个 M 脚本文件,MATLAB 中脚本文件( 不同于函数文件)中的所有变量和数据共用基本状态空间。3、其实 simulateButton.m 脚本的代码如下 % 注意到 simulateButton.m 文件不是一个 M 函数( 以 function 开头的为 M 函数) ,而是 M 脚本! % Matlab 脚本将在基本工作空间运行,它涉及到所有的变量和数据都保存在基本工作空间! % 而 Simulink 所有参数默认调用基本工作空间的数据,所以此时我们就可以直接使用 sim()函数进行模型仿真了! clear all % 获取当前 GUI 窗体的句柄 h =gcf; % 获取 GUI 的 handles 结构体,它包含了所有控件的信息 handles = guidata(h); % 选择当前坐标系,由于后面的绘图 axes(handles.axes1); % 获取文本框中的 Simulink 仿真参数 m=str2num(get(handles.mass_editText,String); % 注意获取的 string 是一个字符串,需要使用str2num 将其转换为数值 c=str2num(get(handles.damping_editText,String); k=str2num(get(handles.spring_editText,String); % 仿真系统 sim(mass_spring); % 绘制仿真结果图形 plot(tout,yout) xlabel(Time) yla

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论