CH5,SIMULINK仿真基础
? 在工程实际中,控制系统的结构往往很复杂,如果不借助专
用的系统建模软件,则很难准确地把一个控制系统的复杂模
型输入计算机,对其进行进一步的分析与仿真。
? 1990年,Math Works软件公司为 MATLAB提供了新的控制
系统模型图输入与仿真工具,并命名为 SIMULAB,该工具
很快就在控制工程界获得了广泛的认可,使得仿真软件进入
了 模型化图形组态阶段。但因其名字与当时比较著名的软件
SIMULA类似,所以 1992年正式将该软件更名为 SIMULINK。
? SIMULINK的出现,给控制系统分析与设计带来了福音。顾
名思义,该软件的名称表明了该系统的两个主要功能:
Simu(仿真)和 Link(连接),即该软件可以利用鼠标在模
型窗口上绘制出所需要的控制系统模型,然后利用
SIMULINK提供的功能来对系统进行仿真和分析。
第一节 SIMULINK简介
?SIMULINK是 MATLAB软件的扩展,它是实现动态系统建模和
仿真的一个软件包,它与 MATLAB语言的主要区别在于,其与
用户交互接口是基于 Windows的模型化图形输入,其结果是使得
用户可以把更多的精力投入到系统模型的构建,而非语言的编
程上。
?所谓模型化图形输入是指 SIMULINK提供了一些按功能分类的
基本的系统模块,用户只需要知道这些模块的输入输出及模块
的功能,而不必考察模块内部是如何实现的,通过对这些基本
模块的调用,再将它们连接起来就可以构成所需要的系统模型
(以,mdl文件进行存取),进而进行仿真与分析。
?SIMULINK的最新版本是 SIMULINK4.0(包含在 MATLAB6.0
里),MATLAB5.3里的版本为 3.0版,它们的变化不大。
一、什么是 SIMULINK
2、在 MATLAB命令窗口中输入 simulink3
结果是在桌面上出现一个用图标形式显示的 Library,simulink3的
Simulink模块库窗口。
二,SIMULINK的启动
1、在 MATLAB命令窗口中输入 simulink
结果是在桌面上出现一个称为 Simulink Library Browser的窗口,
在这个窗口中列出了按功能分类的各种模块的名称。
当然用户也可以通过 MATLAB主窗口的快捷按钮来打开
Simulink Library Browser窗口。
两种模块库窗口界面只是不同的显示形式,用户可以根
据各人喜好进行选用,一般说来第二种窗口直观、形象,
易于初学者,但使用时会打开太多的子窗口。
三,SIMULINK的模块库介绍
SIMILINK模块库按功能进行分类,包括以下 8类子库:
Continuous(连续模块)
Discrete(离散模块)
Function&Tables(函数和平台模块)
Math(数学模块)
Nonlinear(非线性模块)
Signals&Systems(信号和系统模块)
Sinks(接收器模块)
Sources(输入源模块)
1、连续模块( Continuous) continuous.mdl
Integrator:输入信号积分
Derivative:输入信号微分
State-Space:线性状态空间系统模型
Transfer-Fcn:线性传递函数模型
Zero-Pole:以零极点表示的传递函数模型
Memory:存储上一时刻的状态值
Transport Delay:输入信号延时一个固定时间再输出
Variable Transport Delay:输入信号延时一个可变时间再输出
2、离散模块( Discrete) discrete.mdl
Discrete-time Integrator:离散时间积分器
Discrete Filter,IIR与 FIR滤波器
Discrete State-Space:离散状态空间系统模型
Discrete Transfer-Fcn:离散传递函数模型
Discrete Zero-Pole:以零极点表示的离散传递函数模型
First-Order Hold:一阶采样和保持器
Zero-Order Hold:零阶采样和保持器
Unit Delay:一个采样周期的延时
3,Function&Tables(函数和平台模块) function.mdl
Fcn:用自定义的函数(表达式)进行运算
MATLAB Fcn:利用 matlab的现有函数进行运算
S-Function:调用自编的 S函数的程序进行运算
Look-Up Table:建立输入信号的查询表(线性峰值匹配)
Look-Up Table(2-D):建立两个输入信号的查询表(线性峰值匹配)
4,Math(数学模块) math.mdl
Sum:加减运算
Product:乘运算
Dot Product:点乘运算
Gain:比例运算
Math Function:包括指数函数、对数函数、求平方、开根号等常用
数学函数
Trigonometric Function:三角函数,包括正弦、余弦、正切等
MinMax:最值运算
Abs:取绝对值
Sign:符号函数
Logical Operator:逻辑运算
Relational Operator:关系运算
Complex to Magnitude-Angle:由复数输入转为幅值和相角输出
Magnitude-Angle to Complex:由幅值和相角输入合成复数输出
Complex to Real-Imag:由复数输入转为实部和虚部输出
Real-Imag to Complex:由实部和虚部输入合成复数输出
5,Nonlinear(非线性模块) nonlinear.mdl
Saturation:饱和输出,让输出超过某一值时能够饱和。
Relay:滞环比较器,限制输出值在某一范围内变化。
Switch:开关选择,当第二个输入端大于临界值时,输出由第一个
输入端而来,否则输出由第三个输入端而来。
Manual Switch:手动选择开关
6,Signal&Systems(信号和系统模块) sigsys.mdl
In1:输入端。
Out1:输出端。
Mux:将多个单一输入转化为一个复合输出。
Demux:将一个复合输入转化为多个单一输出。
Ground:连接到没有连接到的输入端。
Terminator:连接到没有连接到的输出端。
SubSystem:建立新的封装( Mask)功能模块
7,Sinks( 接收器模块) sinks.mdl
Scope:示波器。
XY Graph:显示二维图形。
To Workspace:将输出写入 MATLAB的工作空间。
To File(.mat):将输出写入数据文件。
8,Sources( 输入源模块) sources.mdl
Constant:常数信号。
Clock:时钟信号。
From Workspace:来自 MATLAB的工作空间。
From File(.mat):来自数据文件。
Pulse Generator:脉冲发生器。
Repeating Sequence:重复信号。
Signal Generator:信号发生器,可以产生正弦、方波、锯齿波及随
意波。
Sine Wave:正弦波信号。
Step:阶跃波信号。
四,SIMULINK简单模型的建立及模型特点
1、简单模型的建立 exp5_1.mdl
( 1)建立模型窗口
( 2)将功能模块由模块库窗口复制到模型窗口
( 3)对模块进行连接,从而构成需要的系统模型
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) 模块的输入输出信号:模块处理的信号包括 标量信号 和 向量信号 ;标
量信号是一种单一信号,而向量信号为一种复合信号,是多个信号的
集合,它对应着系统中几条连线的合成。缺省情况下,大多数模块的
输出都为标量信号,对于输入信号,模块都具有一种“智能”的识别
功能,能自动进行匹配。某些模块通过对参数的设定,可以使模块输
出向量信号。
例 exp5_2.mdl exp5_3.mdl
第三节 SIMULINK线的处理 exp5_4.mdl
? 改变粗细:线所以有粗细是因为线引出的信号可以是标量信号或向量信
号,当选中 Format菜单下的 Wide Vector Lines时,线的粗细会根据线所
引出的信号是标量还是向量而改变,如果信号为标量则为细线,若为向
量则为粗线。选中 Vector Line Widths则可以显示出向量引出线的宽度,
即向量信号由多少个单一信号合成。
? 设定标签:只要在线上双击鼠标,即可输入该线的说明标签。也可以通
过选中线,然后打开 Edit菜单下的 Signal Properties进行设定,其中 signal
name属性的作用是标明信号的名称,设置这个名称反映在模型上的直
接效果就是与该信号有关的端口相连的所有直线附近都会出现写有信号
名称的标签。
? 线的折弯:按住 Shift键,再用鼠标在要折弯的线处单击一下,就会出现
圆圈,表示折点,利用折点就可以改变线的形状。
? 线的分支:按住鼠标右键,在需要分支的地方拉出即可以。或者按住
Ctrl键,并在要建立分支的地方用鼠标拉出即可。
SIMULINK模型的构建是通过用线将各种功能模块进行连接而构成的。
用鼠标可以在功能模块的输入与输出端之间直接连线。所画的线可以
改变粗细、设定标签,也可以把线折弯、分支。
第四节 SIMULINK自定义功能模块
一、方法 1 exp5_5.mdl
1) 将 Signal&Systems 模块库中的 Subsystem功能模块复制到打开的模型
窗口中 。
2) 双击 Subsystem功能模块,进入自定义功能模块窗口,从而可以利用
已有的基本功能模块设计出新的功能模块 。
自定义功能模块有两种方法,一种方法是采用 Signal&Systems模块库
中的 Subsystem功能模块,利用其编辑区设计组合新的功能模块;另一
种方法是将现有的多个功能模块组合起来,形成新的功能模块。对于
很大的 SIMULINK模型,通过自定义功能模块可以简化图形,减少功
能模块的个数,有利于模型的分层构建。
二、方法 2 exp5_6.mdl
1) 在模型窗口中建立所定义功能模块的子模块。
2) 用鼠标将这些需要组合的功能模块框住,然后选择 Edit菜单下的
Create Subsystem即可。
三、自定义功能模块的封装
exp5_7.mdl exp5_8.mdl exp5_9.mdl exp5_10.mdl
? 上面提到的两种方法都只是创建一个功能模块而已,如果要命名该
自定义功能模块、对功能模块进行说明、选定模块外观、设定输入
数据窗口,则需要对其进行封装处理。
? 首先选中 Subsystem功能模块,再打开 Edit菜单中的 Mask Subsystem
进入 mask的编辑窗口,可以看出有 3个标签页。
1) Icon:设定功能模块的外观。
2) Initialization:设定输入数据窗口( Prompt List)。
3) Documentation:设计该功能模块的文字说明。
1,Icon标签页
? 此页最重要的部分是 Drawing Commands,在该区域内可以用 disp指
令设定功能模块的文字名称,用 plot指令画线,用 dpoly指令画转换函
数。
? 注意,尽管这些命令在名字上和以前讲的 MATLAB函数相同,但它
们在功能上却不完全相同,因此不能随便套用以前所讲的格式。
a) disp(‘text’)可以在功能模块上显示设定的文字内容。
disp(‘text1\ntext2’)分行显示文字 text1和 text2
b) plot([x1 x2 … xn],[y1 y2 … yn]) 指令会在功能模块上画出由 [x1 y1]经
[x2 y2]经 [x3 y3] … 直到 [xn,yn]为止的直线。功能模块的左下角会根
据目前的坐标刻度被正规化为 [0,0],右上角则会依据目前的坐标刻
度被正规化为 [1,1]。
c) dpoly(num,den):按 s次数的降幂排序,在功能模块上显示连续的传递
函数。
d) dpoly(num,den,’z’):按 z次数的降幂排序,在功能模块上显示离散的
传递函数。
? 用户还可以设置一些参数来控制图标的属性,这些属性在 Icon页右下
端的下拉式列表中进行选择。
a) Icon frame,Visible 显示外框线; Invisible:隐藏外框线。
b) Icon Transparency,Opaque 隐藏输入输出的标签; Transparent:显示
输入输出的标签。
c) Icon Rotation:旋转模块。
d) Drawing coordinate:画图时的坐标系。
2,Initialization标签页
? 此页主要用来设计输入提示( prompt)以及对应的变量名称
( variable)。在 prompt栏上输入 变量的含义,其内容会显示在输入提
示中。而 variable是仿真要用到的变量,该变量的值一直存于 mask
workspace中,因此可以与其他程序相互传递。
? 如果配合在 initialization commands内编辑程序,可以发挥功能模块的
功能来执行特定的操作。
a) 在 prompt编辑框中输入文字,这些文字就会出现在 prompt列表中;在
variable列表中输入变量名称,则 prompt中的文字对应该变量的说明。
如果要增加新的项目,可以点击边上的 Add键。 Up和 Down按钮用于执
行项目间的位置调整。
b) Control type列表给用户提供选择设计的编辑区,选择 Edit会出现供输
入的空白区域,所输入的值代表对应的 variable; Popup则为用户提供
可选择的列表框,所选的值代表 variable,此时在下面会出现 Popup
strings输入框,用来设计选择的内容,各值之间用逻辑或符号,|”隔开;
如选择 Checkbox则用于 on与 off的选择设定。
c) Assignment属性用于配合 Control type的不同选择来提供不同的变量值,
变量值有 Evaluate和 Literal两种,其含义如下:
Assignment
Control type Evaluate Literal
Edit 输入的文字是程序执行时所用的变量值; 输入内容作字符串处理
Popup 为选择的序号,选第一项输出值为 1,选择内容作字符串处理
往下类推;
Checkbox 输出为 1或 0; 输出为‘ on’或‘ off’的字符

3,Documentation标签页
? 此页主要用来针对完成的功能模块来编写相应的说明文字和 Help。
a) 在 Block description中输入的文字,会出现在参数窗口的说明部分。
b) 在 Block help中输入的文字则会显示在单击参数窗口中的 help按钮后浏
览器所加载的 HTML文件中。
c) Mask type:在此处输入的文字作为封装模块的标注性说明,在模型窗
口下,将鼠标指向模块,则会显示该文字。当然必须先在 View菜单中
选择 Block Data Tips—— Show Block Data Tips。
第五节 SIMULINK仿真的运行
一、设置仿真参数和选择解法器
? 设置仿真参数和选择解法器,选择 Simulation菜单下的 Parameters命
令,就会弹出一个仿真参数对话框,它主要用三个页面来管理仿
真的参数。
I,Solver页,它允许用户设置仿真的开始和结束时间,选择解法器,
说明解法器参数及选择一些输出选项。
II,Workspace I/O页,作用是管理模型从 MATLAB工作空间的输入和
对它的输出。
III,Diagnostics页,允许用户选择 Simulink在仿真中显示的警告信息的
等级。
构建好一个系统的模型之后,接下来的事情就是运行模型,得出仿真
结果。运行一个仿真的完整过程分成三个步骤:设置仿真参数,启动
仿真和仿真结果分析。
1,Solver页
? 此页可以进行的设置有:选择仿真开始和结束的时间;选择解法器,
并设定它的参数;选择输出项。
1) 仿真时间,注意这里的时间概念与真实的时间并不一样,只是计算机
仿真中对时间的一种表示,比如 10秒的仿真时间,如果采样步长定为
0.1,则需要执行 100步,若把步长减小,则采样点数增加,那么实际
的执行时间就会增加。一般仿真开始时间设为 0,而结束时间视不同
的因素而选择。总的说来,执行一次仿真要耗费的时间依赖于很多因
素,包括模型的复杂程度、解法器及其步长的选择、计算机时钟的速
度等等。
2) 仿真步长模式,用户在 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工作空间获得的状态初始值的变量名。
2) Save to workspace,用来设置存往 MATLAB工作空间的变量类型和变
量名,选中变量类型前的复选框使相应的变量有效。一般存往工作空
间的变量包括输出时间向量( Time)、状态向量( States)和输出变量
( Output)。 Final state用来定义将系统稳态值存往工作空间所使用的
变量名。
3) Save option,用来设置存往工作空间的有关选项。 Limit rows to last用
来设定 SIMULINK仿真结果最终可存往 MATLAB工作空间的变量的规
模,对于向量而言即其维数,对于矩阵而言即其秩; Decimation设定
了一个亚采样因子,它的缺省值为 1,也就是对每一个仿真时间点产
生值都保存,而若为 2,则是每隔一个仿真时刻才保存一个值。 Format
用来说明返回数据的格式,包括矩阵 matrix、结构 struct及带时间的结
构 struct with time。
3,Diagnostics页
? 此页分成两个部分:仿真选项和配置选项。配置选项下的列表框主要
列举了一些常见的事件类型,以及当 SIMULINK检查到这些事件时给
予的处理。仿真选项 options主要包括是否进行一致性检验、是否禁用
过零检测、是否禁止复用缓存、是否进行不同版本的 SIMULINK的检
验等几项。
? 除了上述 3个主要的页外,仿真参数设置窗口还包括 real-time workshop
页,主要用于与 C语言编辑器的交换,通过它可以直接从 SIMULINK
模型生成代码并且自动建立可以在不同环境下运行的程序,这些环境
包括实时系统和单机仿真。
二、启动仿真
? 设置仿真参数和选择解法器之后,就可以启动仿真而运行。
? 选择 Simulink菜单下的 start选项来启动仿真,如果模型中有些参数
没有定义,则会出现错误信息提示框。如果一切设置无误,则开
始仿真运行,结束时系统会发出一鸣叫声。
? 除了直接在 SIMULINK环境下启动仿真外,还可以在 MATLAB命
令窗口中通过函数进行,格式如下:
[t,x,y]=sim(‘模型文件名’,[to tf],simset(‘参数 1’,参数值 1,‘参数 2’,参
数值 2,…))
? 其中 to为仿真起始时间,tf为仿真终止时间。 [t,x,y]为返回值,t为
返回的时间向量值,x为返回的状态值,y为返回的输出向量值。
simset定义了仿真参数,包括以下一些主要参数:
AbsTol:默认值为 1e-6设定绝对误差范围。
Decimation:默认值为 1,决定隔多少个点返回状态和输出值。
Solver:解法器的选择。
MaxRows:默认值为 0,表示不限制。若为大于零的值,则表示限制输
出和状态的规模,使其最大行数等于该数值。
InitialState:一个向量值,用于设定初始状态。
FixedStep:用一个正数表示步阶的大小,仅用于固定步长模式。
MaxStep:默认值为 auto。用于变步长模式,表示最大的步阶大小。
如果知道模型文件名称,可以用以下命令得到该模型的仿真参数:
simget(‘模型文件名’)
第六节 SIMULINK s-function的设计
一,s-function的概念
? s-function是一个动态系统的计算机语言描述,在 MATLAB里,用
户可以选择用 m文件编写,也可以用 c或 mex文件编写,在这里只给
大家介绍如何用 m文件编写 s-function。
? S-function提供了扩展 Simulink模块库的有力工具,它采用一种特定
的调用语法,使函数和 Simulink解法器进行交互。
? S-function最广泛的用途是定制用户自己的 Simulink模块。它的形式
十分通用,能够支持连续系统、离散系统和混合系统。
Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连
接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以
构建出重复使用的新模块,但它依然是基于 Simulink原来提供的内置
模块。
而 Simulink s-function是一种强大的对模块库进行扩展的新工具。
二、建立 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的矩阵,它的两列分别表示采样时间间隔和偏移。
例 1 csfunc.m(连续状态 s-function)
例 2 dsfunc.m(离散状态 s-function)
例 3 mixedm.m(混合系统 s-function)
例 4 vsfunc.m(可变步长仿真系统)
例 5 filt.m,rect.m,rload.m(非模板文件形式)
第七节 SIMULINK 仿真举例
1、利用 SIMULINK进行时域系统分析( shiyufx.mdl)
2、利用 SIMULINK求解电路( dianlu.mdl)
3、利用 SIMULINK设计一个时钟脉冲控制的 RS触发器( RS.mdl)
4、利用 SIMULINK设计一个单极性 SPWM控制的单相逆变电路
( inverter.mdl)
?SIMULINK是 MATLAB的一个扩展软件,它是基于模型化
图型输入的仿真环境。
?模型化图型输入使得用户可以把更多的精力投入到模型的
构建上来,要求熟悉各功能模块库中各子模块的功能,熟
练掌握 SIMULINK环境下模块的操作及线的处理,掌握自
定义功能模块。
?掌握 SIMULINK解法器的设置。
?S-FUNCTION是扩展 MATLAB函数库的一个实用方法,要
求熟练掌握它的编写及用法。
?使用 SIMULINK进行仿真分析的关键是熟练地运用各功能
子模块构建出需要的正确的系统模型并合理地设置解法器
以使仿真得以正常运行。
本章小结
谢谢您的光临
祝同学们:
新年快乐
学以致用
考试时间
初步定于 2002年 1月 10号
(第 19周周四 )