第八章 metlabSIMULINK交互式仿真集成环境.docx
《第八章 metlabSIMULINK交互式仿真集成环境.docx》由会员分享,可在线阅读,更多相关《第八章 metlabSIMULINK交互式仿真集成环境.docx(51页珍藏版)》请在冰豆网上搜索。
第八章metlabSIMULINK交互式仿真集成环境
第八章SIMULINK交互式仿真集成环境
8.1引导
SIMULINK是一个进行动态系统建模、仿真和综合分析的集成软件包。
它可以处理的系统包括:
线性、非线性系统;离散、连续及混合系统;单任务、多任务离散事件系统。
在SIMULINK提供的图形用户界面GUI上,只要进行鼠标的简单拖拉操作就可构造出复杂的仿真模型。
它外表以方块图形式呈现,且采用分层结构。
从建模角度讲,这既适于自上而下(Top-down)的设计流程(概念、功能、系统、子系统、直至器件),又适于自下而上(Bottum-up)逆程设计。
从分析研究角度讲,这种SIMULINK模型不仅能让用户知道具体环节的动态细节,而且能让用户清晰地了解各器件、各子系统、各系统间的信息交换,掌握各部分之间的交互影响。
在SIMULINK环境中,用户将摆脱理论演绎时需做理想化假设的无奈,观察到现实世界中摩擦、风阻、齿隙、饱和、死区等非线性因素和各种随机因素对系统行为的影响。
在SIMULINK环境中,用户可以在仿真进程中改变感兴趣的参数,实时地观察系统行为的变化。
由于SIMULINK环境使用户摆脱了深奥数学推演的压力和烦琐编程的困扰,因此用户在此环境中会产生浓厚的探索兴趣,引发活跃的思维,感悟出新的真谛。
在MATLAB6.x版中,可直接在SIMULINK环境中运作的工具包很多,已覆盖通信、控制、信号处理、DSP、电力系统等诸多领域,所涉内容专业性极强。
本书无意论述涉及工具包的专业内容,而只是集中阐述:
SIMULINK的基本使用技法和相关的数值考虑。
节8.1虽是专为SIMULINK初学者写的,但即便是熟悉SIMULINK以前版本的读者也值得快速浏览这部分内容,因为新版的界面、菜单、工具条、模块库都有较大的变化。
第8.2节比较详细地阐述建模的基本操作:
通用模块的具体化设置、信号线勾画、标识、模型窗参数设置。
这部分内容是进一步深入的前提。
从第8.3节起,由浅入深地讲述SIMULINK对各种数学、工程问题的建模、仿真和分析的基本方法。
本章采用“算例”作为主体,配以适量的归纳性表述。
本章包含了34个“尽量简单”又“独立完整”的“典型”算例,而这正是SIMULINK在线PDF文件之所缺。
读者通过“手、眼、脑”并用地练习算例,掌握SIMULINK的一般使用规则和操作技法。
鉴于SIMULINK的本质,本节算例必定涉及数学、物理、和若干工程考虑。
本书已采取“无量纲记述”、“注释”等措施使算例尽可能易读易懂,读者只要稍微耐心,就可以从这些有背景的内容体验到SIMULINK仿真之细腻和切实,从这些带背景性的算例品出SIMULINK的精妙之处。
本章内容已在MATLAB6.5基础上进行全面更新,变动最大的是第8.4.3节。
此外,为适应读者应用水平的提高,新增了第8.8节,论述S函数模块的创建和使用。
8.1.1SIMULINK的安装
图8.1.1-1
8.1.2SIMULINK入门
图8.1.2-1
图8.1.2-2
图8.1.2-3
图8.1.2-4模型创建中的模型窗一
图8.1.2-5
图8.1.2-6
图8.1.2-7
8.1.3SIMULINK库浏览器界面
图8.1.3-1
8.1.4SIMULINK模型窗的组成
图8.1.4-1
8.2模型的创建
8.2.1模型概念和文件操作
8.2.1.1SIMULINK模型是什么
8.2.1.2模型文件的操作
图8.2.1.2-1
8.2.2模块操作
8.2.2.1模块的基本操作
(1)模块的选定
图8.2.2.1-1
●选定单个模块的操作方法:
●选定多个模块的操作方法:
图8.2.2.1-2
(2)模块的复制
(3)模块的移动
(4)模块的删除
(5)改变模块大小
(a)原尺寸
(b)拖动边框
(c)新尺寸
图8.2.2.1-3
(6)模块的旋转
(a)缺省状态
(b)旋转1800
(c)旋转900
图8.2.2.1-4
(7)模块名的操作
(8)模块的阴影效果
8.2.2.2向量化模块和标量扩展
(1)向量化模块
(2)标量扩展
【例8.2.2.2-1】演示“示波”模块的向量显示能力。
图8.2.2.2-1-1
【例8.2.2.2-2】演示“求和”模块的向量处理能力:
输入扩展。
图8.2.2.2-2-1
【例8.2.2.2-3】演示“增益”模块的向量处理能力:
参数扩展。
图8.2.2.2-3-1
8.2.2.3参数设置
8.2.3信号线操作
8.2.3.1产生连线
(1)水平或垂直连线的产生
(2)斜连线的产生
(3)连线的移动和删除
8.2.3.2信号线的分支和折曲
(1)分支的产生
(2)信号线的折曲
(3)折点的移动
8.2.3.3信号线宽度显示
8.2.3.4彩色显示信号线
8.2.3.5插入模块
图8.2.3.5-1
8.2.3.6信号线标识(label)
【例8.2.3.6-1】演示:
信号线标识的传播
8.2.4对模型的注释
(1)模型注释的创建
(2)注释位置的移动
(3)注释文字的字体控制
8.2.5常用的Sourse库信源
【例8.2.5-1】如何调用MATLAB工作空间中的信号矩阵作为模型输入。
本例所需的输入为
。
(1)
[sourec0825_1.m]
functionTU=source0825_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)
图8.2.5-1
(3)
(4)
TU=source0825_1(1,100,4);
(5)
8.2.6常用的Sink库信宿
8.2.6.1库信宿一览表
8.2.6.2示波器
(1)示波器的用途
(2)示波器窗的工具条
(3)示波器纵坐标范围的手工设置
(4)示波器横坐标的设置
(5)把示波器数据送入MATLAB工作空间
(6)多信号显示区设置
(7)设置为游离示波器
8.2.7仿真的配置
8.2.7.1解算器参数的设置(Solver)
图8.2.7.1-1
8.2.7.2仿真数据的输入输出设置(WorkspaceI/O)
图8.2.7.2-1
8.2.7.3仿真中异常情况的诊断(Diagnostics)
图8.2.7.3-1
8.3连续系统建模
8.3.1线性系统
8.3.1.1积分模块的功用
【例8.3.1.1-1】复位积分器的功用示例。
图8.3.1.1-1
8.3.1.2积分模块直接构造微分方程求解模型
【例8.3.1.2-1】假设从实际自然界(力学、电学、生态等)或社会中,抽象出有初始状态为0的二阶微分方程
,
是单位阶跃函数。
本例演示如何用积分器直接构搭求解该微分方程的模型。
(1)
(2)
图8.3.1.2-1-1
(3)仿真操作
(4)保存在MATLAB工作空间中的数据
clf
tt=ScopeData.time;
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')
图8.3.1.2-1-2
8.3.1.3传递函数模块
【例8.3.1.3-1】直接利用传递函数模块求解方程(8.3.1.3-1)。
(1)
图8.3.1.3-1
(2)
8.3.1.4状态方程模块和单位脉冲输入的生成
【例8.3.1.4-1】假设式(8.3.1.4-1)中的输入函数
是单位脉冲函数
,研究该系统的位移变化。
本例演示:
(A)状态方程模块的使用;(B)脉冲函数的生成方法。
(1)
(2)
图8.3.1.4-1-1
(3)
图8.3.1.4-1-2
8.3.2非线性系统
8.3.2.1建立非线性仿真模型的基本考虑
【例8.3.2.1-1】物理背景:
如图8.3.2.1-1-1所示喷射动力车的定位控制问题。
图8.3.2.1-1-1
(1)
图8.3.2.1-1-2
(2)
(3)
图8.3.2.1-1-3
(4)
(5)
(6)
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
图8.3.2.1-1-4
8.3.2.2任意非线性函数模块及其应用
【例8.3.2.2-1】轿车沿直线山坡路向前行驶。
要求设计一个简单的比例放大器,使轿车能以指定的速度运动。
本例演示:
(A)仿真系统的创建。
(B)非线性模块的使用。
(C)任意函数模块的应用。
(D)体现“自下而上”的建模方式。
(E)本例将作为下面章节多个算例的基础,读者切莫跳略此题。
(1)
图8.3.2.2-1-1
(2)
图8.3.2.2-1-2
(2)
图8.3.2.2-1-3
(3)
图8.3.2.2-1-4
(4)
8.4子系统的创建、装帧及受控执行
8.4.1简装子系统及其应用
8.4.1.1创建简装子系统的“先有内容后套包装”法
【例8.4.1.1-1】题目的背景和参数与例8.3.2.2-1完全相同,要求创建利用比例控制器使轿车的运动速度稳定在期望车速的分层仿真模型。
本例演示:
如何从非分层模型获得分层模型;创建简装子系统的“先有内容后套包装”法。
(1)
(2)
(3)
(4)
(5)
图8.4.1.1-1
8.4.1.2创建简装子系统的“先有包装后置内容”法
【例8.4.1.2-1】本例演示:
如何自上而下构造分层模型;产生简装子系统的“先有包装后置内容”法。
(1)
图8.4.1.2-1
(2)
(3)
(4)
(5)
8.4.2精装子系统
8.4.2.1精装子系统的制作过程
8.4.2.2装帧示例
【例8.4.2.2-1】目标:
把图8.4.1.1-1所示轿车速度控制模型中的轿车动态模型简装子系统变成精装子系统。
(1)
(2)
图8.4.2.2-1-1
(3)
(4)
(5)
(6)
图8.4.2.2-1-2
(7)
图8.4.2.2-1-3
(8)
图8.4.2.2-1-4
8.4.2.3精装子系统的使用特点
【例8.4.2.3-1】本例演示:
精装子系统参数对话窗的来源和外形特点;如何打开精装子系统自身的“下层”结构模型;精装子系统如何从外界获得参数。
(1)
图8.4.2.3-1-1
(2)
(3)
8.4.3条件执行子系统
8.4.3.1使能子系统
【例8.4.3.1-1】利用使能原理构成一个半波整流器。
本例演示使能子系统的创建及工作机理。
(1)
(2)
(3)
(4)
图8.4.3.1-1-1
图8.4.3.1-1-2
【例8.4.3.1-2】本例演示:
在使能子系统中插入滤波模块
。
图8.4.3.1-2-1
(1)
(2)
(3)
(4)
图8.4.3.1-2-2
8.4.3.2触发子系统
【例8.4.3.2-1】利用触发子系统获得零阶保持的采样信号。
本例演示:
触发子系统工作原理。
图8.4.3.2-1-1
(1)
(2)
[t,x,y]=sim('exm080432_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)
图8.4.3.2-1-2
8.4.3.3触发使能子系统
8.4.3.4使能子系统和出发子系统综合运用示例
【例8.4.3.4-1】本例是前面例8.3.2.2-1,8.4.1.1-1,8.4.2.2-1的继续,使得汽车速度受两种不同的控制器操纵。
具体要求是:
(A)当汽车实际速度与期望速度的误差绝对值
,且
时,将切换为PI比例-积分控制器;(B)一旦PI控制器被使用,只要仍满足
,那么PI将继续起控制作用;(C)除以上情况外,则都使用简单的P比例控制器。
(1)
图8.4.3.4-1-1
(2)
图8.4.3.4-1-
(3)
图8.4.3.4-1-3
(4)
图8.4.3.4-1-4
(5)
图8.4.3.4-1-5
8.4.3.5交替执行子系统
【例8.4.3.5-1】在例8.4.3.4-1中,比例控制器和比例-积分控制器的工作切换是借助ModelSelector子系统产生的两个输出切换信号ChoosePI和ChooseP实现的。
本例将演示:
如何依靠一个ChoosePI信号和merge汇合模块的配合使用,实现同样的控制器切换。
(1)
(2)
图8.4.3.5-1
8.5离散时间系统和混合系统
8.5.1若干基本模块
(1)单位延迟模块Unitdelay
(2)零阶保持器Zero-Orderhold
(3)传递函数型模块
(4)组合逻辑模块Combinationallogic
(5)离散时间积分器Discrete-timeintegrator
【例8.5.1-1】用组合逻辑模块产生
的“逻辑和”结果
及“逻辑或”结果
。
(1)
表8.5.1-2
a
b
c
(1)
c
(2)
0
0
0
0
0
1
0
1
1
0
0
1
1
1
1
1
(2)
图8.5.1-1
8.5.2多速率离散时间系统
【例8.5.2-1】在离散控制系统中,控制器的更新频率一般低于对象本身的工作频率。
而显示系统的更新频率总比显示器的可读速度低得多。
假设有某过程的离散状态方程
式中
是输入。
该过程的采样周期为
秒。
控制器应用采样周期为
秒的比例控制器;显示系统的更新周期为
秒。
(1)
图8.5.2-1-1
(2)
(3)
tt=TX.time;
x1=TX.signals.values;
plot(tt,x1),gridon,
xlabel('kT'),ylabel('x1(kT)')
图8.5.2-1-1
8.5.3离散-连续混合系统
【例8.5.3-1】本例是在例8.4.2.2-1的基础上进行的。
目标是:
设计一个离散PID控制器子系统对轿车速度进行控制。
本例演示:
(A)离散PID的构成;(B)展示仿真模型在研究控制器各参数影响上的能力。
(1)
(2)
图8.5.3-1-1
(3)
(4)
图8.5.3-1-2
(5)
(6)
图8.5.3-1-3
8.6SIMULINK的分析工具
8.6.1确定模型的特征
【例8.6.1-1】观察例8.5.3-1中所建模型exm08053_1.mdl中状态向量的结构。
[sizes,x0,StateCell]=exm08053_1;
SIZES=sizes',X0=x0',StateCell
SIZES=
2200003
X0=
0000
StateCell=
'exm08053_1/AutomobileModel/Int1'
'exm08053_1/AutomobileModel/Int2'
'exm08053_1/PIDController/DT-I'
'exm08053_1/PIDController/DD'
8.6.2用MATLAB指令运行SIMULINK模型
8.6.2.1运行SIMULINK模型的sim指令
8.6.2.2设置编辑仿真参数的simset指令
8.6.2.3获取模型仿真参数的simget指令
8.6.2.4MATLAB指令运行SIMULINK模型的示例
【例8.6.2.4-1】以例8.5.3-1中所建模型exm08053_1.mdl为基础进行本题解算。
演示:
(A)显示模型窗中的初始状态设置。
(B)把初始车速重置为120,而其他初始值仍为0。
(B)画出两种初始状态下的车速曲线。
InInit=simget('exm08053_1','InitialState')%获取模型窗对初始值的设置
[t,x,y]=sim('exm08053_1',100);%在模型内设置参数下进行仿真
opts=simset('InitialState',[120,0,0,0]);%初始值的重置
[tt,xx,yy]=sim('exm08053_1',100,opts);%在重置初值下仿真
plot(t,x(:
1),':
b',tt,xx(:
1),'r')
legend('\fontname{隶书}\fontsize{16}内初值','外初值',4)
图8.6.2.4-1
8.6.3模型的线性化问题
8.6.3.1线性化的数学描述
8.6.3.2连续系统的线性化模型
8.6.3.3离散系统的线性化模型
8.6.3.4模型线性化的算例
【例8.6.3.4-1】求非线性系统
在坐标原点处的线性化模型。
(1)
(2)
图8.6.3.4-1
(3)
[A,B,C,D]=linmod('exm080634_1');A
A=
00
2.0000-1.0000
(4)
[A1,B1,C1,D1]=linmod('exm080634_1',[1,0.5]);A1
A1=
2.00001.0000
2.0000-1.0000
(5)
eA=eig(A)',eA1=eig(A1)'
eA=
-1.00000
eA1=
2.5616-1.5616
8.6.4系统平衡点的求取
8.6.5综合算例
8.6.5.1“一步仿真”和精良状态轨迹斜率图
【例8.6.5.1-1】求非线性系统
的相平面轨迹、平衡点,并进行稳定性分析。
本例综合演示:
(A)SIMULINK模型和MATLAB指令的配合使用。
(B)sim,simset,trim指令的应用。
(C)“一步仿真”计算方法。
(D)二阶系统相轨迹的精良图形。
(1)
(2)
[exm080651_1.m]
%exm080651_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('exm080634_1',10,opts);
plot(x(:
1),x(:
2));
end
xlabel('x1');ylabel('x2'),grid,holdoff
(2)
exm080651_1
图8.6.5.1-1-1
(4)
[portraitzzy.m]
function[DX1,DX2,DP]=portraitzzy(x1,x2,h)
%PORTRAITZZY
%
%
opts=simset('solver','ode5','fixedstep',h);%<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('exm08634_1',h,opts);%<13>
dx1=x(2,1)-x1(ii);
dx2=x(2,2)-x2(jj);
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)
h=0.01;
x1=-2.5:
0.25:
2.5;x2=x1;
k=3.5;
[X1,X2]=portraitzzy(x1,x2,h);
quiver(x1,x2,k*X1,k*X2,0)
xlabel('x1'),ylabel('x2')
图8.6.5.1-1-2
(6)
surfc(x1,x2,Z),view([18,32]),xlabel('x1'),ylabel('x2')
图8.6.5.1-1-3
(6)
xa=trim('exm080634_1',[-1,-2]')
xb=trim('exm080634_1',[1,2]')
xa=
-0.8944
-1.7889
xb=
0.8944
1.7889
(7)
Axa=linmod2('exm080634_1',xa);eig_Axa=(eig(Axa))'
Axb=linmod2('exm080634_1',xb);eig_Axb=(eig(Axb))'
eig_Axa=
-1.3944-2.6457i-1.3944+2.6457i
eig_Axb=
3.4110-2.6222
8.6.5.2仿真模型和优化指令的协调
【例8.6.5.2-1】本例演示:
(A)如何用SIMULINK模块计算性能函数。
(B)SIMULINK方块模型、目标函数和优化程序之间的协调和参数传递。
(C)跨空间交换数据、跨空间计算表达式。
(1)
(2)
图8.6.5.2-1-1
(3)
[itae.m]
functionss=itae(aa)