利用MATLABGUI设计控制系统分析与设计界面.docx

上传人:b****1 文档编号:2529697 上传时间:2023-05-03 格式:DOCX 页数:42 大小:338.95KB
下载 相关 举报
利用MATLABGUI设计控制系统分析与设计界面.docx_第1页
第1页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第2页
第2页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第3页
第3页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第4页
第4页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第5页
第5页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第6页
第6页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第7页
第7页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第8页
第8页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第9页
第9页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第10页
第10页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第11页
第11页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第12页
第12页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第13页
第13页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第14页
第14页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第15页
第15页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第16页
第16页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第17页
第17页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第18页
第18页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第19页
第19页 / 共42页
利用MATLABGUI设计控制系统分析与设计界面.docx_第20页
第20页 / 共42页
亲,该文档总共42页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

利用MATLABGUI设计控制系统分析与设计界面.docx

《利用MATLABGUI设计控制系统分析与设计界面.docx》由会员分享,可在线阅读,更多相关《利用MATLABGUI设计控制系统分析与设计界面.docx(42页珍藏版)》请在冰点文库上搜索。

利用MATLABGUI设计控制系统分析与设计界面.docx

利用MATLABGUI设计控制系统分析与设计界面

利用MATLABGUI设计控制系统分析与设计界面

1引言

图形用户接口GUI是用户和计算机程序之间进行信息交流的方式。

通过图形用户界面,用户不需要输入脚本或命令,不需要了解任务的内部运行方式,计算机在屏幕显示图形和文本,若有扬声器还可产生声音。

用户通过输入设备,键盘,鼠标,麦克风等与计算机进行通信。

图形用户界面GUI中包含多个图形对象,如图标,菜单,文本的用户界面。

以某种方式选择或激活这些对象,引起相应的动作或变化,最常用的激活方式是用鼠标控制屏幕上的鼠标指针运动。

图形用户界面GUI具有操作方便,控制灵活的特点,已成为现代应用程序的主要方式。

用MATLABGUI设计一个控制系统分析与设计界面,将系统的传递函数输入到GUI中,可以方便的绘制系统的各种常用曲线,如阶跃响应曲线,Nyquist曲线可以用于系统稳定性的分析,我们可以有意识的输入系统的开环传递函数或是闭环传递函数,分别对应Nyquist曲线和阶跃响应图。

根轨迹对控制系统的分析和设计也很有价值。

零极点图可以方便的查看系统的零极点分布,对于配置系统的极点进行系统校正具有重要意义。

Bode图和幅频响应图对系统的频率响应分析是一种手段,而阶跃响应指标则可更细致的观察系统的性能。

用GUI设计控制系设计控制系统分析与设计界面不仅在工程上有参考意义,在我们的学习过程中也很有意义,可以帮助我们更深入更容易理解控制系统的分析与设计意义。

传递函数是控制系统的核心,在这里设计了两种常用的传递函数输入形式,第一种可以称为直接形式,因为他的传递函数是已知的,我们可以将系统或以开环传递函数或闭环传递函数的形式输入GUI中,进行相应的分析设计;第二种是状态变量形式,这里开环或闭环取决于转换而来的状态空间方程,因为开环和闭环系统都可以转换为状态空间,因而在进行相应的计算和绘图时需注意。

2问题分析

题目要求以MATLABGUI设计图形用户界面,设计控制系统分析与设计界面,界面中包含控制系统中常见的功能,传递函数的输入和创建,性能指标计数显示,绘制常用曲线等。

传递函数是控制系统研究中的核心问题,常用的有

和状态变量形式

两种形式,第一种对于具体的某个传递函数而言是单输入但输出的(如果系统是多输入多输出的,则对于不同的输入而言,传递函数一般式不同的。

),第二种形式可以设置y和

来实现多输入多输出。

本设计将这些功能具体化如下表格所示:

表1.1

传递函数

第一种形式

分子矩阵num

分母矩阵den

状态变量形式

矩阵A

矩阵B

矩阵C

矩阵D

阶跃响应性能指标(performance)

峰值mp

峰值时间Tp

稳态增益yss

超调量Del

上升时间Tr

调整时间Ts

常用曲线

Bode

Nyquist

RootLocus

PoleZero

impulse

step

nichols

幅频特性

输入序号n

指定多输入时是创建哪个输入量的传递函数

标志位k

指定使用第一种形式还是状态变量形式下的传递函数

close按钮

关闭GUI的运行

3GUI设计

3.1启动GUI

启动MATLAB后在命令窗口中键入guide,启动GUIDE,弹出“GUIDEQuickStart”对话框,或者通过file→new→GUI进入,在弹出的GUIDE模版中创建新的GUI或打开已经存在的GUI,也可以选择一些模版,这里新建一个GUI,选择BlankGUI(Default)模版。

3.2GUI窗口大小设计

我们可以改变GUI输出编辑器的网格区域大小指定GUI的大小,操作方法是,单击网格区域的右下角并进行拖拉。

另外可以在“View”菜单下选择“PropertyInspector”打开属性查看器,选择“Units”后面的按钮,然后选择弹出式菜单的“inches”,单击“Position”后面的“+”符号,输入x和y的坐标和GUI窗口的宽度和高度,再将“Units”属性设为character,这样可以进行精确地设置GUI的位置和大小。

本设计采用默认地情况。

3.3添加、对齐组件

GUI输出编辑器中包含了各种组件供用户设计界面,这里从工具箱中选择9个“StaticText”静态文本框,8个“EditText”可编辑文本框,一个“Pop-upMenu”下拉式列表框,一个“PushButton”按钮和一个“Axes”坐标系,将它们分别拉到设计区。

具有相同父对象的组件,可以用对齐工具将他们对齐,例如对第一列的是四个可编辑文本,按住同时连续选择他们,从“Tools”选择“AlignObjects’显示对齐工具,也可以重工具条上选择“

”图标进入对齐工具对话框,从中选择水平左对齐,当然去我们也可以设置他们之间的间隔,对齐工具和各组件布局如下:

图3.1对齐工具

图3.2组件布局图

3.4设置GUI组件属性

GUI中各组件的属性设置很重要,对回调函数的识别,数据的输入都很重要。

从“View”菜单中选择“PorpertyInspector”选项,或点击工具条上的“

”按钮,显示属性对话框,利用属性对话框设置个组件的属性。

如果没有选择组件,属性查看器会显示GUI图形窗口的属性。

在输出编辑器中选择各静态文本,将他们的“String”属性依次设置成“num”、“den”、“A”、“B”、“C”、“D”、“输入序号n”、“标志位k”、“types”,他们分别指示他们图标位置之下的可编辑文本输入的信息类型,其中“num”、“den”、“A”、“B”、“C”、“D”对应传递函数的矩阵,如表1.1所示。

“输入序号n”表示输入量的顺序号,在多输入创建传递函数时指定创建的是那个输入的传递函数,这里我们不能将输入序号n的值设置的比输入个数多,否则可能出错,其初始值为1,表示单输入的情况或多输入的第一个输入量。

“标志位k”表示传递函数是“num”、“den”所确定的还是“A”、“B”、“C”、“D”所创建的,在绘制常用曲线图形以及计算显示性能指标的时候需要指定传递函数是来源于哪种情况,以免发生错误。

标志位k的初始值为0,表示使用“num”、“den”确定的传递函数,k值为1时使用“A”、“B”、“C”、“D”所确定的传递函数。

“types”表示在其图标位置之下的下拉式列表框中选择绘图类型和计算性能指标。

下拉式列表框的“String”属性设置方法为单击String属性后的“

”图标打开String属性的编辑窗口,如图2.3所示输入。

下拉式列表框共有九种类型,即其“String”属性中所列的“Bode”、“Nyquist”、“RootLocus”、“PoleZero”、“impulse”、“step”、“nichols”、“幅频特性”、“performance”分别表示绘制波德图、奈奎斯特图、根轨迹、零极点图、脉冲响应曲线图、阶跃响应曲线图、nichols图、幅频特性图、计算阶跃响应的性能指标。

依据上面得“String”属性顺序依次设置可编辑文本的“Tag”属性为“num_edit”“den_edit”“AA”“BB”“CC”“DD”“n_edit”“k_edit”将下拉式列表框的Tag属性设置为“popupmenu”。

GUI根据组件的Tag属性值在保存时和第一次运行时自动设置回调函数的名称,如下拉式列表框的回调函数名为“popupmenu_Callback”。

设置按钮的String的属性为“close”,Tag属性为“pushbutton”。

功能为按下close按钮结束GUI的运行。

组件的“String’属性见图3.2.

图3.3下拉式列表框的String属性编辑窗口

3.5对象浏览

利用对象浏览器,可查看当前所创建的图形对象,选择Tools→ObjectBrowser命令或单击设计编辑器界面工具栏的“

”按钮,打开对象浏览器,从中可以看出,对象在浏览器中是按创建的先后顺序显示的。

见图3.4.

图3.4对象浏览器

3.6M文件编写

完成GUI输出编辑器的设计和属性设置之后,接下来就是进行M文件的编辑。

第一次保存和运行GUI时,GUIDE会生成一个函数式M文件,它包含每个组件要用到的回调函数框架,以及一些初始化代码,一个初始函数回调和一个输出函数回调。

生成M文件以后,它打开“SaveGUIas”对话框,在“Filename”文本框中键入文件名,本次设计文件名为“sheji”,GUIDE将相同的名称指定给FIG文件和M文件,单击“Save”按钮时,GUIDE会保存M文件并在M文件编辑器中打开它。

创建了M文件以后,就可以通过单击输出编辑器中的工具条上的“

”按钮来打开M文件编辑器。

在M文件编辑器中可以通过单击工具条上的“

”按钮,然后在下拉菜单中选择目标回调来将光标移动到指定的回调函数。

下面从功能的角度来分析个函数。

3.6.1回调间和数据共享

通过将数据保存到MATLABhandles结构中,可以实现回调间的数据共享。

GUI中的所有组件使用同一个handles结构,它会传递一个输入变量给GUIDE生成的所有回调函数。

例如本设计中的一句语句handles.N=str2num(get(handles.n_edit,'String')),功能为先通过get函数命令获得对象属性,将n可编辑文本输入的字符转换为数字赋给名称为handles.N的handles结构的字段,用guidata(hObject,handles)函数保存handles结构,在其他的回调函数中就可以使用handles.N,或者赋给某个变量,调用这些数据了。

3.6.2初始化

为了增加美感,本次设计初始化函数中增加了一个绘制曲面的函数,绘制的是MathWorks公司的图标,因而选用了这个函数。

使用surf命令,数据来源于membrane。

在初始化中设置可编辑文本的初始值时使用set函数,例如set(handles.num_edit,'String','286'),功能为设置num矩阵的初始值为[286],但是需要注意的是这里是文本矩阵。

3.6.3数据输入

本设计中需要输入的数据有矩阵和控制数据(n,k),输入的形式都是文本字符或字符串的形式,通过可编辑文本EditText输入的。

对于矩阵先要将字符串转换为文本矩阵,再将文本矩阵转换为数字矩阵,例如handles.num0=str2mat(get(handles.num_edit,'String'));handles.num1=str2num(handles.num0);

将get获得num对象字符串通过str2mat命令转为文本矩阵handles.num0再将其通过str2num命令将其转换为数字矩阵handles.num1,这样便能在MATLAB中进行处理了。

3.6.4创建传递函数和输入量的选择

这里所用的传递函数有两种两种形式,对于已知传递函数,以分子分母矩阵形式输入的情形比较简单,绘图时都是直接利用分子分母矩阵。

对于状态变量形式的情况,需要先将A,B,C,D四个矩阵转换为分子分母矩阵形式,以利于以后的绘图和计算性能指标。

例如

[handles.numx,handles.denx]=ss2tf(handles.AAA,handles.BBB,handles.CCC,handles.DDD,handles.N);

使用ss2tf命令将前面程序中获得handles.AAA,handles.BBB,handles.CCC,handles.DDD矩阵和handles.N数字转化为分子矩阵handles.numx和分母矩阵handles.denx,handles.N为指定ss2tf命令转换序号为handles.N(在GUI界面中看为输入序号n)的输入量的数据,这里我们要弄清楚输入量的个数不能将输入序号n的值设置的比输入个数还大,输入序号n的初始值设为1,表示单输入或多输入第一个输入量的情况。

3.6.5选择传递函数

在后面的绘图和计算性能指标中需要选择使用哪种形式下的传递函数,因此设计了一个标志位k,标志位k的可选值为0和1,值0时为选择分子分母形式输入的传递函数,值1为时选择状态变量形式创建的传递函数,若输入其他值,则不能正确绘图和计算性能指标,且在命令窗口中输出“标志位k=0or1”以及弹出消息对话框进行提醒,使用if…elseif…else…end语句结构实现这些功能。

例如

ifhandles.K==0

bode(handles.num1,handles.den1);

elseifhandles.K==1

bode(handles.numx,handles.denx);

else

disp('标志位k=0or1');

end

3.6.6绘图类型的选择

绘图和计算性能指标类型是集中在下拉式列表框中的,因此需要对他们进行选择识别,每次用户选择其中的某项功能时,下拉式列表框的回调函数都会读取下拉式列表框的Value属性值,以便执行相应的功能,这里使用分支语句实现实现选择,例如:

val=get(hObject,'Value');

str=get(hObject,'String');

switchstr{val}

case'Nyquist'

hs=figure;

ifhandles.K==0

nyquist(handles.num1,handles.den1);

elseifhandles.K==1

nyquist(handles.numx,handles.denx);

else

disp('标志位k=0or1');

end

title('NyquistFig');

图3.5k输入其他值时消息提醒

3.6.7性能指标计算

性能指标是计算系统阶跃响应的相关指标,这里计算了六项,分别为,

%mp--峰值

%Tp--峰值时间

%Tr--上升时间

%Del--超调量

%Ts--调整时间(2%准则)

%yss--稳态值

程序中将阶跃响应设置成幅值和时间两者返回数据来表现[Y,t]=step(sys);,这样就能方便的计算出mp,Tp,yss。

上升时间是定义成幅值从0.1(t1)达到0.9(t2)的时间,计算式为

调整时间为最后一超出2%准则区域后再一次进入2%准则区域时的时间,这里需要用程序进行循环判断,以确定Ts,具体见附录程序。

超调量计算式为

在这里我们可以在绘制阶跃响应时在程序中加上两条语句

hs=figure;

step(handles.num1,handles.den1);(对应k=0,当然也可以针对k=1加对应的语句)

使之在axes中绘图的同时也绘制一张Figure图,在这张图中,可以点击右键,选择“characteristics”选择相应的性能指标,PeakResponse,SettingTime,RiseTime,SteadyState,在选择PeakResponse时,将鼠标定位在相应的曲线点上还能显示Overshoot和Attime两项指标,我们可以从这张图中得到的信息和命令窗口中输出的指标信息进行对比,发现计算还是比较准确的,初始设置数据生成的传递函数(k=0,n=1)的计算结果和Figure图对比信息如下;

Transferfunction:

2s^2+8s+6

----------------------Figure图

s^3+8s^2+10s+6

yss=

0.99801

mp=

1.09481.09

Tp=

2.81662.82

Del=

9.70549.48

Tr=

1.20711.2

Ts=

5.23095.16

2.6.8close功能

close按钮主要是在点击close按钮时关闭GUI的运行,它的回调函数如下:

functionpushbutton_Callback(hObject,eventdata,handles)

close;

4GUI测试

4.1初始化界面

设计好GUI和编辑好程序后,保存后,接下来就是运行GUI,测试设计的正确性,查看程序是否能完成设定的功能。

从“Tools”菜单中选择“Run”选项,或者单击GUIDE工具条中的“

”按钮,运行GUI。

由于GUI界面的axes坐标系不是复数坐标系,因而在绘制Nyquist,根轨迹等图时加入一条hs=figure语句,使得图形绘制在Figure中,如果使用h=axes语句指定axes,则会出现绘制的图形充满整个GUI界面的结果,并不令人满意,因而这里采用绘制在Figure中的方法。

GUI运行的初始界面如下

图4.1GUI初始化运行界面

4.2对num,den模型的测试

4.2.1初始数据测试

使用初始数据,从下拉式列表框中,选择目标选项后,绘制的图形和计算的数据如下(n=1,k=0)num=[286],den=[18106],从阶跃响应图和Nyquist图中可看出系统是稳定的(假设传递函数为开环的,则系统在右半平面无极点,Nyquist曲线不包括点(-1,0))

图4.2Bode图图4.3Nyquist图

图4.4根轨迹图图4.5零极点图

图4.6nichols图图4.7幅频响应图

图4.8脉冲响应图

图4.9阶跃响应图

Transferfunction:

2s^2+8s+6

----------------------

s^3+8s^2+10s+6

yss=

0.9980

mp=

1.0948

Tp=

2.8166

Del=

9.7054

Tr=

1.2071

Ts=

5.2309

4.2.2改变num,den矩阵的测试

改变num=[1356],den=[2849]输入则会得到不同的结果,限于篇幅,这里仅给出一些图代表。

图4.10阶跃响应图

图4.11零极点图

图4.12根轨迹图图4.13Nyquist图

Transferfunction:

s^3+3s^2+5s+6

-----------------------

2s^3+8s^2+4s+9

yss=

0.6674

mp=

1.0285

Tp=

2.2672

Del=

54.1151

Tr=

1.5458

Ts=

31.6380

 

图4.14Bode图

4.3对A,B,C,D模型的测试

4.3.1初始数据的测试

对于A,B,C,D模型的测试,使用初始数据时为单输入单输出系统,A=[011;011;-6-16-8],B=[0;0;1],C=[682],D=[0](n=1,k=1)这里也给出一些图形和数据,从下面的的图形中也可以看出系统是稳定的,阶跃响应最终趋于稳定值。

图4.15脉冲响应图

图4.16阶跃响应图

图4.17Nyquist图图4.18根轨迹图

Transferfunction:

2s^2+12s-3.331e-014

-------------------------------

s^3+7s^2+14s-4.333e-015

yss=

0.8572

mp=

0.8575

Tp=

2.0000

Del=

0.0383

Tr=

0.6857

Ts=

1.0857

图4.19Bode图

4.3.2改变A,B,C,D矩阵的测试

A,B,C,D矩阵形式生成传递函数的优点是容易进行多输入多输出系统的生成,下面具体具体给出双输入单输出的第二个变量的测试结果。

数据设置如下A=[1.13-0.490.11;100;010],B=[-0.380.45;0.520.23;0.260.78],

C=[10.120.24],D=[0.30.9],输入序号n=2,标志位k=1,这里也顺带测试了n和k。

在我们输入矩阵时必须注意的是B的行数必须等于A的行数,C的列数必须等于A的列数,D的行数必须等于C的行数,D的列数必须等于B的列数。

测试结果如下

图4.20脉冲响应图

图4.21阶跃响应图

图4.22Bode图图4.23Nyquist图

图4.24根轨迹图4.25零极点图

图4.26幅频响应图图4.27nichols图

Transferfunction:

0.9s^3-0.3522s^2+0.2806s+0.07395

-----------------------------------------

s^3-1.13s^2+0.49s-0.11

yss=

20.0223

mp=

20.0223

Tp=

3.9534

Del=

0

Tr=

2.8552

Ts=

3.8802

从上面的阶跃响应图,Nyquist图和计算数据来看系统式不稳定的,系统在右半平面有三个极点(假设为开环传递函数),但Nyquist曲线并没有以逆时针方向包围点(-1,0)三次。

计算得出的数据是以软件停止计算时已得出的数据为基准计算的,因而有些指标不一定准确,如超调量Del,他是以阶跃响应的最大值减去终值得到结果乘以100(这里是指绘图停止时的值)再除以终值得来的,因而这里的结果是0.但对于稳定的系统,在计算终止时已经稳定了的话,计数结果就就是准确的。

对于多输入多输出系统,由于绘制根轨迹的rlocus命令只能用于单输出的系统,pzmap命令对多输入多输出系统是绘制系统的特征向量和传递零点,因而这两个命令在本设计中对于多输入多输出系统不能使用。

另外性能指标也是针对单输出的,也不能用,幅频响应也不能用,否则会出错。

下面给出一个双输入双输出例子

A=[2.25-5-1.25-0.5;2.25-0.45-1.25-0.25;0.25-0.5-1.25-1;1.25-1.75-0.25-0.75],B=[46;24;22;02],C=[0001;0202],D=[00;00],对它的第一个输入进行测试,结果如下

图4.28阶跃响应图

图4.29脉冲响应图

图4.30Bode图图4.31Nyquist图

图4.32nichols图

4.4对close按钮的测试

对close按钮的测试很简单,在所有的测试过程中都可以进行,在运行GUI时,点击close按钮就可以关闭GUI的运行,但Figure文件并不是在输出编辑器中创建的,因而需要另外单独关闭。

5设计总结

本次综合课程设计要求设计一个控制系统的分析和设计MATLABGUI界面,界面包括控制系统的常用功能。

MATLABGUI拥有强大的图形用户界面设计功能,GUIDE提供了一系列创建图形用户界面的工具,fig文件的设计因而比较简单,大体可分为启动GUI,设定GUI窗口大小,添加组件对齐组件

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2