针刺伤的讨论:GUI指导教程系列(9)——在GUI中调用Simulink模型 - MATLAB技术论坛 ...
来源:百度文库 编辑:中财网 时间:2024/10/05 13:39:03
MATLAB技术论坛
标题: GUI指导教程系列(9)——在GUI中调用Simulink模型作者: dynamic 时间: 2010-3-25 22:40 标题: GUI指导教程系列(9)——在GUI中调用Simulink模型
本节教程主要向大家演示使用三种不同的方法,在GUIDE中嵌入Simulink模块。关于原理大家可以参考http://www.mathworks.com/access/ ... g_guis/f6-8865.html
在Simulink中能够直观快速的搭建系统模型,如果再联合GUIDE的面向对象可视化编程,可以说是锦上添花!将Simulink融入到GUIDE中可以方便模型的终端用户,很容易直接可视化的操控模型参数和显示仿真结果,而此时并不需要进入Simulink环境。
构建Simulink模型
该部分我们将快速的构建一个Simulink模型方便在后面的GUIDE中使用。本次我们就使用一个简单的二阶“质量-弹簧-阻尼”系统作为示例吧。
在使用该教程时,我们假定您已经具备Simulink相关建模基础和了解“质量-弹簧-阻尼”系统的理论。因此在这里我就不深入介绍Simulink模型的建立和“质量-弹簧-阻尼”系统的数学推导。如果的确需要,建议您参考下http://edu.levitas.net/Tutorials/Matlab/Simulink/index.html
1、先下载论坛为您制作好的Simulink和GUI模型
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');
GUIDE调用Simulink
方法一:
主要使用set_param函数设置仿真参数
方法二:
Simulink中提供的simset()函数,可以让用户自定Simulink模型的运行空间(默认是Base Workspace),我们只要将Simulink设置为从当前工作空间运行就Ok了。关于simset的更多用法,感兴趣的网友可以自己参考Matlab帮助!
1、在GUIDE中打开simulink_gui.fig文件(不会使用GUIDE,那先看下http://www.matlabsky.com/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
方法三:
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')
- ylabel('Displacement')
- Title('2nd Order Mass Spring System')
- grid on
4、保存下对GUI的修改,验证下我们的成果吧!
http://www.matlabsky.com/forum.php?mod=attachment&aid=NDQ0NHwyYzg5NTYyY3wxMzA0MDc3ODI0fDkwMDk5
http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_3
http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_4
http://www.matlabsky.com/forum.php?mod=attachment&aid=NDQ0N3wzZDlkNzA3NHwxMzA0MDc3ODI0fDkwMDk5
http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_5
http://www.matlabsky.com/forum.php?mod=attachment&aid=NDQ0OXw2ZDE0NDQwNHwxMzA0MDc3ODI0fDkwMDk5
http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_6
http://image28.360doc.com/DownloadImg/2011/04/2919/11332968_7
assignin('base','c',c);
assignin('base','k',k);
sim('massspring');也可以
在eclipse中设置gui
gui( )中女郎
GUI设计师
什么是GUI
GUI是什么意思
GUI是什么
JAVA GUI中如何设定组件尺寸
windowsxp用ntfs格式在图形界面(GUI)中为何无法使用用户访问控制列表?
如何用JAVA中GUI开发一个通讯录
如何用GUI方式向PostgreSQL数据库中添加数据
什么是GUI设计
什么是GUI界面
GUI 设计方案是什么?
GUI是什么东西?
什么是嵌入式GUI
关于GUI的表达方式
中国GUI发展现状
关于MATLAB的GUI
gui求!联想笔记本!!!
Hscan Gui Version 1.20
gui树是什么
gui求(刘老根大舞全集)
CS的GUI备份
关于Java的GUI