该系列博客主要讲述 M A T L A B {\rm MATLAB} MATLAB软件在自动控制方面的应用,参考书籍:《 M A T L A B / S I M U L I N K {\rm MATLAB/SIMULINK} MATLAB/SIMULINK与控制系统仿真》。
2.SIMULINK仿真设置及实例
2.1 SIMULINK功能模块的处理
2.1.1 SIMULINK功能模块参数设置
2.1.2 SIMULINK模块基本操作
在模型窗口中,选中模块,四角出现黑色标记,对模块可以进行如下操作:
- 移动:选中模块,按住鼠标左键将其拖曳到想放置的位置即可;要脱离线移动,按住 S h i f t {\rm Shift} Shift键进行拖曳;
- 复制:选中模块,按住鼠标右键进行拖曳即可复制一个同样的功能模块;
- 删除:选中模块,按 D e l e t e {\rm Delete} Delete键即可;若删除多个模块,同时按住 S h i f t {\rm Shift} Shift键,用鼠标选中多个模块,按 D e l e t e {\rm Delete} Delete键即可;亦可用鼠标选取某区域,按 D e l e t e {\rm Delete} Delete键即可把该区域的所有模块和线等全部删除;
- 转向:右键模块,即可看到 F l i p & R o t a t e {\rm Flip\&Rotate} Flip&Rotate选项;
- 改变大小:选中模块,对模块出现的 4 4 4个黑色标记进行拖曳即可;
- 模块命名:在模块上的"…“展开点击” S h o w B l o c k N a m e {\rm Show\ Block\ Name} Show Block Name",把模块名显示后,点击模块名即可进行修改;
- 颜色设定:右键模块,选中" F o r m a t {\rm Format} Format“选项卡即可看到” F o r e g r o u n d C o l o r {\rm Foreground\ Color} Foreground Color“前景颜色,” B a c k g r o u n d C o l o r {\rm Background\ Color} Background Color"背景颜色;
- 参数设定:鼠标双击模块即可进行参数设置;
- 属性设定:选中模块,选中" P r o p e r t i e s {\rm Properties} Properties"选项卡,点击进入属性设定界面,包括 D e s c r i p t i o n 、 P r i o r i t y 、 T a g {\rm Description、Priority、Tag} Description、Priority、Tag等属性的设定;
2.2 SIMULINK仿真设置
2.2.1 仿真器参数设置
" c t r l + E {\rm ctrl+E} ctrl+E"打开仿真器参数设置界面:
-
仿真时间 ( S i m u l a t i o n t i m e ) ({\rm Simulation\ time}) (Simulation time)
计算机仿真对时间的表示, 10 s {\rm 10s} 10s的仿真时间,如果采样步长为 0.1 {\rm 0.1} 0.1,则需要执行 100 100 100步,如果把步长减小,则采样点数增加,实际执行的时间会增加;
需要设置仿真开始时间 ( S t a r t t i m e ) ({\rm Start\ time}) (Start time)和仿真结束时间 ( S t o p t i m e ) ({\rm Stop\ time}) (Stop time),仿真开始时间一般设置为 0 0 0,结束时间视情况而定;
-
仿真步长模式 ( T y p e ) ({\rm Type}) (Type)
仿真步长模式可选: V a r i a b l e − s t e p {\rm Variable-step} Variable−step(变步长)模式和 F i x e d − s t e p {\rm Fixed-step} Fixed−step(固定步长)模式;
变步长模式在仿真过程中改变可以改变步长,提供误差控制和过零检测选择;固定步长模式在仿真过程中提供固定的步长,不提供误差控制和过零检测;
-
解法器 ( S o l v e r ) ({\rm Solver}) (Solver)
变步长模式的解法器:
- d i s c r e t e {\rm discrete} discrete:当 S I M U L I N K {\rm SIMULINK} SIMULINK检查到模型没有连续状态时使用它;
- o d e 45 {\rm ode45} ode45:默认值,四/五阶龙格-库塔法,适用于大多数连续或离散系统,不适用于刚性系统;是单步解法器,即在计算 y ( t n ) y(t_n) y(tn)时,仅需要最近处理时刻的结果 y ( t n − 1 ) y(t_{n-1}) y(tn−1);
- o d e 23 {\rm ode23} ode23:二/三阶龙格-库塔法,在误差限要求不高和求解的问题不太难的情况下,可能比 o d e 45 {\rm ode45} ode45更有效,是一个单步解法器;
- o d e 113 {\rm ode113} ode113:一种阶数可变的解法器,在误差容许要求严格的情况下通常比 o d e 45 {\rm ode45} ode45有效; o d e 113 {\rm ode113} ode113是一种多步解法器,即在计算当前时刻输出时,需要以前多个时刻的解;
- o d e 15 s {\rm ode15s} ode15s:一种基于数字微分公式的解法器,是一种多步解法器,适用于刚性系统;
- o d e 23 s {\rm ode23s} ode23s:一种单步解法器,专门用于刚性系统,在弱误差允许下的效果优于 o d e 15 s {\rm ode15s} ode15s,能解决某些 o d e 15 s {\rm ode15s} ode15s不能有效解决的 s t i f f {\rm stiff} stiff问题;
- o d e 23 t {\rm ode23t} ode23t:表示梯形规则的一种自由插值实现,适用于求解适度 s t i f f {\rm stiff} stiff而用户又需要一个无数字振荡的解法器的情况;
- o d e 23 t b {\rm ode23tb} ode23tb:表示 T R − B D F 2 {\rm TR-BDF2} TR−BDF2的一种实现, T R − B D F 2 {\rm TR-BDF2} TR−BDF2是具有两个阶段的隐式龙格-库塔公式;
固定步长模式的解法器:
- d i s c r e t e {\rm discrete} discrete:一种实现积分的固定步长解法器,适用于离散无连续状态的系统;
- o d e 5 {\rm ode5} ode5:默认值,适用于大多数连续或离散系统,不适用于刚性系统;
- o d e 4 {\rm ode4} ode4:四阶龙格-库塔法,具有一定的计算精度;
- o d e 3 {\rm ode3} ode3:固定步长的二/三阶龙格-库塔法;
- o d e 2 {\rm ode2} ode2:改进的欧拉法;
- o d e 1 {\rm ode1} ode1:欧拉法;
- o d e 14 x {\rm ode14x} ode14x:固定步长的隐式外推法;
-
变步长模式的步长参数设置
- M a x s t e p s i z e {\rm Max\ step\ size} Max step size(最大步长参数):决定解法器能够使用的最大时间步长,默认值为"仿真时间/ 50 50 50",即整个仿真过程至少取 50 50 50个取样点;一般建议对于仿真时间不超过 15 s {\rm 15s} 15s的采用默认值即可,对于超过 15 s {\rm 15s} 15s的每秒至少保证 5 5 5个采样点,对于超过 100 s {\rm 100s} 100s的,每秒至少保证 3 3 3个采样点;
- M i n s t e p s i z e {\rm Min\ step\ size} Min step size(最小步长参数):规定变步长仿真时使用的最小步长;
- R e l a t i v e t o l e r a n c e {\rm Relative\ tolerance} Relative tolerance(相对误差):指误差相对于状态的值,是一个百分比,默认值为: 1 e − 3 {\rm 1e-3} 1e−3,表示状态的计算值要精确到 0.1 % 0.1\% 0.1%;
- A b s o l u t e t o l e r a n c e {\rm Absolute\ tolerance} Absolute tolerance(绝对误差):指误差值的门限,或在状态值为零的情况下可以接收的误差;如果设置为 a u t o {\rm auto} auto,则 S I M U L I N K {\rm SIMULINK} SIMULINK为每一个状态设置初始绝对误差为 1 e − 6 {\rm 1e-6} 1e−6;
- I n i t i a l s t e p s i z e {\rm Initial\ step\ size} Initial step size(初始步长参数):一般使用 a u t o {\rm auto} auto默认值;
- Z e r o c r o s s i n g c o n t r o l {\rm Zero\ crossing\ control} Zero crossing control:过零点控制,用来检查仿真系统的非连续;
-
固定步长模式的步长参数设置
- M u l t i t a s k i n g {\rm Multitasking} Multitasking:当 S I M U L I N K {\rm SIMULINK} SIMULINK检测到模块间非法的采样速率转换时系统会给出错误提示;非法采样速率转换即两个工作在不同采样速率的模块间的直接相连;
- S i n g l e t a s k i n g {\rm Singletasking} Singletasking:此模式下不检查模块间的速率转换,在这种系统不存在任务同步问题;
- A u t o {\rm Auto} Auto:此模式下, S I M U L I N K {\rm SIMULINK} SIMULINK根据模型中模块的采样速率是否一致,自动决定切换到 M u l t i t a s k i n g {\rm Multitasking} Multitasking模式或 S i n g l e t a s k i n g {\rm Singletasking} Singletasking模式;
2.2.2 工作空间数据导入/导出设置
-
L
o
a
d
f
r
o
m
w
o
r
k
s
p
a
c
e
{\rm Load\ from\ workspace}
Load from workspace
- I n p u t {\rm Input} Input:从 M A T L A B {\rm MATLAB} MATLAB工作空间获取时间和输入变量,时间默认: t t t,输入变量默认: u u u;
- I n i t i a l s t a t e {\rm Initial\ state} Initial state:从 M A T L A B {\rm MATLAB} MATLAB工作空间获得的状态初始值的变量名;
- S I M U L I N K {\rm SIMULINK} SIMULINK通过设置模型的输入端口,实现在仿真过程中从工作空间读入数据,常用的输入端口模块为信号与系统模块库 ( S i g n a l s & S y s t e m s ) ({\rm Signals\&Systems}) (Signals&Systems)中的 I n 1 {\rm In1} In1模块,设置参数时,选中 I n p u t {\rm Input} Input前的复选框,在后面的编辑框键入数据的变量名,并可以用命令行窗口或 M {\rm M} M文件编辑器输入数据;
-
S
a
v
e
t
o
w
o
r
k
s
p
a
c
e
{\rm Save\ to\ workspace}
Save to workspace
- 用来设置存在 M A T L A B {\rm MATLAB} MATLAB工作空间的变量类型和变量名,选中选项前面的复选框并在选项后面的编辑框输入变量名,即可吧相应数据保存到指定的变量中;
- 常用的输出模块为信号与系统模块库 ( S i g n a l s & S y s t e m s ) ({\rm Signals\&Systems}) (Signals&Systems)中的 O u t 1 {\rm Out1} Out1模块和输出方式库 ( S i n k ) {({\rm Sink})} (Sink)中的 T o W o r k s p a c e {\rm To\ Workspace} To Workspace模块;
-
S
a
v
e
o
p
t
i
o
n
s
{\rm Save\ options}
Save options
- 用来设置设置存往工作空间的有关选项;
- L i m i t d a t e p o i n t s t o l a s t {\rm Limit\ date\ points\ to\ last} Limit date points to last:用来设定 S I M U L I N K {\rm SIMULINK} SIMULINK仿真结果最终可存往 M A T L A B {\rm MATLAB} MATLAB工作空间的变量的规模,对于向量而言即其维数,对于矩阵而言即其秩;
- D e c i m a t i o n {\rm Decimation} Decimation:设定了一个亚采样因子,默认值为 1 1 1,即对每一个仿真时间点产生值都保存,若为 2 2 2则是每隔一个仿真时刻保存一个值;
2.3 SIMULINK仿真实例
2.3.1 实验1
实验要求:使用 S I M U L I N K {\rm SIMULINK} SIMULINK求解微分方程 d u d t = cos ( sin t ) , u ( 0 ) = 1 \displaystyle\frac{{\rm d}u}{{\rm d}t}=\cos(\sin{t}),u(0)=1 dtdu=cos(sint),u(0)=1。
解:
# 实验步骤:
# 1.所需模块:正弦信号、余弦函数、积分模块、观测结果模块;
# 2.各模块所在位置
# 2.1 正弦信号:Sources模块组中Sine Wave模块;
# 2.2 余弦函数:Math Operations模块组中Trigonometric Function模块,双击该模块选择余弦函数;
# 2.3 积分模块:Continuous模块组中Integrator模块;
# 2.4 显示模块:Sinks模块组中Scope模块(示波器模块);
# 3.把各模块拖曳到仿真窗口,并连接起来;
# 4.点击"run",然后双击Scope(示波器)显示结果;
2.3.2 实验2
实验要求:产生一个 5 sin ( 2 t ) {5\sin(2t)} 5sin(2t)和 sin ( 5 t ) \sin(5t) sin(5t)叠加的信号,另外叠加一个功率谱为 0.5 0.5 0.5的限带宽白噪声;
解:
# 实验步骤:
# 1.所需模块:正弦信号、限带宽白噪声、加法模块、观测结果模块;
# 2.各模块所在位置
# 2.1 正弦信号:Sources模块组中Signal Generator模块,双击模块设置正弦信号参数;
# 2.2 限带宽白噪声:Sources模块组中Band-Limited White Noise模块,双击设置Noise power为0.5;
# 2.3 加法模块:Math Operations模块组中Add模块,双击将"List of Signs"的"++"改为"+++";
# 2.4 示波器模块:Sinks模块组中Scope模块;
# 3.把各模块拖曳到仿真窗口,并连接起来;
# 4.点击"run",然后双击Scope(示波器)显示结果;
2.3.3 实验3
实验要求:已知单位负反馈二阶系统的开环传递函数为: G ( s ) = 10 s 2 + 3 s G(s)=\displaystyle\frac{10}{s^2+3s} G(s)=s2+3s10,使用 S I M U L I N K {\rm SIMULINK} SIMULINK求解其单位阶跃响应。
解:
# 实验步骤:
# 1.所需模块:阶跃信号、相加器、传递函数、示波器;
# 2.各模块所在位置
# 2.1 阶跃信号:Sources模块组中Step模块;
# 2.2 相加器:Math Operations模块组中Sum模块;
# 2.3 传递函数:Continuous模块组中Transfer Fcn模块;
# 2.4 示波器模块:Sinks模块组中Scope模块;
# 3.把各模块拖曳到仿真窗口,并连接起来;
# 4.点击"run",然后双击Scope(示波器)显示结果;
2.3.4 实验4
实验要求:某控制系统的传递函数为: Y ( s ) X ( s ) = G ( s ) 1 + G ( s ) \displaystyle\frac{Y(s)}{X(s)}=\displaystyle\frac{G(s)}{1+G(s)} X(s)Y(s)=1+G(s)G(s),其中: G ( s ) = s + 50 2 s 2 + 3 s G(s)=\displaystyle\frac{s+50}{2s^2+3s} G(s)=2s2+3ss+50,用 S I M U L I N K {\rm SIMULINK} SIMULINK求解其阶跃输出响应,并将响应曲线导入到 M A T L A B {\rm MATLAB} MATLAB工作空间,在工作空间中绘制响应曲线。
解:
# 实验步骤:
# 1.所需模块:阶跃信号、传递函数、加法模块、数据导出模块、结果观测模块;
# 2.各模块所在位置
# 2.1 阶跃信号:Sources模块组中Step模块;
# 2.2 传递函数:Continuous模块组中Transfer Fcn模块;
# 2.3 加法模块:Math Operations模块组中Sum模块;
# 2.4 示波器模块:Sinks模块组中Scope模块;
# 2.5 数据导出模块:Sinks模块组中To Workspace模块,导出数据命令:y,save format设为array;
# 3.把各模块拖曳到仿真窗口,并连接起来;
# 4.点击"run",然后双击Scope(示波器)显示结果;