A+GUI+to+Set+Simulink+Model+Parameters

  • 格式:pdf
  • 大小:183.23 KB
  • 文档页数:8

A GUI to Set Simulink Model ParametersGUI与Simulink互联实例这个例子主要介绍如何为GUI的控件(比如滑条、编辑框)来编写代码,而达到从后台为Simulink模型设置参数的目的。

并且,本GUI也可以运行仿真并将画出结果(比如Simulate and store results按钮和Plot按钮)。

下面这张图显示了GUI在运行三个不同控制增益参数的模型后的界面(Run1,Run2,Run3)。

Proportional(Kf)为需要设置的参数之一,Integral(Ki)为所要设置的参数之二。

每个参数都使用一组配套的滑条和编辑框来设置。

右边的Results list按顺序列出了运行得到的仿真结果标签。

本例所用到的一些技术本例所用到的GUI构建知识包括:l从GUI界面打开Simulink模型并设置其参数;l Slider滑条控件和编辑框Edit text控件的联合使用——显示用户已输入的值;l根据GUI的状态来决定某些GUI控件是否激活;l使用handles结构来管理共享数据;l使用隐藏handles进行绘图;l增加一个help按钮,在MA TLAB Help browser中显示本例的帮助网页;如何打开本例程序(跳过)如何使用GUI(讲解各个按钮的作用,跳过)运行GUIGUI Options Settingsl Resize behavior(缩放): Non-resizable不可l Command-line accessibility(接收命令行): Off关闭l M-file options selected:n Generate callback function prototypes自动生成回调函数原型n GUI allows only one instance to run只允许同时运行一个实例这里的是GUI的一些框架设置,如果希望设计出来的GUI界面是可以缩放的,在设计界面的tool->GUI Option。

Resize behavior选择Proportional,则控件的大小也跟着窗口自动变化(2007b版本测试)。

Command-line accessibility主要有四种选择:on(GUI may become Current Figure from command line),off(GUI never becomes Current Figure),callback(GUI becomes Current Figure within callbacks),other(Use settings from property Inspector)。

一般都采用系统默认的callback (2007b版本测试)。

而对于M文件的选项设置,对于新手来说均采取默认为佳。

其中选中第一项,往GUI 添加一个控件后进入M文件,系统才会自动生成该控件的回调函数。

第三项,use system color scheme for background(recommended),这个推荐功能的确很不错。

文件所在目录:\matlab2007\help\techdoc\creating_guis\examples\f14ex.fig(f14ex.m)打开Simulink模块图本GUI实例关联的Simulink模型是F14。

因为GUI要设置模型参数并且运行仿真,所以在GUI界面显示的时候F14应该是打开的。

当通过M文件运行GUI时,它会执行model_open子程序。

这个子程序的步骤是:l检测模型是否已经打开了->find_system;l如果模型没有被打开,则打开模型的模块图以及需要设置参数的子系统->open_system;l改变控制器Gain模块的大小,使它的值正常显示出来->set_paraml将GUI界面前置使得它可以显示在Simulink模块图的前面->figurel根据GUI界面的当前值设置模块参数;以下是model_open子程序的代码function model_open(handles)%函数头,输入参数为handlesif isempty(find_system('Name','f14')),%判断名为f14的模型是否已经打开open_system('f14');%如果没有找到则打开这个模型open_system('f14/Controller')%并打开需要设置参数的子系统set_param('f14/Controller/Gain','Position',[275 14 340 56])%设置Gain模块的位置和大小figure(handles.F14ControllerEditor)%将GUI界面前置使得它可以显示在Simulink模块图的前面% F14ControllerEditor是GUI界面的Tag(唯一性名字,以下称‘名字’)(见第一张图)set_param('f14/Controller Gain','Gain',...get(handles.KfCurrentV alue,'String'))%将GUI中名为KfCurrentV alue的控件值赋给f14中Controller Gain模块的Gain参数set_param(...'f14/Controller/Proportional plus integral compensator',...'Numerator',...get(handles.KiCurrentV alue,'String'))%类似上句end%我的附言:斜杠引用的都是simulink模型的对象,设置和获取信息分别是:set_param(‘模型或者模块的名字路径’,’设置参数’,’设置值’)和get_param();而handles.(一点)来引用的是GUI这边的对象,设置和获取信息分别是:set(‘GUI或者控件的TAG’,’设置参数’,’设置值’)和get()。

设计Slider和Edit Text组件本GUI的设计中的滑条组件和编辑框组件是相互配合的:l Edit text显示对应Slider的当前值;l用户可以在Edit box里输入值,Slider自动更新为此设置值;l两个组件都可以根据用户的输入来更新为相应值;滑条的回调函数Slider CallbackGUI使用了两个滑条来指定相应的模块增益,设置滑条使输入值被限制在一个特定的连续范围内。

当用户改变Slider的值时,它的回调函数则会按以下步骤执行:l调用model_open确定Simulink模型打开,以使得能够设置simulink模型参数;l获取Slider最新值;l更新Edit text的当前值;l将对应的模块参数设置为新值->set_param;以下是Proportional(Kf)对应滑条的callbackfunction KfV alueSlider_Callback(hObject, eventdata, handles)% 函数头.model_open(handles)%确保模型打开NewV al = get(hObject, 'V alue');%从slider控件获得Kf增益的新值set(handles.KfCurrentV alue,'String',NewV al)% 将新值赋予KfCurrentV alue(它对应的编辑框的tag)set_param('f14/Controller/Gain','Gain',num2str(NewV al))%将Kf增益模块的Gain参数设置为新值注意,Slider返回数值类型而Edit text要求字符串类型,此时控件会自动将值转换为正确类型。

Integral(Ki) slider过程类似。

Current Value编辑框的回调函数Current Value Edit Text Callback通过编辑框,用户可以直接输入相应的参数值。

当用户在编辑框输入值后,在别的控件上单击时,编辑框的回调函数按以下步骤执行:l调用model_open确定Simulink模型打开,以使得能够设置simulink模型参数;l将Edit box由String属性返回的字符串转化为double类型->str2double;l检查用户输入的值是否在Slider设置的范围内;²如果输入超出了范围,则将Edit text的String属性置为当前Slider的值(拒绝用户输入的值)²如果输入在允许范围内,则将slider的值按此更新l将对应模块的参数置为新值->set_param;以下是Kf Current value text box的callbackfunction KfCurrentV alue_Callback(hObject, eventdata, handles)%确保模型打开.model_open(handles)% 获取Kf增益的新值,再转换为double类型NewStrV al = get(hObject, 'String');NewV al = str2double(NewStrV al);%检查输入的值是否在范围内.if isempty(NewV al) || (NewV al< -5) || (NewV al>0),% 如果超出范围,则恢复为滑竿的当前值OldV al = get(handles.KfV alueSlider,'V alue');set(hObject, 'String',OldV al)else % 否则,使用编辑框输入的新值%将slider的值置为新值.set(handles.KfV alueSlider,'V alue',NewV al)%设置KF增益模块的增益参数为新值set_param('f14/Controller/Gain','Gain',NewStrV al)end附:Ki Current value模块也是类似的过程。

从GUI界面运行simulinkGUI上的Simulink and store results按钮的回调函数运行仿真模型且将结果储存在handles结构里。