利用MATLABGUI设计控制系统分析与设计界面.docx
《利用MATLABGUI设计控制系统分析与设计界面.docx》由会员分享,可在线阅读,更多相关《利用MATLABGUI设计控制系统分析与设计界面.docx(37页珍藏版)》请在冰豆网上搜索。
![利用MATLABGUI设计控制系统分析与设计界面.docx](https://file1.bdocx.com/fileroot1/2022-11/17/6d8cb058-9ba8-4fed-ba29-951fd54b7465/6d8cb058-9ba8-4fed-ba29-951fd54b74651.gif)
利用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命