Matlab GUI编程入门

  先吐槽下,我看得是出版社的优秀教材,虽说是二等奖,《Matlab与控制系统仿真实践》第3版,北京航空航天大学出版社 赵广元编著,想着入门,找本国内的书快速入门。谁知道一个上午就这么过去了。以一个控制系统典型环节演示为例,课本从P95开始:

一、准备工作,设置下显示组件的名称与图标HOME-preferences-MATLAB-GUIDE,将右侧的show names in component palette的复选框勾选中;这一步中漏掉了关键的-MATLAB-GUIDE,这也可以吗?

二、在matlab的命令窗口输入guide,

打开gui创建界面,将需要的组件拖到合适的位置,可以拖动改变位置和大小,成品如下:

  左上角的是Axes组件,用来显示生成的波形

  右上角上边是static text组件,显示提示信息,下边是Listbox组件,环节列表展示,可以选中环节

  左下角上层是Edit text组件,下层是Panel组件,用来接受用户输入的代码

  右下角是三个垂直排列的Push Button组件,通过这些按钮完成相应的操作

三、Axes组件的Tag属性设置为myAxes即可

四、static text组件Tag属性设置为txtDemo;String属性设置为 典型环节演示。ListBox组件的Tag属性设置为

比例环节
惯性环节
比例微分环节
比例积分环节,

切记,必须将Max属性设置为2.0或更大些,否则,不能输入多行数据,

五、Panel组件的Tag属性设置为uipanel, Title设置为空;Edix Text主要用来输入和显示文本,Tag属性设置为strCode,String属性设置为空,书上的设置是胡乱写的,不用管他,切记,必须将Max属性设置为2.0或更大些,否则,不能输入多行数据,

六、PushButton1Tag属性设置为btnDraw,String属性设置为定制曲线,tooltip属性设置为定制

PushButton2Tag属性设置为pushbutton2,String属性设置为清除,tooltip属性设置为清除
PushButton3Tag属性设置为btnClose,String属性设置为关闭,tooltip属性设置为关闭窗口

七、共需要四个回调函数,可以简单理解,就是在特定动作下调用发生的函数,这里定制曲线按钮、清除按钮、关闭按钮和列表框需要写回调函数,方法是,右击组件

单击Callback自动跳转到编辑窗口中的对应代码函数的位置,输入对应的内容即可:

listBox组件回调函数代码

 
 1 function lstBox_Callback(hObject, eventdata, handles)
 2 v = get(handles.lstBox, 'value');
 3 switch v
 4     case 1,
 5         str1 = 'nump = 3; denp = 1;';
 6         str2 = 't=0:0.1:10;'
 7         str3 = '[y,t,x]=step(nump, denp, t);';
 8         set(handles.strCode, 'String', char(str1,str2,str3));
 9         set(handles.uipanel, 'Title','比例环节');
10     case 2,
11         str1 = 'numg = 1; deng = [0.2 1];';
12         str2 = 't=0:0.1:10;'
13         str3 = '[y,t,x]=step(numg, deng, t);';
14         set(handles.strCode, 'String', char(str1,str2,str3));
15         set(handles.uipanel, 'Title','惯性环节');
16     case 3,
17         str1 = 'K = 3; T = 0.5; N=5; numpd=[K*T K]; denpd=[T/N 1];';
18         str2 = 't=0:0.1:10;'
19         str3 = '[y,t,x]=step(numpd, denpd, t);';
20         set(handles.strCode, 'String', char(str1,str2,str3));
21         set(handles.uipanel, 'Title','比例微分环节');
22     case 4,
23         str1 = 'K = 4; T = 0.2; N=5; numpi=[K*T K]; denpi=[T 0];';
24         str2 = 't=0:0.1:10;'
25         str3 = '[y,t,x]=step(numpi, denpi, t);';
26         set(handles.strCode, 'String', char(str1,str2,str3));
27         set(handles.uipanel, 'Title','比例积分环节');
28 end

第一行是已有的,其他的都要输入。

以下是btnDraw按钮的回调函数

 1 function btnDraw_Callback(hObject, eventdata, handles)
 2 try
 3     str = char(get(handles.strCode, 'String'));
 4     str0 = [];
 5     for ii = 1:size(str,1)
 6         str0 = [str0, deblank(str(ii,:))];
 7     end
 8     eval(str0);
 9     axes(handles.myAxes);
10     plot(x,y);
11 catch
12     errordlg('请重新检查输入数据!');
13 end

第一行是已有的,其他的都要输入。

以下是

pushbutton2按钮的回调函数:
1 function pushbutton2_Callback(hObject, eventdata, handles)
2 set(handles.strCode, 'String','');

第一行是已有的,其他的都要输入。

以下是btnDraw按钮的回调函数:

1 function btnClose_Callback(hObject, eventdata, handles)
2 btnDraw_Callback(hObject, eventdata, handles)
3 close(gcf);

第一行是已有的,其他的都要输入。

八、运行首界面:

选中比例环节,运行已有代码,生成的图像:

选中惯性环节,运行已有代码,生成的图像:

选中比例微分环节,运行已有代码,生成的图像:

选中比例积分环节,运行已有代码,生成的图像:

直接输入代码,生成的图像:

本来很简单的,被书上搞得好像很高深一样,这样的书不要也罢。

posted @ 2023-06-07 14:08  叕叒双又  阅读(247)  评论(0编辑  收藏  举报