《MATLABGUI程序设计初步.pptx》由会员分享,可在线阅读,更多相关《MATLABGUI程序设计初步.pptx(44页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答引言MATLAB的GUI程序设计可以用两种方式实现,一种是借助GUI开发工具GUIDE,一种是利用m文件代码构建界面。采用GUIDE进行设计的方法所见即所得,直观方便,很容易上手。本章主要介绍利用GUIDE方法进行设计的步骤。有兴趣的用户可以进一步了解学习全部利用m文件代码构建界面及执行程序的方法。第1页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答本章主要内容6.1 GUI设计工具Guide简介6.1.1 GUIDE的启动6.1.2 GUI界面的创建6.
2、2 GUI程序设计示例6.2.1“Hello World”程序的设计6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序第2页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.1 G U I 设 计 工 具 G u i d e 简 介第3页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答MATLAB提供了用户图形界面开发程序GUIDE,支持可视化编辑。它是一种基于事件或者说是事件驱动的程序(event driven),类似于方便易用的Visual Basic。第4页/共44页MATL
3、AB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.1.1 GUIDE的启动可以如下不同方式启动GUIDE:1.在命令窗口提示符下输入guide;2.在工具栏选打开;3.在Start菜单中选MATLAB GUIDE(GUI Builder);4.MATLAB File 菜单中选New GUI。第5页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.1.1 GUIDE的启动以上面任一种方式打开GUIDE后,即下图的启动界面。GUIDE启动界面 第6页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社
4、,2009.8.在线交流,有问必答6.1.2 GUI界面的创建用户创建新的GUI,也可打开已有的GUI。创建界面时还可在模板基础上进行,在选择GUI模板时,启动界面右侧提供了预览。以以“GUI with axes and menuGUI with axes and menu”模板创建的模板创建的GUIGUI初始界面。初始界面。第7页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2 GUI程序设计示例第8页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答概述 本节通过2个示例,演示MATLA
5、B的GUI程序设计。一个是“Hello World”程序,作为初步了解。一个用来演示控制系统传递函数典型环节的响应曲线,具有一定实用性。第9页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计下面以一个类似于学习其它程序设计的第一个程序“Hello World”为例,讲解GUIDE的有关知识。程序的目标是当按下按钮时,由文本控件显示“Hello World”。第10页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答显示控件名称的设置界面 对界面左侧的控
6、件如果不够熟悉的话,可以通过FilePreferences选项,选中“Show names in component palette”第11页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答GUI设计界面在显示控制图标的同时,还显示控件名称 GUI设计界面 第12页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计1.“Hello World”程序界面设计2.“Hello World”程序的设计3.程序测试运行第13页/共44页MATLAB与控制系统仿
7、真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计1.“Hello World”程序界面设计GUI设计中的界面设计部分比较容易。在窗口上添加一个按钮控件(Push Button)和一个文本控件(Static Text)。可以双击控件调出属性编辑器进行其属性的设置。第14页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答本例中,设按钮控件的“String”属性为“问候”,“Tag”属性为“helloBt”,见右图按钮属性设置 第15页/共44页MATLAB与控制系统仿真实践,北京航空航天
8、大学出版社,2009.8.在线交流,有问必答设置文本控件的“String”属性为空,表示初始状态下不显示任何信息,“Tag”属性为“helloStr”,为显示清楚,设其“FontSize”属性为“28”。见右图文本控件属性设置 第16页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计1.“Hello World”程序界面设计需要注意的是,“Tag”属性设置要唯一,因为“Tag”属性是唯一标识控件的。至此,我们的界面设计工作完成。在保存时,会生成2个文件,一个是helloworld.fig,一个是he
9、lloworld.m。第17页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计1.“Hello World”程序界面设计此外可通过ToolsMenu Editor进行类似于Windows程序的菜单设计。编辑窗口见左图,效果见右图。菜单设计的编辑窗口菜单效果图第18页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程 序 的 设 计2.“Hello World”程序的设计按照要求,我们可以给按钮添加动作,即给它编写一
10、个回调函数(Callback)。右键单击按钮,选择View CallbacksCallback自动打开helloworld.m文件并指向该回调函数。根据需要为其添加语句。程序将句柄集handles的helloStr(即文本控件)“String”属性设置为“Hello World”,即完成了设计要求。第19页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计2.“Hello World”程序的设计下面这段程序的意思是当点击按钮时,即由程序设置文本控件的“String”属性值为“Hello World”。
11、function helloBt_Callback(hObject,eventdata,handles)set(handles.helloStr,String,Hello World!);第20页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计2.“Hello World”程序的设计注意回调函数的概念,它指的是在对象的某一个事件发生时,MATLAB内部机制允许自动调用的函数。其几个参数的意思分别为 hObject表示当前窗口的句柄;eventdata表示事件代码,为保留 handles是该窗口中的所
12、有句柄的集合。回调函数有的是针对窗口而言的,有的是对具体控件而言的,学会回调函数的编写有助于高效编写MATLAB GUI程序 第21页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计3.程序测试运行在程序编辑窗口运行测试,或在命令窗口键入程序名称“helloworld”,即可运行。如下图:helloworld程序运行界面 第22页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.1“Hello World”程序的设计3.程序测试运行注意:当不小
13、心将helloworld.fig关掉后,再次编辑需要重新打开。其方法可以通过FileNewGUIOpen Existing GUI来打开。如按照一般理解选择FileOpen项的话,只能打开其运行窗口而不可编辑。第23页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序1.程序功能描述2.程序界面设计3.程序代码设计4.程序测试运行第24页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节
14、的演示程序1.程序功能描述进行控制系统典型环节的演示,包括了典型环节运行效果的演示与代码的展示。也可以在代码区输入绘制曲线语句并通过点击定制曲线按钮绘制曲线。第25页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序2.程序界面设计 根据程序功能要求,添加不同控件,并设置控件各自的属性。(1)Axes控件作用为显示图形,典型环节的阶跃响应曲线及定制曲线都在此处进行显示。“Tag”属性设为myAxes。(2)Panel控件用来盛放其它控件,这里盛放的是代码区。“Tag”属性设为uipan
15、el。“Title”属性设为空。第26页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(3)Edit Text控件用于输入和显示文本。此处作为代码区,主要作用为展示典型环节的代码、输入用户定制的曲线代码。“Tag”属性设为:strCode。“String”属性设为:Please input command for example:x=0:0.1:4*pi;y=sin(x);这为用户定制曲线提供了一个例程。第27页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,20
16、09.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(4)Static Text控件作为标识,提示位于其下方的ListBox控件选项是进行典型环节的演示的。“Tag”属性设为txtDemo,“String”属性设为典型环节演示。(5)ListBox控件类似于一组复选框,用户可以从中选择不同选项。“Tag”属性设为:lstBox “String”属性设为:比例环节 惯性环节 比例微分环节 比例积分环节表示此列表共有4项内容即4个典型环节可选。第28页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2
17、一个实用的GUI设计示例控制系统典型环节的演示程序(6)Push Button控件表现为一个按钮。本例中使用了两个此控件。一个用于定制曲线的绘制。用户在代码区输入绘制曲线语句后,点击此按钮进行曲线的绘制。“Tag”属性设为btnDraw,“String”属性设为定制曲线,“TooltipString”属性设为在代码区中输入曲线参数,绘制任意曲线。这样当用户将光标置于按钮之上时,会有相应的提示信息。一个用于关闭运行窗口。“Tag”属性设为btnClose,“String”属性设为关闭,“TooltipString”属性设为关闭窗口。第29页/共44页MATLAB与控制系统仿真实践,北京航空航天大
18、学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序设定完成的界面草图如右图 程序界面设计草图 第30页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序至此,本例所需的控件已设置完毕。在最初按照草图添加部署了所有的控件后,往往不会排列得很整齐。此时可根据需要进行控件的排列。第31页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演
19、示程序如在本例中,要将位于窗口右侧的4个控件竖排整齐,则可在窗口选ToolAlign Objects弹出的窗口中进行选择,如图。界面控件布局设置 第32页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序3.程序代码设计根据要求,在选择典型环节时需要设置回调函数。此外,对两个按钮控件也要设置回调函数。回调函数的生成在前一个例子已讲过,这里不重复。这里只给出相应的代码段供参考。第33页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2
20、.2 一个实用的GUI设计示例控制系统典型环节的演示程序(1)(1)定制曲线按钮的回调函数定制曲线按钮的回调函数function btnDraw_Callback(hObject,eventdata,handles)function btnDraw_Callback(hObject,eventdata,handles)try try str=char(get(handles.strCode,String);%str=char(get(handles.strCode,String);%将在代码区输入的代码转换成数将在代码区输入的代码转换成数组组 str0=;str0=;for ii=1:size
21、(str,1)%for ii=1:size(str,1)%对对strstr的每行操作的每行操作 str0=str0,deblank(str(ii,:);%str0=str0,deblank(str(ii,:);%将将strstr第第ii ii行去掉空格后作为向量行去掉空格后作为向量str0str0的一的一个元素个元素 endend eval(str0);%eval(str0);%执行代码执行代码 axes(handles.myAxes);%axes(handles.myAxes);%将将myAxesmyAxes设为当前坐标系设为当前坐标系 plot(x,y);%plot(x,y);%绘制曲线绘
22、制曲线catchcatch errordlg(errordlg(请重新检查输入数据请重新检查输入数据!);%!);%如有数据错误,捕获并给出提示如有数据错误,捕获并给出提示endend第34页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(2)(2)典型环节列表框的回调函数典型环节列表框的回调函数function lstBox_Callback(hObject,eventdata,handles)function lstBox_Callback(hObject,eventdata,
23、handles)v=get(handles.lstBox,value);%v=get(handles.lstBox,value);%取出所选项的值取出所选项的值%对不同选项,进行对应环节曲线的绘制和代码的展示对不同选项,进行对应环节曲线的绘制和代码的展示switch v switch v case 1,%case 1,%比例环节比例环节 str1=nump=3;denp=1;%str1=nump=3;denp=1;%绘制比例环节曲线的代码绘制比例环节曲线的代码 str2=t=0:0.1:10;str2=t=0:0.1:10;str3=y,t,x=step(nump,denp,t);str3=y
24、,t,x=step(nump,denp,t);%将代码作为数组赋值给代码区的将代码作为数组赋值给代码区的StringString属性,即展示代码属性,即展示代码 set(handles.strCode,String,char(str1,str2,str3);set(handles.strCode,String,char(str1,str2,str3);%将所选环节名称显示在将所选环节名称显示在panelpanel控件上控件上 set(handles.uipanel,Title,set(handles.uipanel,Title,比例环节比例环节););case 2,%case 2,%惯性环节惯
25、性环节 str1=numg=1;deng=0.2 1;str1=numg=1;deng=0.2 1;str2=t=0:0.1:10;str2=t=0:0.1:10;str3=y,t,x=step(numg,deng,t);str3=y,t,x=step(numg,deng,t);set(handles.strCode,String,char(str1,str2,str3);set(handles.strCode,String,char(str1,str2,str3);set(handles.uipanel,Title,set(handles.uipanel,Title,惯性环节惯性环节)第35
26、页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序case 3,%case 3,%比例微分比例微分 str1=K=2;T=0.1;N=5;numpd=K*T K;denpd=T/N 1;str1=K=2;T=0.1;N=5;numpd=K*T K;denpd=T/N 1;str2=t=0:0.1:10;str2=t=0:0.1:10;str3=y,t,x=step(numpd,denpd,t);str3=y,t,x=step(numpd,denpd,t);set(handles.st
27、rCode,String,char(str1,str2,str3);set(handles.strCode,String,char(str1,str2,str3);set(handles.uipanel,Title,set(handles.uipanel,Title,比例微分环节比例微分环节););case 4,%case 4,%比例积分比例积分 str1=K=4;T=0.2;numpi=K*T K;denpi=T 0;str1=K=4;T=0.2;numpi=K*T K;denpi=T 0;str2=t=0:0.1:10;str2=t=0:0.1:10;str3=y,t,x=step(num
28、pi,denpi,t);str3=y,t,x=step(numpi,denpi,t);set(handles.strCode,String,char(str1,str2,str3);set(handles.strCode,String,char(str1,str2,str3);set(handles.uipanel,Title,set(handles.uipanel,Title,比例积分环节比例积分环节););endend%axes(handles.myAxes);%axes(handles.myAxes);%将将myAxesmyAxes设为当前坐标系设为当前坐标系btnDraw_Callba
29、ck(hObject,eventdata,handles)%btnDraw_Callback(hObject,eventdata,handles)%调用定制曲线按钮调用定制曲线按钮的回调函数进行曲线绘制的回调函数进行曲线绘制第36页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(3)(3)关闭窗口按钮的回调函数关闭窗口按钮的回调函数function btnClose_Callback(hObject,function btnClose_Callback(hObject,eventd
30、ata,handles)eventdata,handles)close(gcf);%close(gcf);%关闭关闭当前图形窗口当前图形窗口第37页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序4.程序测试运行运行程序后,出现如图所示程序首界面 第38页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(1)(1)输入绘制曲线的代码,输入绘制曲线的代码,如:如:x=0:0.
31、1:4*pi;x=0:0.1:4*pi;y=cos(x);y=cos(x);点击定制曲线按钮后,出点击定制曲线按钮后,出现如图运行结果。现如图运行结果。第39页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序比例环节演示结果如图所示(a)第40页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序 (b)n惯性环节演示结果如图所示如图所示 第41页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(c)n n比例微分环节演示结果如图所示比例微分环节演示结果如图所示 第42页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答6.2.2 一个实用的GUI设计示例控制系统典型环节的演示程序(d)n n比例积分环节演示结果如图所示比例积分环节演示结果如图所示 第43页/共44页MATLAB与控制系统仿真实践,北京航空航天大学出版社,2009.8.在线交流,有问必答谢谢您的观看!第44页/共44页