Simlink.docx

上传人:b****4 文档编号:24279268 上传时间:2023-05-26 格式:DOCX 页数:41 大小:501.48KB
下载 相关 举报
Simlink.docx_第1页
第1页 / 共41页
Simlink.docx_第2页
第2页 / 共41页
Simlink.docx_第3页
第3页 / 共41页
Simlink.docx_第4页
第4页 / 共41页
Simlink.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

Simlink.docx

《Simlink.docx》由会员分享,可在线阅读,更多相关《Simlink.docx(41页珍藏版)》请在冰豆网上搜索。

Simlink.docx

Simlink

第12章 SIMULINK动态仿真集成环境

12.1 Simulink操作基础

12.2 系统仿真模型

12.3 系统的仿真

12.4 使用命令操作对系统进行仿真

12.5 子系统及其封装技术

12.6 S函数的设计与应用

 

12.1 Simulink操作基础

12.1.1 Simulink简介

Simulink是MATLAB的重要组成部分,提供建立系统模型、选择仿真参数和数值算法、启动仿真程序对该系统进行仿真、设置不同的输出方式来观察仿真结果等功能。

 

12.1.2 Simulink的启动与退出

1.Simulink的启动

在MATLAB的命令窗口输入simulink或单击MATLAB主窗口工具栏上的Simulink命令按钮即可启动Simulink。

Simulink启动后会显示Simulink模块库浏览器(SimulinkLibraryBrowser)窗口。

在MATLAB主窗口File菜单中选择New菜单项下的Model命令,在出现Simulink模块库浏览器的同时,还会出现一个名字为untitled的模型编辑窗口。

在启动Simulink模块库浏览器后再单击其工具栏中的Createanewmodel命令按钮,也会弹出模型编辑窗口。

利用模型编辑窗口,可以通过鼠标的拖放操作创建一个模型。

模型创建完成后,从模型编辑窗口的File菜单项中选择Save或SaveAs命令,可以将模型以模型文件的格式(扩展名为.mdl)存入磁盘。

如果要对一个已经存在的模型文件进行编辑修改,需要打开该模型文件,其方法是,在MATLAB命令窗口直接输入模型文件名(不要加扩展名.mdl)。

在模块库浏览器窗口或模型编辑窗口的File菜单中选择Open命令,然后选择或输入欲编辑模型的名字,也能打开已经存在的模型文件。

另外,单击模块库浏览器窗口工具栏上的Openamodel命令按钮或模型编辑窗口工具栏上的Openmodel命令按钮,也能打开已经存在的模型文件。

2.Simulink的退出

为了退出Simulink,只要关闭所有模型编辑窗口和Simulink模块库浏览器窗口即可。

 

12.2 系统仿真模型

12.2.1 Simulink的基本模块

Simulink的模块库提供了大量模块。

单击模块库浏览器中Simulink前面的“+”号,将看到Simulink模块库中包含的子模块库,单击所需要的子模块库,在右边的窗口中将看到相应的基本模块,选择所需基本模块,可用鼠标将其拖到模型编辑窗口。

同样,在模块库浏览器左侧的Simulink栏上单击鼠标右键,在弹出的快捷菜单中单击Openthe‘Simulink’Libray命令,将打开Simulink基本模块库窗口。

单击其中的子模块库图标,打开子模块库,找到仿真所需要的基本模块。

 

12.2.2 模块的编辑

1.添加模块

2.选取模块

3.复制与删除模块

4.模块外形的调整 

5.模块名的处理

 

12.2.3 模块的连接

1.连接两个模块

2.模块间连线的调整

3.连线的分支

4.标注连线

5.删除连线

 

12.2.4 模块的参数和属性设置

1.模块的参数设置

Simulink中几乎所有模块的参数都允许用户进行设置,只要双击要设置的模块或在模块上按鼠标右键并在弹出的快捷菜单中选择相应模块的参数设置命令就会弹出模块参数对话框。

该对话框分为两部分,上面一部分是模块功能说明,下面一部分用来进行模块参数设置。

同样,先选择要设置的模块,再在模型编辑窗口Edit菜单下选择相应模块的参数设置命令也可以打开模块参数对话框。

 

2.模块的属性设置

选定要设置属性的模块,然后在模块上按鼠标右键并在弹出的快捷菜单中选择Blockproperties,或先选择要设置的模块,再在模型编辑窗口的Edit菜单下选择Blockproperties命令,将打开模块属性对话框。

该对话框包括General、Blockannotation和Callbacks3个可以相互切换的选项卡。

其中选项卡中可以设置3个基本属性:

Description(说明)、Priority(优先级)、Tag(标记)。

例12-1 有系统的微分方程,试建立系统仿真模型。

操作过程如下:

(1)在MATLAB主菜单中,选择File菜单中New菜单项的Model命令,打开一个模型编辑窗口。

(2)将所需模块添加到模型中。

(3)设置模块参数并连接各个模块组成仿真模型。

设置模块参数后,用连线将各个模块连接起来组成系统仿真模型。

模型建好后,从模型编辑窗口的File菜单中选择Save或Saveas命令将它存盘。

12.3 系统的仿真

12.3.1设置仿真参数

打开系统仿真模型,从模型编辑窗口的Simulation菜单中选择Simulationparameters命令,打开一个仿真参数对话框,在其中可以设置仿真参数。

仿真参数对话框包含5个可以相互切换的选项卡:

(1)Solver选项卡:

用于设置仿真起始和停止时间,选择微分方程求解算法并为其规定参数,以及选择某些输出选项。

(2)WorkspaceI/O选项卡:

用于管理对MATLAB工作空间的输入和输出。

(3)Diagnostics选项卡:

用于设置在仿真过程中出现各类错误时发出警告的等级。

(4)Advanced选项卡:

用于设置一些高级仿真属性,更好地控制仿真过程。

(5)Real-timeWorkshop选项卡:

用于设置若干实时工具中的参数。

如果没有安装实时工具箱,则将不出现该选项卡。

 

12.3.2 启动系统仿真与仿真结果分析

设置完仿真参数之后,从Simulation中选择Start菜单项或单击模型编辑窗口中的StartSimulation命令按钮,便可启动对当前模型的仿真。

此时,Start菜单项变成不可选,而Stop菜单项变成可选,以供中途停止仿真使用。

从Simulation菜单中选择Stop项停止仿真后,Start项又变成可选。

为了观察仿真结果的变化轨迹可以采用3种方法:

(1)把输出结果送给Scope模块或者XYGraph模块。

(2)把仿真结果送到输出端口并作为返回变量,然后使用MATLAB命令画出该变量的变化曲线。

(3)把输出结果送到ToWorkspace模块,从而将结果直接存入工作空间,然后用MATLAB命令画出该变量的变化曲线。

例12-2 利用Simulink仿真曲线。

仿真过程如下:

(1)启动Simulink并打开模型编辑窗口。

(2)将所需模块添加到模型中。

(3)设置模块参数并连接各个模块组成仿真模型。

 设置模块参数后,用连线将各个模块连接起来组成仿真模型。

(4)设置系统仿真参数。

(5)开始系统仿真。

(6)观察仿真结果。

例12-3 利用Simulink仿真求定积分。

仿真过程如下:

(1)打开一个模型编辑窗口。

(2)将所需模块添加到模型中。

(3)设置模块参数并连接各个模块组成仿真模型。

(4)设置系统仿真参数。

(5)开始系统仿真。

(6)观察仿真结果。

 

12.3.3 系统仿真实例

至此,可以总结出利用Simulink进行系统仿真的步骤如下:

(1)建立系统仿真模型,这包括添加模块、设置模块参数以及进行模块连接等操作。

(2)设置仿真参数。

(3)启动仿真并分析仿真结果。

例12-4 有初始状态为0的二阶微分方程x"+0.2x'+0.4x=0.2u(t),其中u(t)是单位阶跃函数,试建立系统模型并仿真。

方法1:

用积分器直接构造求解微分方程的模型。

方法2:

利用传递函数模块建模。

方法3:

利用状态方程模块建模。

12.4 使用命令操作对系统进行仿真

从命令窗口运行仿真的函数有4个,即sim、simset、simget和set_param。

1.sim函数

sim函数的作用是运行一个由Simulink建立的模型,其调用格式为:

[t,x,y]=sim(modname,timespan,options,data);

2.simset函数

simset函数用来为sim函数建立或编辑仿真参数或规定算法,并把设置结果保存在一个结构变量中。

它有如下4种用法:

(1)options=simset(property,value,…):

把property代表的参数赋值为value,结果保存在结构options中。

(2)options=simset(old_opstruct,property,value,…):

把已有的结构old_opstruct(由simset产生)中的参数property重新赋值为value,结果保存在新结构options中。

(3)options=simset(old_opstruct,new_opstruct):

用结构new_opstruct的值替代已经存在的结构old_opstruct的值。

(4)simset:

显示所有的参数名和它们可能的值。

3.simget函数

simget函数用来获得模型的参数设置值。

如果参数值是用一个变量名定义的,simget返回的也是该变量的值而不是变量名。

如果该变量在工作空间中不存在(即变量未被赋值),则Simulink给出一个出错信息。

该函数有如下3种用法:

(1)struct=simget(modname):

返回指定模型model的参数设置的options结构。

(2)value=simget(modname,property):

返回指定模型model的参数property的值。

(3)value=simget(options,property):

获取options结构中的参数property的值。

如果在该结构中未指定该参数,则返回一个空阵。

用户只需输入能够唯一识别它的那个参数名称的前几个字符即可,对参数名称中字母的大小写不作区别。

4.set_param函数

set_param函数的功能很多,这里只介绍如何用set_param函数设置Simulink仿真参数以及如何开始、暂停、终止仿真进程或者更新显示一个仿真模型。

(1)设置仿真参数

调用格式为:

set_param(modname,property,value,…)

其中modname为设置的模型名,property为要设置的参数,value是设置值。

这里设置的参数可以有很多种,而且和用simset设置的内容不尽相同,相关参数的设置可以参考有关资料。

(2)控制仿真进程

调用格式为:

set_param(modname,'SimulationCommand','cmd')

其中mode为仿真模型名称,而cmd是控制仿真进程的各个命令,包括start、stop、pause、comtinue或update。

在使用这两个函数的时候,需要注意必须先把模型打开。

 

12.5 子系统及其封装技术

12.5.1子系统的建立

建立子系统有两种方法:

通过Subsystem模块建立子系统和通过已有的模块建立子系统。

两者的区别是:

前者先建立子系统,再为其添加功能模块;后者先选择模块,再建立子系统。

1.通过Subsystem模块建立子系统

操作步骤为:

(1)先打开Simulink模块库浏览器,新建一个仿真模型。

(2)打开Simulink模块库中的Ports&Subsystems模块库,将Subsystem模块添加到模型编辑窗口中。

(3)双击Subsystem模块打开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要添加输入模块和输出模块,表示子系统的输入端口和输出端口。

这样,一个子系统就建好了。

2.通过已有的模块建立子系统

操作步骤为:

(1)先选择要建立子系统的模块,不包括输入端口和输出端口。

(2)选择模型编辑窗口Edit菜单中的CreateSubsystem命令,这样,子系统就建好了。

在这种情况下,系统会自动把输入模块和输出模块添加到子系统中,并把原来的模块变为子系统的图标。

例12-5 PID控制器是在自动控制中经常使用的模块,试建立PID控制器的模型并建立子系统。

步骤如下:

(1)先建立PID控制器的模型。

(2)建立子系统。

 

12.5.2 子系统的条件执行

1.使能子系统

建立使能子系统的方法是:

打开Simulink模块库中的Ports&Subsystems模块库,将Enable模块复制到子系统模型中,则系统的图标发生了变化。

例12-6 利用使能子系统构成一个正弦半波整流器。

操作步骤如下:

(1)打开Simulink模块库浏览器并新建一个仿真模型。

(2)将SineWave、EnabledSubsystem、Scope3个模块拖至新打开的模型编辑窗口,连接各模块并存盘。

其中使能信号端接SineWave模块。

为了便于比较,除显示半波整流波形外,还显示正弦波,故在示波器属性窗口将Numberofaxes设置为2。

使能子系统建立好后,可对Enable模块进行参数设置。

(3)选择Simulink菜单中的Start命令,就可看到半波整流波形和正弦波形。

2.触发子系统

触发子系统是指当触发事件发生时开始执行子系统。

与使能子系统相类似,触发子系统的建立要把Ports&Subsystems模块库中的Trigger模块添加到子系统中或直接选择TriggeredSubsystem模块来建立触发子系统。

例12-7 利用触发子系统将一锯齿波转换成方波。

操作步骤如下:

(1)用SignalGenerator、TriggeredSubsystem和Scope模块构成子系统。

(2)选择Simulink菜单中的Start命令,就可看到波形。

3.使能加触发子系统

所谓使能加触发子系统就是把Enable和Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合。

该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用。

 

12.5.3 子系统的封装

所谓子系统的封装(Masking),就是为子系统定制对话框和图标,使子系统本身有一个独立的操作界面,把子系统中的各模块的参数对话框合成一个参数设置对话框,在使用时不必打开每个模块进行参数设置,这样使子系统的使用更加方便。

子系统的封装过程很简单,先选中所要封装的子系统,再选择模型编辑窗口Edit菜单中的Masksubsystem命令,这时将出现封装编辑器(MaskEditor)对话框。

MaskEditor对话框中共包括4个选项卡:

Icon、Parameters、Initialization和Documentation。

子系统的封装主要就是对这4页参数进行设置。

12.6 S函数的设计与应用

S函数称为系统函数(SystemFunction),它有固定的程序格式。

用MATLAB语言可以编写S函数,此外还可以采用C、C++、FORTRAN和Ada等语言编写。

12.6.1 用MATLAB语言编写S函数

编写S函数有一套固定的规则,为此,Simulink提供了一个用M文件编写S函数的模板。

该模板程序存放在toolbox\simulink\blocks目录下,文件名为sfuntmpl.m。

用户可以从这个模板出发构建自己的S函数。

1.主程序

S函数主程序的引导语句为:

function[sys,x0,str,ts]=fname(t,x,u,flag)

2.子程序

S函数M文件共有6个子程序,供Simulink在仿真的不同阶段调用。

 

12.6.2 S函数的应用

例12-8 采用S函数实现模块y=nx,即模块的功能是把一个输入信号n倍以后再输出。

(1)利用MATLAB语言M文件。

(2)模块的封装与测试。

9.6SIMULINK的分析工具

9.6.1确定模型的特征

【例9.6.1-1】观察例9.5.3-1中所建模型exm953_1.mdl中状态向量的结构。

在指令窗或Notebook中运行以下指令。

[sizes,x0,StateCell]=exm953_1;

SIZES=sizes',X0=x0',StateCell

SIZES=

2200003

X0=

0000

StateCell=

'exm953_1/AutomobileModel/Int1'

'exm953_1/AutomobileModel/Int2'

'exm953_1/PIDController/DD'

'exm953_1/PIDController/DT-I'

9.6.2用MATLAB指令运行SIMULINK模型

9.6.2.1运行SIMULINK模型的sim指令

9.6.2.2设置编辑仿真

数的simset指令

9.6.2.3获取模型仿真参数的simget指令

9.6.2.4MATLAB指令运行SIMULINK模型的示例

【*例9.6.2.4-1】以例9.5.3-1中所建模型exm953_1.mdl为基础进行本题解算。

演示:

(A)显示模型窗中的初始状态设置。

(B)把初始车速重置为120,而其他初始值仍为0。

(C)画出两种初始状态下的车速曲线。

InInit=simget('exm953_1','InitialState')%获取模型窗对初始值的设置

[t,x,y]=sim('exm953_1',100);%在模型内设置参数下进行仿真

opts=simset('InitialState',[120,0,0,0]);%初始值的重置

[tt,xx,yy]=sim('exm953_1',100,opts);%在重置初值下仿真

plot(t,x(:

1),':

b',tt,xx(:

1),'r')

legend('\fontname{隶书}\fontsize{16}内初值','外初值',4)

InInit=

[]

图9.6.2.4-1两种初值下的仿真曲线

9.6.3模型的线性化问题

9.6.3.4模型线性化的算例

【*例9.6.3.4-1】求非线性系统

在坐标原点处的线性化模型。

(1)根据式(9.6.3.1-2)的

可“手工”求得

(2)创建图9.6.3.4-1所示的SIMULINK模型exm9634_1.mdl。

图9.6.3.4-1SIMULINK模型exm9634_1.mdl

(3)用指令求坐标原点处的线性化模型(结果与手工计算一致)

[A,B,C,D]=linmod('exm9634_1');A

A=

0.00000.0000

2.0000-1.0000

(4)用指令求[1,0.5]坐标处的线性化模型(注意模型与前一个不同)

[A1,B1,C1,D1]=linmod('exm9634_1',[1,0.5]);A1

A1=

2.00001.0000

2.0000-1.0000

(5)由特征根看模型稳定性

eA=eig(A)',eA1=eig(A1)'

eA=

0.0000-1.0000

eA1=

2.5616-1.5616

9.6.5综合算例

9.6.5.1“一步仿真”和精良状态轨迹斜率图

【*例9.6.5.1-1】求非线性系统

的相平面轨迹、平衡点,并进行稳定性分析。

本例综合演示:

(A)SIMULINK模型和MATLAB指令的配合使用。

(B)sim,simset,trim指令的应用。

(C)“一步仿真”计算方法。

(D)二阶系统相轨迹的精良图形。

(1)非线性系统由SIMULINK模型exm9634_1.mdl表达(见例9.6.3.4-1)

(2)编写绘制传统状态轨迹(Statetrajectory)的M文件exm9651_1.m

[exm9651_1.m]

%exm9651_1.m画普通状态轨迹

clf;holdon

xx=[-2,1;-1,1;0,1;1,1;1,0;1,-1;1,-2];%轨线起点

nxx=size(xx,1);%起点数

fork=1:

nxx

opts=simset('initialstate',[xx(k,1),xx(k,2)]);%设置仿真初值

[t,x,y]=sim('exm9634_1',10,opts);

plot(x(:

1),x(:

2));%画状态轨线

end

xlabel('x1');ylabel('x2'),grid,holdoff

(3)运行exm9651_1.m得如图9.6.5.1-1-1所示的传统状态轨迹图

图9.6.5.1-1-1系统exm9634_1.mdl的状态轨迹图

(4)编写采用“一步仿真”计算状态轨线斜率的函数M文件portraitzzy.m

[portraitzzy.m]

function[DX1,DX2,DP]=portraitzzy(x1,x2,h)

%PORTRAITZZY采用“一步仿真”计算状态变量斜率和状态导数的二次方根

%x1,x2分别给定“状态平面”上的格点坐标

%h给定积分计算采用的时间步

%DX1,DX2轨线斜率在状态坐标轴上的投影长度

%DP状态导数向量的长度

opts=simset('solver','ode5','fixedstep',h);%采用ode5定步长积分算法<7>

n=length(x1);

X1=zeros(n,n);X2=X1;%预置空间

forii=1:

n;

forjj=1:

n;

opts=simset(opts,'initialstate',[x1(ii),x2(jj)]);%设置状态初值<12>

[t,x,y]=sim('exm9634_1',h,opts);%步长为h的“一步仿真”<13>

dx1=x(2,1)-x1(ii);%计算x1的变化率

dx2=x(2,2)-x2(jj);%计算x2的变化率

L=sqrt(dx1^2+dx2^2);%计算状态轨线长度的变化率。

Z(jj,ii)=L;

ifL>1.e-10%若状态轨线变化率大于“零”阈值

DX1(jj,ii)=dx1/L;DX2(jj,ii)=dx2/L;%计算各状态变量的近似斜率<19>

%注意下标次序。

绘图指令格式要求

end

end

end

DP=Z/h;%状态导数向量的长度

(5)绘制精良的状态轨迹斜率图(Quiverplot)

h

=0.01;%设置仿真步长

x1=-2.5:

0.25:

2.5;x2=x1;%轨线起始点

k=0.15;

[X1,X2,Z]=portraitzzy(x1,x2,h);

quiver(x1,x2,k*X1,k*X2,0)%调用quiver指令绘制平面上各点处的变化率图

xlabel('x1'),ylabel('x2

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

当前位置:首页 > 人文社科 > 教育学心理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1