Matlab 参考教程第九章 SIMULINK交互式仿真集成环境.docx
《Matlab 参考教程第九章 SIMULINK交互式仿真集成环境.docx》由会员分享,可在线阅读,更多相关《Matlab 参考教程第九章 SIMULINK交互式仿真集成环境.docx(38页珍藏版)》请在冰豆网上搜索。
Matlab参考教程第九章SIMULINK交互式仿真集成环境
9SIMULINK交互式仿真集成环境
9.1引导
SIMULINK是一个进行动态系统建模、仿真和综合分析的集成软件包。
它可以处理的系统包括:
线性、非线性系统;离散、连续及混合系统;单任务、多任务离散事件系统。
在SIMULINK提供的图形用户界面GUI上,只要进行鼠标的简单拖拉操作就可构造出复杂的仿真模型。
它外表以方块图形式呈现,且采用分层结构。
从建模角度讲,这既适于自上而下(Top-down)的设计流程(概念、功能、系统、子系统、直至器件),又适于自下而上(Bottum-up)逆程设计。
从分析研究角度讲,这种SIMULINK模型不仅能让用户知道具体环节的动态细节,而且能让用户清晰地了解各器件、各子系统、各系统间的信息交换,掌握各部分之间的交互影响。
在SIMULINK环境中,用户将摆脱理论演绎时需做理想化假设的无奈,观察到现实世界中摩擦、风阻、齿隙、饱和、死区等非线性因素和各种随机因素对系统行为的影响。
在SIMULINK环境中,用户可以在仿真进程中改变感兴趣的参数,实时地观察系统行为的变化。
由于SIMULINK环境使用户摆脱了深奥数学推演的压力和烦琐编程的困扰,因此用户在此环境中会产生浓厚的探索兴趣,引发活跃的思维,感悟出新的真谛。
在MATLAB5.3版中,可直接在SIMULINK环境中运作的工具包很多,已覆盖通信、控制、信号处理、DSP、电力系统等诸多领域,所涉内容专业性极强。
本书无意论述涉及工具包的专业内容,而只是集中阐述:
SIMULINK3.0的基本使用技法和相关的数值考虑。
节9.1虽是专为SIMULINK初学者写的,但即便是熟悉SIMULINK以前版本的读者也值得快速浏览这部分内容,因为新版的界面、菜单、工具条、模块库都有较大的变化。
第9.2节比较详细地阐述建模的基本操作:
通用模块的具体化设置、信号线勾画、标识、模型窗参数设置。
这部分内容是进一步深入的前提。
从第9.3节起,由浅入深地讲述SIMULINK对各种数学、工程问题的建模、仿真和分析的基本方法。
本章采用“算例”作为主体,配以适量的归纳性表述。
本章包含了31个“尽量简单”又“独立完整”的“典型”算例,而这正是SIMULINK在线PDF文件之所缺。
读者通过“手、眼、脑”并用地练习算例,掌握SIMULINK的一般使用规则和操作技法。
鉴于SIMULINK的本质,本节算例必定涉及数学、物理、和若干工程考虑。
本书已采取“无量纲记述”、“注释”等措施使算例尽可能易读易懂,读者只要稍微耐心,就可以从这些有背景的内容体验到SIMULINK仿真之细腻和切实,从这些带背景性的算例品出SIMULINK的精妙之处。
9.1.1SIMULINK的安装
9.1.2SIMULINK入门
9.1.3SIMULINK库浏览器界面
9.2模型的创建
9.2.1模型概念和文件操作
9.2.1.1SIMULINK模型是什么
9.2.1.2模型文件的操作
9.2.2模块操作
9.2.2.1模块的基本操作
9.2.2.2向量化模块和标量扩展
【*例9.2.2.2-1】演示“示波”模块的向量显示能力。
图9.2.2.2-1-1示波器显示向量波形
【*例9.2.2.2-2】演示“求和”模块的向量处理能力:
输入扩展。
图9.2.2.2-2-1输入的标量扩展
【*例9.2.2.2-3】演示“增益”模块的向量处理能力:
参数扩展。
图9.2.2.2-3-1模块参数的标量扩展
9.2.2.3参数设置
9.2.3信号线操作
9.2.3.1产生连线
9.2.3.2信号线的分支和折曲
9.2.3.3信号线宽度显示
9.2.3.4彩色显示信号线
9.2.3.5插入模块
9.2.3.6信号线标识(label)
【例9.2.3.6-1】演示:
信号线标识的传播
9.2.4对模型的注释
9.2.5常用的Sourse库信源
【*例9.2.5-1】如何调用MATLAB工作空间中的信号矩阵作为模型输入。
本例所需的输入为
。
(1)编写一个产生信号矩阵的M函数文件
functionTU=source925_1(T0,N0,K)
t=linspace(0,K*T0,K*N0+1);
N=length(t);
u1=t(1:
(N0+1)).^2;
u2=(t((N0+2):
(2*N0+1))-2*T0).^2;
u3(1:
(N-(2*N0+2)+1))=0;
u=[u1,u2,u3];
TU=[t',u'];
(2)构造简单的接受信号用的实验模型(如图9.2.5-1的左图)
图9.2.5-1接受信号用的实验模型
(3)模块的参数设置
(4)在指令窗中,运行以下指令,在MATLAB工作空间中产生TU信号矩阵。
TU=source925_1(1,100,4);
(5)选中exm925_1模型窗菜单【Simulation:
Start】,示波器呈现图9.2.5-1右图信号。
9.2.6常用的Sink库信宿
9.2.6.1库信宿一览表
9.2.6.2示波器
9.2.7仿真的配置
9.2.7.1解算器参数的设置(Solver)
9.2.7.2仿真数据的输入输出设置(WorkspaceI/O)
9.2.7.3仿真中异常情况的诊断(Diagnostics)
9.3连续系统建模
9.3.1线性系统
9.3.1.1积分模块的功用
【*例9.3.1.1-1】复位积分器的功用示例。
图9.3.1.1-1
9.3.1.2积分模块直接构造微分方程求解模型
【*例9.3.1.2-1】假设从实际自然界(力学、电学、生态等)或社会中,抽象出有初始状态为0的二阶微分方程
,
是单位阶跃函数。
本例演示如何用积分器直接构搭求解该微分方程的模型。
(1)改写微分方程
(2)利用SIMULINK库中的标准模块构作模型
图9.3.1.2-1-1求解微分方程的SIMULINK模型exm9312_1.mdl
(3)仿真操作
(4)保存在MATLAB工作空间中的数据
clf
tt=ScopeData.time;%为书写简单,把构架域的时间数据另赋给tt
xx=ScopeData.signals.values;%目的同上。
[xm,km]=max(xx);
plot(tt,xx,'r','LineWidth',4),holdon
plot(tt(km),xm,'b.','MarkerSize',36),holdoff
strmax=char('最大值',['t=',num2str(tt(km))],['x=',num2str(xm)]);
text(6.5,xm,strmax),xlabel('t'),ylabel('x')
图9.3.1.2-1-2利用存放在MATLAB工作空间中的仿真数据所绘制的曲线
9.3.1.3传递函数模块
【例9.3.1.3-1】直接利用传递函数模块求解方程(9.3.1.3-1)。
(1)根据式(9.3.1.3-3)构造如图9.3.1.3-1所示的模型exm9313_1.mdl
图9.3.1.3-1由传递函数模块构成的仿真模型exm9313_1.mdl
(2)仿真操作
9.3.1.4状态方程模块和单位脉冲输入的生成
【*例9.3.1.4-1】假设式(9.3.1.4-1)中的输入函数
是单位脉冲函数
,研究该系统的位移变化。
本例演示:
(A)状态方程模块的使用;(B)脉冲函数的生成方法。
(1)单位脉冲函数的数学含义及近似实现
(2)利用库模块构造如图9.3.1.4-1-1所示的仿真模型exm9314_1.mdl
图9.3.1.4-1-1带近似单位脉冲的状态方程模块构成的仿真模型exm9314_1.mdl
(3)仿真结果
图9.3.1.4-1-2仿真结果
9.3.2非线性系统
9.3.2.1建立非线性仿真模型的基本考虑
【*例9.3.2.1-1】物理背景:
如图9.3.2.1-1-1所示喷射动力车的定位控制问题。
图9.3.2.1-1-1装置左右喷射发动机的车辆示意图
(1)根据车辆的动态方程,构作基本仿真模型
图9.3.2.1-1-2基本仿真模型
(2)为观察仿真时间进程,引入仿真时钟显示。
(3)为模仿“车辆速度与位移小于某阈值时被认为控制目标达到”,引入仿真终止环节。
图9.3.2.1-1-3完整仿真模型exm9321_1.mdl
(4)为模仿“符号切换的非瞬时性”,本例采用“定步长”Solver解算器
(5)为便于分析接近原点时的颤振现象,通过模型窗I/O设置保存仿真数据
(6)仿真操作和仿真结果观察
(7)保存数据的利用和分析
subplot(1,2,1),plot(xout(:
2),xout(:
1))
gridon,axis([-0.2,1,-1,0.2]),axissquare
xlabel('\fontsize{14}位移'),ylabel('\fontsize{14}速度'),
subplot(1,2,2),plot(xout(:
2),xout(:
1))
gridon,axis([-0.1,0.05,-0.05,0.1]),axissquare
图9.3.2.1-1-4完整相轨迹及局部放大图
9.3.2.2任意非线性函数模块及其应用
【例9.3.2.2-1】轿车沿直线山坡路向前行驶。
要求设计一个简单的比例放大器,使轿车能以指定的速度运动。
本例演示:
(A)仿真系统的创建。
(B)非线性模块的使用。
(C)任意函数模块的应用。
(D)体现“自下而上”的建模方式。
(E)本例将作为下面章节多个算例的基础,读者切莫跳略此题。
(1)轿车的运动方程
(2)轿车动力学的仿真模型
图9.3.2.2-1-2行驶轿车动力学仿真模型
(2)比例控制及其仿真模型
图9.3.2.2-1-3比例控制器仿真模型
(3)构成完整的仿真模型
图9.3.2.2-1-4受控轿车的完整仿真模型
(4)仿真操作和说明
9.4子系统的创建、装帧及受控执行
9.4.1简装子系统及其应用
9.4.1.1创建简装子系统的“先有内容后套包装”法
【例9.4.1.1-1】题目的背景和参数与例9.3.2.2-1完全相同,要求创建利用比例控制器使轿车的运动速度稳定在期望车速的分层仿真模型。
本例演示:
如何从非分层模型获得分层模型;创建简装子系统的“先有内容后套包装”法。
(1)将待“包装”模型另存为一个新模型
(2)生成第一个简装子系统
(3)生成第二个简装子系统
(4)更改子系统的标识名
(5)重命名输入输出口的名称
图9.4.1.1-1采用简装子系统的完整仿真模型
9.4.1.2创建简装子系统的“先有包装后置内容”法
【例9.4.1.2-1】本例演示:
如何自上而下构造分层模型;产生简装子系统的“先有包装后置内容”法。
(1)在新建模型窗中复制包括子系统模块在内的所有标准模块(见图9.4.1.2-1)
图9.4.1.2-1带标准子系统模块的新建模型窗
(2)在Subsystem标准模块中“装入”轿车动态模型
(3)在Subsystem1标准模块中“装入”比例控制器模型
(4)对Untitled模型窗中滑键模块进行适当设置,进行各模块间的连接,就形成与图9.4.1.1-1相同的完整仿真模型。
(5)对完整仿真模型窗进行仿真参数设置,为进行仿真作最后准备
9.4.2精装子系统
9.4.2.1精装子系统的制作过程
9.4.2.2装帧示例
【*例9.4.2.2-1】目标:
把图9.4.1.1-1所示轿车速度控制模型中的轿车动态模型简装子系统变成精装子系统。
(2)打开装帧编辑器
图9.4.2.2-1-1显示初始化页面的装帧编辑器
(3)填写初始化页面中“块类别”
(4)使用初始化页面中的“对话窗参数设置区”为未来对话框设计提示及设置变量
(5)填写初始化页中“初始指令区”
(6)利用Icon页为精装子系统模块制作图标
图9.4.2.2-1-2装帧编辑器的图标制作页
(7)利用文档页为精装子系统模块编写模块性质描述和在线帮助说明
图9.4.2.2-1-3装帧编辑器的文档制作页
(8)点击装帧编辑器左下角的【OK】键,整个装帧便告成功。
图9.4.2.2-1-4制作完成的简装子系统
9.4.2.3精装子系统的使用特点
【例9.4.2.3-1】本例演示:
精装子系统参数对话窗的来源和外形特点;如何打开精装子系统自身的“下层”结构模型;精装子系统如何从外界获得参数。
(1)精装子系统参数对话窗的来源和工作特点
图9.4.2.3-1-1精装子系统的参数设置对话窗
(2)利用精装子系统所在窗口的【LookunderMask】菜单项,可打开精装子系统的结构模型窗。
(3)参数值的传递路径
9.4.3条件执行子系统
9.4.3.1使能子系统
【*例9.4.3.1】利用使能原理构成一个半波整流器。
本例演示使能子系统的创建及工作机理。
(1)打开SIMULINK的新建模型窗口
(2)从SIMULINK库中提取三个模块Sinewave、Subsystem、Scope到新建窗。
然后进行文件保存操作,并起文件名为exm9431_1(这保存操作只为以后调用方便,并非必要)。
(3)双击空子系统模块Subsystem,打开其结构模型窗。
(4)从SIMULINK库中拷贝In输入口模块、Out输出口模块、Enable使能模块到子系统的结构模型窗;把In模块的输出直接送到Out模块的输入端;Enable模块无须进行任何连接,且本例采用它的缺省设置;便实现了题目所需使能子系统(图9.4.3.1-1b)。
(5)按图9.4.3.1-1-1a那样,完成exm9431_1窗口中各模块间的连接。
(6)双击示波器模块,打开显示窗。
然后选择exm9431_1窗口菜单项【Simulation:
Start】,就可看到如图9.4.3.1-1-2的半波整流后的波形。
图9.4.3.1-1-1利用使能子系统实现半波整流的仿真模型
图9.4.3.1-1-2所得仿真波形
9.4.3.2触发子系统
【*例9.4.3.2-1】利用触发子系统获得零阶保持的采样信号。
本例演示:
触发子系统工作原理;在MATLAB指令窗中运行SIMULINK模型。
(1)构造如图9.4.3.2-1-1所示的仿真模型exm9432_1.mdl
图9.4.3.2-1-1利用触发子系统实现零保持采样的仿真模型exm9432_1
(2)在MATLAB指令窗中运行SIMULINK模型
[t,x,y]=sim('exm9432_1',10);
clf,holdon
plot(t,y(:
1),'b')
stairs(t,y(:
2),'r')
stairs(t,y(:
3),'c:
'),holdoff
axis([010-1.11.1]),boxon
legend('sinewave','output','trigger',4)
图9.4.3.2-1-2exm9432_1.mdl模型仿真运行结果
9.4.3.3触发使能子系统
9.4.3.4使能子系统和出发子系统综合运用示例
【*例9.4.3.4-1】本例是前面例9.3.2.2-1,9.4.1.1-1,9.4.2.2-1的继续,使得汽车速度受两种不同的控制器操纵。
具体要求是:
(A)当汽车实际速度与期望速度的误差绝对值
,且
时,将切换为PI比例-积分控制器;(B)一旦PI控制器被使用,只要仍满足
,那么PI将继续起控制作用;(C)除以上情况外,则都使用简单的P比例控制器。
(1)建立PController使能子系统和PIController使能子系统
图9.4.3.4-1-1P和PI控制器使能子系统的结构图
(2)建立ModelSelector子系统模块
图9.4.3.4-1-2ModelSelector子系统的结构图
(3)为保存“控制器切换时间”创建触发子系统
图9.4.3.4-1-3SaveSwitchTime触发子系统的结构图
(4)建立完整的仿真模型
图9.4.3.4-1-4轿车速度双模式控制系统的仿真模型
(5)仿真结果
图9.4.3.4-1-5两个仿真示波器上的曲线记录
9.4.3.5交替执行子系统
【*例9.4.3.5-1】在例9.4.3.4-1中,比例控制器和比例-积分控制器的工作切换是借助ModelSelector子系统产生的两个输出切换信号ChoosePI和ChooseP实现的。
本例将演示:
如何依靠一个ChoosePI信号和merge汇合模块的配合使用,实现同样的控制器切换。
(1)把exm9434_1.mdl另存为exm9435_1.mdl。
(2)把图9.4.3.4-1-4中虚线框所围的那部分改成图9.4.3.5-1所示那样。
图9.4.3.5-1等效于图9.4.3.4-1-5虚线框所围部分的模型
9.5离散时间系统和混合系统
9.5.1若干基本模块
【*例9.5.1-1】用组合逻辑模块产生
的“逻辑和”结果
及“逻辑或”结果
。
(1)建立输入输出关系(见表9.5.1-2。
真值表用黑框所围)
(2)建立模型exm951_1.mdl(见图9.5.1-1)
图9.5.1-1逻辑运算模块和组合逻辑模块运行对照模型
9.5.2多速率离散时间系统
【*例9.5.2-1】在离散控制系统中,控制器的更新频率一般低于对象本身的工作频率。
而显示系统的更新频率总比显示器的可读速度低得多。
假设有某过程的离散状态方程
式中
是输入。
该过程的采样周期为
秒。
控制器应用采样周期为
秒的比例控制器;显示系统的更新周期为
秒。
(1)建立模型exm952_1.mdl(见图9.5.2-1-1)
图9.5.2-1-1经着色的多速率离散系统
(2)在exm952_1模型窗中,选取菜单项【Format:
Sampletimecolors】后,模型中不同采样周期的模块和连线就会以不同颜色表示。
在本例中,采样速度最快的被控过程部分显示为红色;速度次之的控制器部分显示为绿色;显示x1历史记录的那部分显示为兰色。
(3)仿真结果
tt=TX.time;
x1=TX.signals.values;
plot(tt,x1),gridon,
xlabel('kT'),ylabel('x1(kT)')
图9.5.2-1-1
的历史记录
9.5.3离散-连续混合系统
【例9.5.3-1】本例是在例9.4.2.2-1的基础上进行的。
目标是:
设计一个离散PID控制器子系统对轿车速度进行控制。
本例演示:
(A)离散PID的构成;(B)展示仿真模型在研究控制器各参数影响上的能力。
(1)打开例9.4.2.2-1中模型exm9422_1.mdl,选用菜单项【File:
Saveas】产生“另存”模型exm953_1.mdl。
它将用做以下改建的“原始”模型。
(2)把exm953_1窗口中的PController改名为PIDController。
(参见图9.5.3-1-1)
图9.5.3-1-1采用离散PID的轿车速度控制系统
(3)双击PIDController子系统“原始”模块,打开该子系统的exm953_1/PIDController结构模型窗。
(4)把exm953_1/PIDController模型窗中模型改建成图9.5.3-1所示。
图9.5.3-1-2exm953_1/PIDController子系统的结构模型
(5)在exm953_1模型窗中,选取菜单项【Format:
Sampletimecolors】,使该模型及其所有子系统模型按采样速率着色:
连续时间部分用黑色;离散时间部分用红色;离散、连续混合的子系统被着黄色。
(6)仿真实验
图9.5.3-1-3exm953_1/PIDController子系统的结构模型
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。
(B)画出两种初始状态下的车速曲线。
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.1线性化的数学描述
9.6.3.2连续系统的线性化模型
9.6.3.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]坐标处的线性化模型(注意模型与前一个不