CH6,SIMULINK仿真基础
? 在工程实际中,控制系统的结构往往很复杂,如果不借助
专用的系统建模软件,则很难准确地把一个控制系统的复
杂模型输入计算机,对其进行进一步的分析与仿真。
? 1990年,Math Works软件公司为 MATLAB提供了新的控
制系统模型图输入与仿真工具,并命名为 SIMULAB,该工
具很快就在控制工程界获得了广泛的认可,使得仿真软件
进入了模型化图形组态阶段。但因其名字与当时比较著名
的软件 SIMULA类似,所以 1992年正式将该软件更名为
SIMULINK。
? SIMULINK,该软件的名称表明了该系统的两个主要功能:
Simu(仿真)和 Link(连接),即该软件可以利用鼠标在
模型窗口上绘制出所需要的控制系统模型,然后利用
SIMULINK提供的功能来对系统进行仿真和分析。
第一节 SIMULINK简介
?SIMULINK是 MATLAB软件的扩展,它是实现动态系
统建模和仿真的一个软件包,它与 MATLAB语言的主要
区别在于,其与用户交互接口是基于 Windows的模型化
图形输入。
?所谓模型化图形输入是指 SIMULINK提供了一些按功
能分类的基本的系统模块,用户只需知道这些模块的输
入输出及模块的功能,而不必考察模块内部是如何实现
的,通过对这些基本模块的调用,再将它们连接起来就
可以构成所需要的系统模型(以,mdl文件进行存取),
进而进行仿真与分析。
一、什么是 SIMULINK
? SIMULINK是一个进行动态系统建模, 仿真和综合分析
的集成软件包 。 它可以处理的系统包括:线性, 非线性
系统;离散, 连续及混合系统;单任务, 多任务离散事
件系统 。
? 在 SIMULINK环境中, 用户可观察到摩擦, 风阻, 齿隙,
饱和, 死区等非线性因素和各种随机因素对系统行为的
影响 。 还可以在仿真进程中改变感兴趣的参数, 实时地
观察系统行为的变化 。
? 在 MATLAB6.x版中, 可直接在 SIMULINK环境中运作的
工具包很多, 已覆盖通信, 控制, 信号处理, 电力系统
等诸多领域, 所涉内容专业性极强 。
2、在 MATLAB命令窗口中输入 simulink3
结果是在桌面上出现一个用图标形式显示的 Library,simulink3的
Simulink模块库窗口。
二,SIMULINK的启动
1、在 MATLAB命令窗口中输入 simulink
结果是在桌面上出现一个称为 Simulink Library Browser的窗口,在这
个窗口中列出了按功能分类的各种模块的名称。
当然用户也可以通过 MATLAB主窗口的快捷按钮来打开 Simulink
Library Browser窗口。
两种模块库窗口界面只是不同的显示形式,用户可以根据各人
喜好进行选用,一般说来第二种窗口直观、形象,易于初学者,
但使用时会打开太多的子窗口。
三,SIMULINK的公共模块库
SIMILINK模块库按功能进行分类,包括以下子库:
Continuous(连续模块) disontinuous (非线性模块)
Discrete(离散模块) look up tables(查询表 模块 )
Math operations(数学模块) Model verification(模型检测 )
Model-wide Utilities( 模型扩展功能模块)
Ports&Systems(端口和子系统模块)
Signal attributes(信号描述模块 )
Signal routing(信号路由模块 )
Sinks(接收器(输出显示)模块) Sources(信号源模块)
User-defined functions(自定义模块 )
1,Continuous(连续模块)
Derivative:输入信号微分
Integrator:输入信号积分
State-Space:线性状态空间系统模型
Transfer-Fcn:线性传递函数模型
Transport Delay:输入信号延时一个固定时间再输出
Variable Transport Delay:输入信号延时一个可变时间再输出
Zero-Pole:以零极点表示的传递函数模型
2,Discontinuities (非线性模块)
Backlash:死区间隙
Coulomb &Viscous Friction,库仑粘滞摩擦信号
Dead Zone,死区信号
Hit Crossing:将信号与特定的偏移值比较
Quantizer;量化器
Rate Limiter;信号上升、下降速率控制器
Relay:滞环比较器,限制输出值在某一范围内变化。
Saturation,饱和信号,让输出超过某一值时能够饱和。
3,Discrete(离散模块)
Discrete Transfer-Fcn:离散传递函数模型
Discrete Zero-Pole:以零极点表示的离散传递函数模型
Discrete Filter,IIR与 FIR滤波器
Discrete State-Space:离散状态空间系统模型
Discrete-time Integrator:离散时间积分器
First-Order Hold:一阶采样和保持器
Memory,单步积分延迟,输出为前一个输入
Unit Delay:一个采样周期的延时
Zero-Order Hold:零阶采样和保持器
4,Look-up Tables(查询 表 模块)
Direct Look-Up Table (n-D),表数据选择器(从表中选数)
Interpolation (n-D) using PreLook-Up,对输入信号进行内

运算
Look-Up Table,对输入信号进行一维线性内插运算
Look-Up Table(2-D),对输入信号进行二维线性内插运算
Look-Up Table (n-D),对输入信号进行 n维线性内插运算
PreLook-Up Index Search,查找输入信号所在范围
5,Math Operations(数学模块)
Abs:取绝对值
Algebraic Constraint:输出强制系统输入为零的代数状态
Assignment:对信号进行分配
Bitwise Logical Operator:按位逻辑运算
Combinatorial Logic:逻辑真值查找
Complex to Magnitude-Angle:输出输入复数的幅值与相位
Complex to Real-Imag:输出系统输入的实部或虚部
Dot Product:点乘运算
Gain:比例运算(信号增益)
Logical Operator:信号逻辑运算
Magnitude-Angle to Complex:幅值与相位转化为复数形

Math Function:特定的一些数学函数,包括指数函数、
对数函数、求平方、开根号等常用 数学函数
Matrix Concatenation:矩阵串联器
Matrix Gain:矩阵增益
MinMax:最值运算
Polynomial:多项式求值
Product,乘运算
Real-Imag to Complex:从输入实部与虚部构造复数
Relational Operator:关系运算器
Reshape:信号维数改变器
Rounding Function:求整运算
Sign:符号函数
Slider Gain:渐变增益
Sum:加减运算
Trigonometric Function:三角函数,包括正弦、余弦、正
切等
Logical Operator:逻辑运算
Relational Operator:关系运算
Complex to Magnitude-Angle:由复数输入转为幅值和相
角输出
Magnitude-Angle to Complex:由幅值和相角输入合成复
数输出
Complex to Real-Imag:由复数输入转为实部和虚部输出
Real-Imag to Complex:由实部和虚部输入合成复数输出
6,Model Verification(模型校验 )
Assertion,标注输入非零
Check Discrete Gradient,检验离散度
Check Dynamic Gap,检验动态间隙
Check Dynamic Range,检验动态范围
Check Static Gap, 检验静态间隙
Check Static Range, 检验静态范围
Check Dynamic Lower Bound, 检验动态下限
Check Dynamic Upper Bound, 检验动态上限
Check Input Resolution:, 检验输入分辨率
Check Static Lower Bound, 检验静态下限
Check Static Upper Bound, 检验静态上限
7,Model-Wide Utilities(模型信号宽度)
Docblock,文字说明
Model Info,模块控制信息
Timed-Based Linearization,定时器参数设置
Trigger-Based Linearization,触发器触发方式
8,Ports&Subsystems(端口和子系统 )
Configurable Subsystem,可配置子系统
Atomic Subsystem,原子子系统
Enabled Subsystem,使能子系统
Enabled and Triggered Subsystem,使能触发子系统
For Iterator Subsystem,For循环子系统
Function-Call Generator,函数调用发生器
Function-Call Subsystem, 函数调用子系统
If Action Subsystem,If 条件子系统
In1:输入端。
Out1:输出端。
Subsystem,条件执行子系统
Subsystem examples,通用子系统
Switch Case, Switch Case子系统
Switch Case Action Subsystem,Switch Case动作子系

Triggered Subsystem:触发子系统
While Iterator Subsystem:当型循环子系统
9,Signal Attributes(信号属性模块) sigsys.mdl
Data Type Conversion:数据类型转换器
IC:初始化信号
Probe:信号探测器
Rate Transition:速率转换器
Signal Specification:信号线属性修改
Width1:输入信号宽度
10,Signal Routing(信号路由 )
Bus Creator:由输入产生总线信号
Bus Selector,总线信号选择器
Data Store Memory,用户定义的数据存储区
Data Store Read,从数据存储区读出数据
Data Store Write,向数据存储区写入数据
Demux,信号分解器
From,从 Goto模块中获得信号
Goto,向 Goto模块传递信号
Goto Tag Visibility,Goto模块标记控制器
Manual Switch:双输出选择器(手动)
Merge:合并输入信号为一个输出
Multiport Switch,多端口输出选择器
Mux,信号组合器
Selector,选择或重组信号
Switch,三路选择器(根据输入 2控制输出)
11,Sinks(系统输出模块)
Display,以数值形式显示输入信号
Floating Scope:悬浮信号显示器(不需任何连线,可显示
任何指定信号)
Out1,为子系统或其它模型提供输出端口
Scope:示波器
Stop Simulation:当输入非零时停止仿真
Terminator:信号终结器(防止输出信号无连接)
To File(.mat):将 仿真 输出写入 (.mat)数据文件
To Workspace:将 仿真 输出写入 MATLAB的工作空间
XY Graph:使用 MATLAB图形显示二维图形
12,Sources(输入源模块)
Band-Limited White Noise:有限带宽白噪声
Chirp Signal:输出频率随时间线性变换的正弦信号
Clock:仿真时钟信号(输出每个仿真步点的时刻)
Constant:常数信号(数值可设置)
Digital Clock,以固定速率输出当前仿真时间
From Workspace:来自 MATLAB的工作空间输入数据
From File(.mat):来自数据文件,mat中输入数据
Ground,接地信号
In1,为子系统或其它模型提供输入端口
Pulse Generator:脉冲发生器
Ramp,斜坡信号 发生器
Random Number:服从高斯分布的随机信号发生器
Repeating Sequence:周期信号 发生器
Signal Generator:信号发生器,可以产生正弦、方波、锯齿
波及随意波。
Signal Builder:时序波形生成器
Sine Wave:正弦波信号 发生器
Step:阶跃波信号 发生器
Uniform Random Number:服从均匀分布的随机信号发生器
13,User-Defined Function(用户定义模块)
Fcn:用自定义的函数(表达式)进行运算
MATLAB Fcn:利用 matlab的现有函数进行运算(对输入
进行运算输出结果)
S-Function:调用自编的 S-函数模块进行运算
S-Function Builder,S-函数生成器
四,SIMULINK简单模型的建立及模型特点
1、简单模型的建立
( 1)建立模型窗口
( 2)将功能模块由模块库窗口复制到模型窗口
( 3)对模块进行连接,从而构成需要的系统模型
exp06_01.mdl
2、模型的特点
?在 SIMULINK里提供了许多如 Scope的接收器模块,
这使得用 SIMULNK进行仿真具有像做实验一般的图形
化显示效果。
?SIMULINK的模型具有层次性,通过底层子系统可以
构建上层母系统。
?SIMULINK提供了对子系统进行封装的功能,用户可
以自定义子系统的图标和设置参数对话框。
第二节 SIMULINK功能模块的处理
? 模块库中的模块可以直接用鼠标进行拖曳(选中模
块,按住鼠标左键不放)而放到模型窗口中进行处
理。
? 在模型窗口中,选中模块,则其 4个角会出现黑色标
记。此时可以对模块进行以下的基本操作。
功能模块的基本操作,包括模块的移动、复制、删除、
转向、改变大小、模块命名、颜色设定、参数设定、
属性设定、模块输入输出信号等。
1)移动:选中模块,按住鼠标左键将其拖曳到所需的位置
即可。若要脱离线而移动,可按住 shift键,再进行拖曳。
2)复制:选中模块,然后按住鼠标右键进行拖曳即可复
制同样的一个功能模块。
3)删除:选中模块,按 Delete键即可。若要删除多个模块,
可以同时按住 Shift键,再用鼠标选中多个模块,按
Delete键即可。也可以用鼠标选取某区域,再按 Delete
键就可以把该区域中的所有模块和线等全部删除。
4)转向:为了能够顺序连接功能模块的输入和输出端,
功能模块有时需要转向。在菜单 Format中选择 Flip
Block旋转 180度,选择 Rotate Block顺时针旋转 90度。
或者直接按 Ctrl+F键执行 Flip Block,按 Ctrl+R键执行
Rotate Block。
5)改变大小:选中模块,对模块出现的 4个黑色标记进行拖
曳即可。
6)模块命名:先用鼠标在需要更改的名称上单击一下,然
后直接更改即可。名称在功能模块上的位置也可以变换
180度,可以用 Format菜单中的 Flip Name来实现,也可以
直接通过鼠标进行拖曳。 Hide Name可以隐藏模块名称。
7)颜色设定,Format菜单中的 Foreground Color可以改变模
块的前景颜色,Background Color可以改变模块的背景颜
色;而模型窗口的颜色可以通过 Screen Color来改变。
8)参数设定:用鼠标双击模块,就可以进入模块的参数
设定窗口,从而对模块进行参数设定。参数设定窗口
包含了该模块的基本功能帮助,为获得更详尽的帮助,
可以点击其上的 help按钮。通过对模块的参数设定,
就可以获得需要的功能模块。
9)属性设定:选中模块,打开 Edit菜单的 Block
Properties可以对模块进行属性设定。包括 Description
属性,Priority优先级属性,Tag属性,Open function
属性,Attributes format string属性。其中 Open function
属性是一个很有用的属性,通过它指定一个函数名,
则当该模块被双击之后,Simulink就会调用该函数执
行,这种函数在 MATLAB中称为回调函数。
10)模块的输入输出信号:模块处理的信号包括 标量信号
和 向量信号 ;标量信号是一种单一信号,而向量信号为
一种复合信号,是多个信号的集合,它对应着系统中几
条连线的合成。缺省情况下,大多数模块的输出都为标
量信号,对于输入信号,模块都具有一种“智能”的识
别功能,能自动进行匹配。某些模块通过对参数的设定,
可以使模块输出向量信号。
例 exp06_02.mdl exp06_03.mdl
第三节 SIMULINK线的处理
? 改变粗细:线所以有粗细是因为线引出的信号可以是
标量信号或向量信号,当选中 Format菜单下的 Wide
nonscalar lines时,线的粗细会根据线所引出的信号是
标量还是向量而改变,如果信号为标量则为细线,若
为向量则为粗线。选中 Wide nonscalar lines则可以显
示出向量引出线的宽度,即向量信号由多少个单一信
号合成。
exp06_04.mdl
SIMULINK模型的构建是通过用线将各种功能模块进行
连接而构成的。用鼠标可以在功能模块的输入与输出端
之间直接连线。所画的线可以改变粗细、设定标签,也
可以把线折弯、分支。
?设定标签:只要在线上双击鼠标,即可输入该线的
说明标签。也可以通过选中线,然后打开 Edit菜单下
的 Signal Properties进行设定,其中 signal name属性的
作用是标明信号的名称,设置这个名称反映在模型上
的直接效果就是与该信号有关的端口相连的所有直线
附近都会出现写有信号名称的标签。
?线的折弯:按住 Shift键,再用鼠标在要折弯的线处
单击一下,就会出现圆圈,表示折点,利用折点就可
以改变线的形状。
?线的分支:按住鼠标右键,在需要分支的地方拉出
即可以。或者按住 Ctrl键,并在要建立分支的地方用
鼠标拉出即可。
第四节 SIMULINK自定义子系统模块
自定义子系统模块有两种方法,
一种方法是采用 Ports&Subsystems 模块库中的 Subsystem
功能模块,利用其编辑区设计组合新的功能模块;
另一种方法是将现有的多个功能模块组合起来,形成新
的功能模块。对于很大的 SIMULINK模型,通过自定义
功能模块可以简化图形,减少功能模块的个数,有利于
模型的分层构建。
一、方法 1 exp06_05.mdl
1) 将 Ports&Subsystems 模块库中的 Subsystem功能模块复制
到打开的模型窗口中。
2) 双击 Subsystem功能模块,进入自定义功能模块窗口,从
而可以利用已有的基本功能模块设计出新的功能模块。
二、方法 2 exp06_06.mdl
1) 在模型窗口中建立所定义功能模块的子模块。
2) 用鼠标将这些需要组合的功能模块框住,然后选择
Edit菜单下的 Create Subsystem即可。
三、自定义 子系统 模块的封装
? 封装 子系统具有以下特点:
自定义 子系统 模块及其图标。
用户双击封装后的图标时显示 子系统 参数设置对话框。
用户自定义 子系统 模块的帮助文档。
? 上面提到的两种方法都只是创建一个功能模块,如果要命
名该自定义模块、对模块进行说明、选定模块外观、设定
输入数据窗口,则需要对其进行封装处理。
? 使用封装 子系统,可以隐藏子系统模块中不需要过多展现的
内容,同时也可保护子系统,防止模块实现被随意修改。
自定义 子系统 模块封装方法
exp06_07.mdl exp06_08.mdl exp06_09.mdl exp06_10.mdl
首先选中 Subsystem功能模块,再打开 Edit菜单中的 Mask
Subsystem进入 mask的编辑窗口,可以看出有 3个标签页。
1)Icon:设定功能模块的外观。
2)Initialization:设定输入数据窗口。
3)Documentation:设计该功能模块的文字说明。
1、图标( Icon)标签页
? 在默认情况下,封装子系统使用默认图标( port label)。
通过设置不同的参数可使模块图标具有不同的显示形式,
? 用户可自定义图标。在 Drawing Commands区域内用 disp
指令设定功能模块的文字名称,用 plot指令画线,用
dpoly指令画转换函数。
? 注意,尽管这些命令在名字上和以前讲的 MATLAB函数
相同,但它们在功能上却不完全相同,因此不能随便套
用以前所讲的格式。
? 用户还可以设置一些参数来控制图标的属性,这些属性在
Icon页右下端的下拉式列表中进行选择。
a) Icon frame,Visible 显示外框线; Invisible:隐藏外框线。
b) Icon Transparency,Opaque 隐藏输入输出的标签;
Transparent(透明 )显示输入输出的标签。
c) Icon Rotation:旋转模块固定 (Fixed)或旋转 (Rotates)。
d) Units:画图时的坐标系单位设置:自动缩放( Autoscale)
像素( Pixels)归一化表示( Normalized)。
2、参数设置( parameters) 标签页
? 参数设置:包括 Add,Delete,Up,Down
? 参数描述 (Prompt):输入变量的含义,简单说明参数的意
义或作用。
? 参数对应变量名称 (Variable):对应的变量名称,仿真要用
到的变量,该变量的值一直存于 mask workspace中,因此
可以与其他程序相互传递。在此使用的变量必须与子系统
中所使用的变量具有相同的名称。
? 参数控制类型( Type):包括 Edit( 用户键入参数)、
Checkbox( 复选框,表示逻辑值),Popup( 弹出多个参
数选项以供选择取值)
? 参数分配类型( Type)( Evaluate)表示在 Edit栏中键入的
表达式是作为求值字符串还是普通文字字符串。 (Tunable)
表示参数是否可调
a) 在 prompt编辑框中输入文字,这些文字就会出现在
prompt列表中;在 variable列表中输入变量名称,则
prompt中的文字对应该变量的说明。如果要增加新
的项目,可以点击边上的 Add键。 Up和 Down按钮
用于执行项目间的位置调整。
b) Type列表给用户提供选择设计的编辑区,选择
Popup在下面会出现 Popup strings输入框,用来设计
选择的内容。用户输入相关参数,所选的值代表
variable。
2、初始化( Initialization)标签页
? 对应的变量名称( dialog variable):应与前面设置相同。
? 初始化命令( initialization commands):为一般的
MATLAB命令,在此可以定义封装后子系统工作空间中
的各种变量,这些变量可以被封装子系统模块图标绘制
命令、其它初始化命令或子系统中的模块使用。当出现
以下情况时,Simulink开始执行 初始化命令:
( 1)模型文件被载入
( 2)框图被更新或模块被旋转
( 3)绘制封装子系统模块图标时。
3,Documentation标签页
? 此页主要用来针对完成的功能模块来编写相应的说明
文字和 Help。
a) Mask type:在此处输入的文字作为封装模块的标注性
说明,在模型窗口下,将鼠标指向模块,则会显示该
文字。
b) 在 Block description中输入的文字,会出现在参数窗口
的说明部分。
c) 在 Block help中输入的文字则会显示在单击参数窗口中
的 help按钮后浏览器所加载的 HTML文件中。
第五节 SIMULINK仿真的运行
构建好一个系统的模型之后,接下来的事情就是运行
模型,得出仿真结果。运行一个仿真的完整过程分成
三个步骤:
设置仿真参数
启动仿真
仿真结果分析
一、设置仿真参数和选择解法器
? 设置仿真参数和选择解法器,选择 Simulation菜单下
的 Parameters命令,就会弹出一个仿真参数对话框,
它主要用三个页面来管理仿真的参数。
I,Solver页,它允许用户设置仿真的开始和结束时间,
选择解法器,说明解法器参数及选择一些输出选项。
II,Workspace I/O页,作用是管理模型从 MATLAB工作
空间的输入和对它的输出。
III,Diagnostics页,允许用户选择 Simulink在仿真中显示
的警告信息的等级。
1、解法器参数设置( Solver)
? 此页可以进行的设置有:选择仿真开始和结束的时间;
选择解法器,并设定它的参数;选择输出项。
1) 仿真时间,注意这里的时间概念与真实的时间并不一
样,只是计算机仿真中对时间的一种表示,比如 10秒
的仿真时间,如果采样步长定为 0.1,则需要执行 100
步,若把步长减小,则采样点数增加,那么实际的执
行时间就会增加。 Simulink默认的 仿真开始时间为 0,
结束时间为 10s。实际中可根据需要设置合适的仿真时
间。总的说来,执行一次仿真要耗费的时间依赖于很
多因素,包括模型的复杂程度、解法器及其步长的选
择、计算机时钟的速度等等。
仿真步长模式,用户在 Type后面的第一个下拉选项框
中指定仿真的步长选取方式,可供选择的有
Variable-step(变步长)和 Fixed-step(固定步长)
方式。变步长模式可以在仿真的过程中改变步长,
提供误差控制和过零检测。固定步长模式在仿真过
程中提供固定的步长,不提供误差控制和过零检测。
用户还可以在第二个下拉选项框中选择对应模式下
仿真所采用的算法。
?变步长模式解法器有,ode45,ode23,ode113,
ode15s,ode23s,ode23t,ode23tb和 discrete。
a) ode45:缺省值,四 /五阶龙格-库塔法,适用于大多数连续或
离散系统,但不适用于刚性( stiff)系统。它是单步解法器,
也就是,在计算 y(tn)时,它仅需要最近处理时刻的结果 y(tn-1)。
一般来说,面对一个仿真问题最好是首先试试 ode45。
b) ode23:二 /三阶龙格-库塔法,它在误差限要求不高和求解的
问题不太难的情况下,可能会比 ode45更有效。也是一个单步
解法器。
c) ode113:是一种阶数可变的解法器,它在误差容许要求严格的
情况下通常比 ode45有效。 ode113是一种多步解法器,也就是在
计算当前时刻输出时,它需要以前多个时刻的解。
d) ode15s:是一种基于数字微分公式的解法器( NDFs)。也是一
种多步解法器。适用于刚性系统,当用户估计要解决的问题是
比较困难的,或者不能使用 ode45,或者即使使用效果也不好,
就可以用 ode15s。
e) ode23s:它是一种单步解法器,专门应用于刚性系统,
在弱误差允许下的效果好于 ode15s。它能解决某些 ode15s
所不能有效解决的 stiff问题。
f) ode23t:是梯形规则的一种自由插值实现。这种解法器适
用于求解适度 stiff的问题而用户又需要一个无数字振荡的
解法器的情况。
g) ode23tb:是 TR-BDF2的一种实现,TR-BDF2 是具有两
个阶段的隐式龙格-库塔公式。
h) discrtet:当 Simulink检查到模型没有连续状态时使用它。
? 固定步长模式解法器有,ode5,ode4,ode3,ode2,ode1和
discrete。
a) ode5:缺省值,是 ode45的固定步长版本,适用于大多数连续或
离散系统,不适用于刚性系统。
b) ode4:四阶龙格-库塔法,具有一定的计算精度。
c) ode3:固定步长的二 /三阶龙格-库塔法。
d) ode2:改进的欧拉法。
e) ode1:欧拉法。
f) discrete:是一个实现积分的固定步长解法器,它适合于离散无
连续状态的系统。
3) 步长参数,对于变步长模式,用户可以设置最大的和推荐的初
始步长参数,缺省情况下,步长自动地确定,它由值 auto表示。
a) Maximum step size(最大步长参数):它决定了解法器能够使
用的最大时间步长,它的缺省值为“仿真时间 /50”,即整个仿
真过程中至少取 50个取样点,但这样的取法对于仿真时间较长
的系统则可能带来取样点过于稀疏,而使仿真结果失真,或造
成仿真输出曲线的不光滑。一般建议对于仿真时间不超过 15s
的采用默认值即可,对于超过 15s的每秒至少保证 5个采样点,
对于超过 100s的,每秒至少保证 3个采样点。
b) Initial step size(初始步长参数):一般建议使用,auto”默认
值即可。
4) 仿真精度的定义(对于变步长模式)
a) Relative tolerance(相对误差):它是指误差相
对于状态的值,是一个百分比,缺省值为 1e-3,
表示状态的计算值要精确到 0.1%。
b) Absolute tolerance(绝对误差):表示误差值的
门限,或者是说在状态值为零的情况下,可以接
受的误差。如果它被设成了 auto,那么 simulink
为每一个状态设置初始绝对误差为 1e-6。
5) Mode(固定步长模式选择)
a) Multitasking:选择这种模式时,当 simulink检测到
模块间非法的采样速率转换,它会给出错误提示。
所谓的非法采样速率转换指两个工作在不同采样
速率的模块之间的直接连接。在实时多任务系统
中,如果任务之间存在非法采样速率转换,那么
就有可能出现一个模块的输出在另一个模块需要
时却无法利用的情况。通过检查这种转换,
Multitasking将有助于用户建立一个符合现实的多
任务系统的有效模型。
使用速率转换模块可以减少模型中的非法速率转换。
Simulink提供了两个这样的模块,unit delay模块和
zero-order hold模块。对于从慢速率到快速率的非法
转换,可以在慢输出端口和快输入端口插入一个单
位延时 unit delay模块。而对于快速率到慢速率的转
换,则可以插入一个零阶采样保持器 zero-order hold。
b) Singletasking:这种模式不检查模块间的速率转换,
它在建立单任务系统模型时非常有用,在这种系统
就不存在任务同步问题。
c) Auto:这种模式,simulink会根据模型中模块的采样
速率是否一致,自动决定切换到 multitasking和
singletasking。
6) 输出选项
a) Refine output:这个选项可以理解成精细输出,其意
义是在仿真输出太稀松时,simulink会产生额外的精
细输出,这一点就像插值处理一样。用户可以在
refine factor设置仿真时间步间插入的输出点数。产生
更光滑的输出曲线,改变精细因子比减小仿真步长更
有效。精细输出只能在 变步长模式 中才能使用,并且
在 ode45效果最好。
b) Produce additional output:它允许用户直接指定产生
输出的时间点。一旦选择了该项,则在它的右边出
现一个 output times编辑框,在这里用户指定额外的
仿真输出点,它既可以是一个时间向量,也可以是
表达式。与精细因子相比,这个选项会改变仿真的
步长。
c) Produce specified output only:它的意思是让 simulink
只在指定的时间点上产生输出。为此解法器要调整
仿真步长以使输出和指定的时间点重合。这个选项
在比较不同的仿真时可以确保它们在相同的时间输
出。
2、仿真数据的输入输出设置( Workspace I/O)
? 此页主要用来设置 SIMULINK与 MATLAB工作空间交
换数值、解决数值存取的有关选项。
1) Load from workspace,选中前面的复选框即可从
MATLAB工作空间获取时间和输入变量,一般时间变
量定义为 t,输入变量定义为 u。 Initial state用来定义
从 MATLAB工作空间获得模型状态初始值的变量名,
而不管构作该模型的积分块是否设置过什么样的初始
值。该栏空白处填写的变量名(默认 xInitial)应是工
作空间中存在的变量。该变量所包含着模型状态向量
的初始值。
2) Save to workspace,将输出保存在 MATLAB工作空间。
选中变量类型前的复选框使相应的变量有效。一般存
往工作空间的变量包括:
输出时间向量( Time):模型把时间独立变量以指定的
变量名保存在工作空间
状态向量( States):模型把状态变量以指定的变量名保
存在工作空间
输出变量( Output):模型把输出数据变量以指定的变量
名保存在工作空间
Final state,用指定变量名称将系统最终稳态值存往工作
空间。
3) Save option,设置存往工作空间的有关选项。必须与
Save to workspace 配合使用。 Limit data points to last用来
设定 SIMULINK仿真结果最终可存往 MATLAB工作空间
的变量的规模,对于向量而言即其维数,对于矩阵而言
即其秩,默认值为 1000; Decimation设定了一个亚采样
因子,它的缺省值为 1,也就是对每一个仿真时间点产生
值都保存,若取 n,则是每隔( n-1)个仿真时刻才保存
一个值。 Format用来说明保存数据的格式,包括矩阵
Array、结构 struct及带时间的结构 struct with time。
3、仿真中异常情况的诊断( Diagnostics)
? 能自动诊断 22种异常情况,例如:
Algebraic loop,代数环异常,即无惯性、无延迟,环中每个模块
输入与输出间都包含代数关系。它会大大减慢仿真速度,进
而可能导致仿真失败。
Min step size violation,最小步长欠小,表明微分方程 解法器为达
到指定精度需要更小的 步长,但这是 解法器所不允许的。须
采用更高阶解法器。
Unconnected block input,模块输入悬空
Unconnected block output,模块输出悬空
Unconnected line,信号线未接
Disable zero crossing detection,对不连续点进行零点穿越检测,
可提高仿真准确性,但会降低仿真速度。
?除了上述 3个主要的页外,仿真参数设置窗口还包括 real-
time workshop页,主要用于与 C语言编辑器的交换,通
过它可以直接从 SIMULINK模型生成代码并且自动建立
可以在不同环境下运行的程序,这些环境包括实时系统
和单机仿真。
? 此页分成两个部分:仿真选项 (simulation options)和配置
选项 (Configuration options)。配置选项下的列表框主要列
举了一些常见的异常事件类型,以及当 SIMULINK检查到
这些事件时给予的处理。仿真选项包括是否进行一致性
检验、是否进行不同版本的 SIMULINK的检验等几项。对
于每一种异常,SIMULINK提供了三种可能的处理方法:
None( 忽略) Warning( 警告) Error( 终止仿真)
二、启动仿真
? 设置仿真参数和选择解法器之后,就可以启动仿真
而运行。
? 选择 Simulink菜单下的 start选项来启动仿真,如果
模型中有些参数没有定义,则会出现错误信息提示
框。如果一切设置无误,则开始仿真运行。
exp06_11mdl exp06_12mdl exp06_13mdl
第六节 SIMULINK s-函数( System Function)
Simulink为用户提供了许多内置的基本库模块,通过这
些模块进行连接而构成系统的模型。对于那些经常使
用的模块进行组合并封装可以构建出重复使用的新模
块,但它依然是基于 Simulink原来提供的内置模块。
而 Simulink s-函数是一种强大的对模块库进行扩展的新
工具。
一,s-function的概念
? s-function是 采用 计算机语言描述的一个功能块,在
MATLAB里,用户可以选择用 m文件编写,也可以用 c
或 c++等 文件编写。
? S-function提供了扩展 Simulink模块库的有力工具,它
采用一种特定的调用语法,使函数和 Simulink解法器
进行交互。
? S-function最广泛的用途是定制用户自己的 Simulink模
块。它的形式十分通用,能够支持连续系统、离散系
统和混合系统。
二,s-function的特点:
? s-function为 Simulink的“系统”函数;
? 能够响应 Simulink求解器命令的函数;
? 采用非图形化的方法实现一个动态系统;
? 可以开发新的 Simulink模块;
? 可以与已有的代码相结合进行仿真;
? 采用文本方式输入复杂的系统方程;
? 扩展 Simulink功能,例如扩展图形能力,提供与操作系
统的接口等。
三,s-function的应用场合:
s-function最通常的用法是创建一个定制的 simulink模块。
可以在很多应用程序中使用 s-function,包括:
? 生成用户自己研究中有可能经常反复调用的 s函数模块;
? 生成某硬件装置的 s函数模块;
? 把已存在的 C代码程序构造成 s函数模块;
? 为一组数学方程所描写的系统,构建一个专门的 s函数
模块;
? 构建用于图形动画表现的 s函数模块
四、建立 m文件 s-function
1、使用模板文件,sfuntmp1,m
? 该模板文件位于 MATLAB根目录下
toolbox/simulink/blocks目录下。
? 模板文件里 s-function的结构简单,它只为不同的
flag的值指定要相应调用的 m文件子函数。比如当
flag=3时,即模块处于计算输出这个仿真阶段时,
相应调用的子函数为 sys=mdloutputs(t,x,u)。
?模板文件使用 switch语句来完成这种指定,当然这种结
构并不唯一,用户也可以使用 if语句来完成同样的功能。
而且在实际运用时,可以根据实际需要来去掉某些值,
因为并不是每个模块都需要经过所有的子函数调用。
?模板文件只是 Simulink为方便用户而提供的一种参考格
式,并不是编写 s-function的语法要求,用户完全可以改
变子函数的名称,或者直接把代码写在主函数里,但使
用模板文件的好处是,比较方便,而且条理清晰。
? 使用模板编写 s-function,用户只需把 s-函数名换成期
望的函数名称,如果需要额外的输入参量,还需在输
入参数列表的后面增加这些参数,因为前面的 4个参
数是 simulink调用 s-function时自动传入的。对于输出
参数,最好不做修改。接下去的工作就是根据所编 s-
function要完成的任务,用相应的代码去替代模板里各
个子函数的代码即可。
? Simulink在每个仿真阶段都会对 s-function进行调用,
在调用时,Simulink会根据所处的仿真阶段为 flag传入
不同的值,而且还会为 sys这个返回参数指定不同的角
色,也就是说尽管是相同的 sys变量,但在不同的仿真
阶段其意义却不相同,这种变化由 simulink自动完成。
?m文件 s-function可用的子函数说明如下:
a)mdlInitializeSizes:定义 s-function模
块的基本特性,包括采样时间、连续或者离散状态
的初始条件和 sizes数组。
b)mdlDerivatives:计算连续状态变量的微分方
程。
c)mdlUpdate:更新离散状态、采样时间和主时间
步的要求。
d)mdlOutputs:计算 s-function的输出。
e) mdlGetTimeOfNextVarHit:计算下一个采样点
的绝对时间,这个方法仅仅是在用户在
mdlInitializeSizes 里说明了一个可变的离散
采样时间。
f) mdlTerminate:实现仿真任务必须的结束。
概括说来,建立 s-function可以分成两个分离的任务:
a) 初始化模块特性包括输入输出信号的宽度,离散连
续状态的初始条件和采样时间。
b) 将算法放到合适的 s-function子函数中去。
2、定义 s-function的初始信息
? 为了让 Simulink识别出一个 m文件 s-function,用户
必须在 s-函数里提供有关 s-函数的说明信息,包括
采样时间、连续或者离散状态个数等初始条件。这
一部分主要是在 mdlInitializeSizes子函数里
完成。
? Sizes数组是 s-function函数信息的载体,它内
部的字段意义为:
a) NumContStates:连续状态的个数(状态向量连续
部分的宽度)
b) NumDiscStates:离散状态的个数(状态向量离散
部分的宽度)
c) NumOutputs,输出变量的个数(输出向量的宽度)
d) NumInputs:输入变量的个数(输入向量的宽度)
e) DirFeedthrough:有无直接馈入
f) NumSampleTimes:采样时间的个数
? 如果字段代表的向量宽度为动态可变,则可以将它们
赋值为- 1。
? 注意 DirFeedthrough是一个布尔变量,它的取值只有 0
和 1两种,0表示没有直接馈入,此时用户在编写
mdlOutputs子函数时就要确保子函数的代码里不出现
输入变量 u; 1表示有直接馈入。
? NumSampleTimes表示采样时间的个数,也就是 ts变
量的行数,与用户对 ts的定义有关。
? 需要指出的是,由于 s-function会忽略端口,所以当有
多个输入变量或多个输出变量时,必须用 mux模块或
demux模块将多个单一输入合成一个复合输入向量或
将一个复合输出向量分解为多个单一输出。
3、输入和输出参量说明
? S-function默认的 4个输入参数为 t,x,u和 flag,它们
的次序不能变动,代表的意义分别为:
a) t:代表当前的仿真时间,这个输入参数通常用于决定
下一个采样时刻,或者在多采样速率系统中,用来区
分不同的采样时刻点,并据此进行不同的处理。
b) x,表示状态向量,这个参数是必须的,甚至在系统
中不存在状态时也是如此。它具有很灵活的运用。
c) u:表示输入向量。
d) flag:是一个控制在每一个仿真阶段调用哪一个子函
数的参数,由 Simulink在调用时自动取值。
? S-function默认的 4个返回参数为 sys,x0,str和 ts,它们
的次序不能变动,代表的意义分别为:
a) sys:是一个通用的返回参数,它所返回值的意义取决于
flag的值。
b) x0,是初始的状态值(没有状态时是一个空矩阵 []),
这个返回参数只在 flag值为 0时才有效,其他时候都会被
忽略。
c) str:这个参数没有什么意义,是 MathWorks公司为将来
的应用保留的,m文件 s-function必须把它设为空矩阵。
d) ts:是一个 m× 2的矩阵,它的两列分别表示采样时间间
隔和偏移。 Exp,timestwo.m
第七节 SIMULINK 仿真举例
Exp06_14.m,使用 S-function(timestwo)实现系统 y=2*u。
Exp06_15.m,利用 SIMULINK进行时域系统分析 。
Exp06_16.m,利用 SIMULINK进行时域系统分析 。
Exp06_17.m,利用 SIMULINK求解电路。
Exp06_18.m,利用 SIMULINK设计一个时钟脉冲控制的
RS触发器。
第八节 线性时不变系统浏览器 LTI Viewer
? 使用 SIMULINK中的线性时不变系统浏览器 LTI
Viewer(Linear Time-Invariant)可以绘制不同的系统响应
曲线。默认情况下,LTI Viewer绘制系统在单位阶跃
信号输入下的系统响应曲线(单位阶跃响应)。
? 在 LTI Viewer图形绘制窗口中 单击鼠标右键,选择弹
出菜单 Plot Type下的子菜单,可以在 LTI Viewer图形
绘制窗口中 绘制不同的系统响应曲线,如:阶跃响应
(Step),脉冲响应 (Impulse),波特图 (Bode),波特图幅
值 (Bode Mag),奈奎斯特图 (Nyquist),尼科尔斯图
(Nichols),奇异值分析 (Sigma),零极点图 (Pole/Zero)。
一、绘制系统的不同响应曲线
用 LTI Viewer浏览器绘制各种系统响应曲线的步骤:
1、在系统模型中,选择 Tools菜单下的 Linear Analysis命令
加入输入参考点 Input Point和输出参考点 Outpur point。
注意:输入参考点和输出参考点有可能与系统模型的系统输入与系
统输出不相同,这取决于所要分析的系统或系统中的某一部分。
2、选择 LTI Viewer窗口中 Edit菜单下的 Plot configuration
命令对 选择 LTI Viewer窗口的曲线绘制图形及布局进行
选择。用户可以同时绘制 6幅不同的响应曲线。
3、设置系统模型的操作点(控制参数设置)。选择 LTI
Viewer窗口中 Simulink菜单下的 Set Operating Point命令
设置。对于不同的操作点,系统的响应可能大不相同,
甚至造成系统的不稳定。
( exp06_19.m )
二、系统时域与频域性能分析
使用 LTI Viewer不仅可以绘制系统的各种响应曲线,还可
以从系统响应曲线中获得系统响应信息:
1、单击曲线上任一点,可以获得动态系统在此时此刻的所
有信息,包括所对应的系统运行时刻( Time), 系统输
入值( Amplitude) 等信息。
2、在 LTI Viewer图形绘制窗口中 单击鼠标右键,选择弹出
菜单 Characteristics下的子菜单,可以在图形上获得系统
不同响应的特性参数,对于不同的系统响应类型,
Characteristics下的子菜单的内容也不相同。如阶跃响应
的特性参数为,Peak Response ( 响应峰值) Setting Time
( 稳定时刻) Rise Time( 上升时间) Steady State( 稳
定状态)
三,LTI Viewer图形界面的控制
对 LTI Viewer图形窗口的控制有两种方式:
1、对整个浏览器窗口 Viewer进行控制:单击 LTI Viewer窗
口 Edit菜单下的 Viewer Preferences命令对浏览器 进行设
置(设置的作用范围为 LTI Viewer窗口以及所有系统响
应曲线绘制区域)。对话框中有以下选项:
( 1) Units,设置图形显示时频率、幅值及相位的单位
( 2) Style,设置图形显示时的字体、颜色及绘图网格
( 3) Characteristics, 设置系统响应曲线的特性参数
( 4) Paramerters, 设置系统响应输出的时间变量与频率
变量
2、对某一系统响应曲线绘制窗口进行操作:在系统响
应曲线绘制窗口中单击鼠标右键,选择弹出菜单中的
Properties对指定响应曲线的显示进行设置:
( 1) Labels,设置响应曲线图形窗口的坐标、窗口名称
( 2) Limits, 设置坐标轴的输出范围
( 3) Units, 设置响应曲线图形窗口的显示单位
( 4) Style, 设置图形显示时的字体、颜色及绘图网格
( 5) Characteristics, 设置系统响应曲线的特性参数
exp06_20.m
第九节 线性控制系统设计工具( SISO设计器)
SIMULINK中,线性时不变系统浏览器 LTI viewer是进
行系统线性分析的最为直观的图形界面,使用 LTI
viewer使得用户对系统的线性分析变得简单而直观。
其实 LTI viewer只是控制系统工具箱中所提供的较为
简单的工具,主要用来完成系统的分析与线性化处理,
而并非系统设计。
SISO设计器是 MATLAB控制系统工具箱所提供的一个
非常强大的单输入单输出线性系统设计器, 它为用户
设计单输入单输出线性控制系统提供了非常友好的图
形界面 。 在 SISO设计器中, 用户可以同时使用根轨迹
图与波特图, 通过修改线性系统零点, 极点以及增益
等传统设计方法进行 SISO线性系统设计 。 基本设计方
法包括:
1,启动 SIS0设计器
在 MATLAB命令窗口中键入如下的命令启动 SISO设计器:
>>sisotool
启动 SIS0设计器 。
在默认的情况下, SISO设计器同时启用系统根轨迹编
辑器与开环波特图编辑器 。 此时尚未进行系统设计, 故
不显示根轨迹与开环波特图 。
2.输入系统数据( Import System Data)
在 启动 SIS0设计器之后需要为所设计的线性系统输入数据,
选择 SIS0设计器中 File菜单下的 Import命令,在显示对
话框中完成线性系统数据输入。
? 注意:如果数据来源为 Simulink系统模型框图,则必须
对其进行线性化处理以获得 LTI对象描述。因为 SISO系
统中的所有对象( G执行部件,H传感器,F预滤波器、
C补偿器)均为 LTI(线性时不变 )对象。另外,用户可单
击控制系统结构右下方的 Other按钮改变控制系统结构。
Exp06_21.m
使用系统默认的控制系统结构,并设置控制系统的执行结
构(控制对象)数据 G为 ( 2s+1) /(s^2+3s+2),其它的
参数 H,F,C 均使用默认的取值(常数 1)。然后单击
OK按钮,此时在 SISO设计器中会自动绘制此负反馈线
性系统的根轨迹图及系统开环波特图。在系统根轨迹图
中,兰色和表示控制对象 G的零极点,红色表示系统补
偿器 C的零极点。用户可在编辑器中对系统的根轨迹进
行控制与操作。
3.设计与分析系统
? 可使用零极点配置、根轨迹分析以及波特图分析等方法对
线性系统进行设计。除对系统零极点的操作(增加、删除、
改变分布)外,单击补偿器增益及传递函数区域可弹出补
偿器设置对话框,设置补偿器 C的增益、零点、极点等。
? 系统设计完成后,需进一步分析系统的开环或闭环响应,
以确保系统是否满足特定的设计需要。可以选择 SISO设计器
中 Tools菜单下的 Loop Responses绘制指定的 开环或闭环响
应曲线。在打开的 LTI浏览器上,可对系统性能如过度时间、
峰值响应、上升时间等进行分析。
? 如果是设计线性离散系统,可选择 Tools菜单下的
Continuous/Discrete Conversions选项,对离散系统的采
样时间、连续信号的离散化方法等进行设置。
4,SISO设计器与 Simulink的集成 —— 系统验证
使用 SISO完成系统的设计之后,在系统实现之前必须对
设计好的系统进行仿真分析,以确保系统设计的正确性。
如果直接按照系统设计逐步建立系统的 Simulink,将是
一件麻烦的工作; SISO提供了与 Simulink集成的方法,
用户可以直接使用 SISO设计器 Tools菜单下的 Draw
Simulink Diagram直接由设计好的系统生成相应的
Simulink系统框图。在生成 Simulink系统模型之前,必
须保存线性系统的执行结构、补偿器以及传感器等 LTI对
象至 MATLAB工作空间中。
注意:生成的 Simulink系统模型的实现均采用了 MATLAB工
作空间中的 LTI模块 。 在生成 Simulink系统模型之后, 便
可以对设计好的系统进行仿真分析以验证系统设计的正
确性 。 Exp06_22.m
? SIMULINK是 MATLAB的一个扩展软件,它是基于模型
化图型输入的仿真环境。
? 模型化图型输入使用户可以把更多的精力投入到模型
的构建上来,要求熟悉各功能模块库中各子模块的功
能,掌握 SIMULINK环境下模块的操作及线的处理。
? 掌握 SIMULINK解法器的设置。
? S-FUNCTION是扩展 MATLAB函数库的一个实用方法。
? 使用 SIMULINK进行仿真分析的关键是熟练地运用各功
能子模块构建出需要的正确的系统模型并合理地设置
解法器以使仿真得以正常运行。
? SISO设计器为单输入单输出线性控制系统设计提供了
友好的图形界面。配合 Simulink,可对设计好的系统
进行仿真分析以验证系统设计的正确性。
本章小结