先吐槽下,我看得是出版社的优秀教材,虽说是二等奖,《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);
第一行是已有的,其他的都要输入。
八、运行首界面:
选中比例环节,运行已有代码,生成的图像:
选中惯性环节,运行已有代码,生成的图像:
选中比例微分环节,运行已有代码,生成的图像:
选中比例积分环节,运行已有代码,生成的图像:
直接输入代码,生成的图像:
本来很简单的,被书上搞得好像很高深一样,这样的书不要也罢。
标签:String,GUI,编程,环节,handles,Matlab,设置,组件,属性 From: https://www.cnblogs.com/guochaoxxl/p/17463150.html