版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章 基于Simulink的建模与仿真SIMULINK概述SIMULINK快速入门功能模块的处理线的处理仿真参数的设定仿真结果分析创建子系统(Subsystem)Simulink模块库介绍s-function的设计如果控制系统的结构很复杂,若不借助专用的控制系统建模软件,在过去很难准确地把一个控制系统的复杂模型输入给计算机,然后对之进行进一步的分析与仿真。1990年MathWorks软件公司为
MATLAB提供了新的控制系统模型图形输入与仿真工具,并定名为SIMULAB,该工具很快在控制界就有了广泛的应用,但因其名字与著名的
SIMULA软件类似,所以1992年以来正式改名为
SIMULINK。该名字的含义是相当直观的,因为它较明显地
表明此软件的两个显著功能:SIMU(仿真)与
LINK(连接)。即可以利用鼠标在模型窗口上“画”6.1
SIMULINK概述出所需的控制系统模型,然后利用SIMULINK提供
的功能来对系统进行仿真。特点:SIMULINK为用户提供了很方便的图形化功能模块,以便连接成一个模拟系统,简化设计的流程,减轻设计负担。扩充性很强。SIMULINK能够用MATLAB自身
的语言或C、FORTRAN语言,根据S函数的标准格式,写成用户自定义的功能模块。如果学会了S函数,就能充分发挥SIMULINK的功能。否则只能用模块库中的模块去拼出系统。6.2
SIMULINK快速入门一、启动SIMULINK二、窗口介绍库浏览窗口(Simulink
Library
Browser)模型窗口图形输出窗口三、SIMULINK模型设计示例步骤:将功能模块放入空白设计区域内组合完成系统。执行Simulation菜单中的Start命令。示例一:以建立一个简单的PID控制器为例,说明Simulink从建模到仿真的步骤:在Simulink窗口下的File菜单中选择New命令创建一个Untitled空白窗。双击信号源Source子库打开信号源模块库,将信号发生器SignalGenerator模块从子库窗口拷贝到Untitled窗口中。具体方法:先把鼠标的光标移到信号发生器的方框图中,按住鼠标的左键,将它拖到新的窗口中,然后松开,完成复制;并选择
Sine函数作为信号源。采取同样方法,可以将其它模块拷贝到
Untitled窗口各模块所在的位置。说明如下:加法器Sum:在Simulink/Math/子库中。PID控制器:在/Simulink
extras/AdditionalLinear子模型库中,双击打开该控制器可分别设定P,I,D参数值。传递函数Transfer
Fcn:在
Simulink/continuous/模型库中,双击打开该函数,并设定:Numerator:[1
3],Denominator:[1
2
3]。示波器Scope:在Sinks模型库中。将各个拷贝到的模块按上图所示的方式连接起来、构成一个闭环PID控制器。程序名:mex3_5_f1.mdl示例二:程序名:mex3_5_f2.mdl示例三:功能模块的处理移动将光标置于待移动的模块图标上,然后按住鼠标左键将模块拖到合适的地方即可。模块移动时,它与其它模块的连线也随之移动。选定选定一个环节,单击待选模块,模块四个角便出现小黑块,表示模块被选定。如果要选择一组模块,首先按住鼠标左键拉出一个矩形虚线框,将所有待选模块包在其中,然后松开,则矩形框里的所有模块同时被选中。3.模块的删除、剪切和拷贝选定一个模块,
可以作如下操作。删除:按Delete键,可以将选定的模块删除。剪切:选择Edit菜单中的Cut命令,
可以将被选定模块移到Windows的剪切板上。可供Paste命令重新粘贴。拷贝:选择Edit菜单中的Copy命令,
然后将光标移到要粘贴的地方,
再运行Edit菜单中的Paste命令,就会在选定的位置上复制出相应的模块。Simulink本身带有一种更简单的复制操作:用鼠标右键把待拷贝的模块拖到希望位置后松开,便完成拷贝工作。或者按住Ctrl键和鼠标左键把待拷贝的模块拖到希望位置后松开,便完成拷贝工作。4.模块的翻转为了能够顺序连接模块的输出与输入端,有时需要将模块转向。在菜单Format中选择Flip
Block命令则旋转180°;选择Rotate
Block命令则顺时旋转
90°。改变大小模块的命名先单击需要更改的名称,然后直接更改即可。可以采用Format下的Flip
Name命令使名称在功能模
块上的位置翻转180°。若要隐藏模块名称则用
Format下的Hide
Name命令。颜色设定用Format→ForegroundColor命令改变前景颜色;用Format→Background命令改变背景颜色;空白区域的颜色可以用Format→ScreenColor命令设定。8.
参数设定(Block
Parameters)设置每一个模块的特定参数。例如:双击一个模块,可直接打开该模块的BlockParameters对话框。在菜单Edit中选择Block
Parameters
,可打开该模块的BlockParameters对话框。参数设定窗口包含了
该模块的基本功能帮助,为获得更详尽的帮助,
可以点击其上的help按钮。通过对模块的参数设定,就可以获得需要的功能模块。9.
属性设定(BlockProperties)包括Description属性、Priority优先级属性、Tag属性、Openfunction属性、Attributes
formatstring属性。其中Open
function属性是一个很有用的属性,通过它指定一个函数名,则当该模块被双击之后,Simulink就会调用该函数执行,这种函数在MATLAB中称为回调函数。属性设定(Block
Properties)Description(描述):简要描述模块的作用;Priority(优先次序):在模型中相对其它模块的执行优先次序;Tag(标记):一个随模块一起保存的普通文本字段;Open
function(打开函数):当用户打开该模块要调用的
MATLAB(m-)函数。Attributes
format
string(属性格式串):该参数指定哪些属性显示在模块图标下。➢例如:Priority=%<priority>\nSample
Time=%<sampletime>6.4
线的处理在Simulink中,
线具有连接功能模块的功能。用鼠标可以在功能模块的输入与输出之间连线,
所画的线可以达到以下功能:改变粗细选中Format→Wide
Vector
Lines命令,则线的粗细会根据在线上传输的信号特性而变化。如果传输的为数值,则为细线;如果传输的为向量,则为粗线。设定标签在线上双击,
即可输入该线的说明标签。线的折弯(按住shift键)按住shift键,再用鼠标在要折弯的地方单击一下,就会出现圆圈。该圆圈表示折点,利用该折点就可以改变线的形状。线的分支(按住ctrl键)有三种方法:其一是按住Ctrl键,
在要建立分支的地方用鼠标拉出即可;另一种方式是在要建立分支的地方用鼠标右键拉出;第三种方式是由输入端拉线到分支点。6.5 仿真参数的设定(Simulation一Pa、r解am题e器ters)(Solver)参数的设定为了求解不同的模型,Simulink提供了几种微分方程数值解的算法以供选择。在给定的时间和初始条件下,通过数值积分算法,可以计算每一步的解,并验证该解是否满足给定的容许误差。如果满足,则该解就是一个正确的解,否则就继续进行直到得出的解满足要求为止。一、解题器(Solver)参数的设定在仿真时间(simulation
time)中选择:start
time
——开始时间;stop
time
——停止时间;在解题选项(solver
options)中选择:变步长(variable-step)或固定步长(fixed-step);Max
step
size
——最大步长;initial
step
size
——初始步长。Runge-Kutta仿真方法包括变步长算法和固定步长算法两种。一般在仿真初始阶段,响应量变化快,需要小步长。随着仿真进入稳态,响应量变化很小。为了减少运算积累误差,一般采用大步长。在Runge-Kutta算法中,采用了自动调整步长的方法,可以设置auto由算法自动选择步长。只有当需要以某个步长仿真时,才选择固定步长。最大步长与起始步长由白己给定;如果选择了可变步长,最大步长和起始步长变为“自动调整”(auto);如果选择了固定步长,最大步长与初始步长都等于固定步长。仿真算法—8种仿真方法;Relative
tolerance
—相对容许误差;它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,
表示状态的计算值要精确到0.1%。absolute
tolerance
—绝对容许误差;表示误差 值的门限,或者是说在状态值为零的情况下,
可以接受的误差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。在每一步的积分运算中,程序都会把解出的值与预期值相减得到误差e,且必须满足e<=max(Reltol*abs(y(i)),AbsTol(i))时,才算是一成功的运算步骤。(3)在输出选项(Output
options)中选择:refine
output
——平滑输出。其意义是在仿真输 出太稀松时,simulink会产生额外的精细输出, 这一点就像插值处理一样。如果选择了该项,可以选择后面的refine
factor(平滑参数)的数值。该数值越大,输出越平滑。produce
additional
output
——产生附加输出。它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个output
times编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选项会改变仿真的步长。produce
special
output
only
——只产生特殊输出。它的意思是让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指
定的时间点重合。这个选项在比较不同的仿真时
可以确保它们在相同的时间输出。仿真参数的设定
(Simulation
Parameters)二、工作空间输入/输出(WorkspaceI/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。仿真参数的设定
(Simulation
Parameters)三、诊断页参数设定❏
此页分成两个部分:仿真选项和配置选项。❏
配置选项下的列表框主要列举了一些常见的事件类型,以及当SIMULINK检查到这些事件时给予的处理。❏
仿真选项options主要包括是否进行一致性检验、是否禁用过零检测。使用Scope模块使用返回变量通过在Simulation
Parameters对话框的
Workspace
I/O页面中指定变量时间(tout)、输出(yout)、和状态(xout)后,再通过Siumation菜单运行仿真,然后可以在MATLAB命令窗口中使用下面的命令,绘出结果。必须与输入、输出端口模块(如In1、Out1等)配合使用!plot(tout,yout)6.6
仿真结果分析使用To
Workspace模块(注意变量输出有三种保存格式:Structurewith
Time、Structure、Matrix)一、使用Scope模块观察输出轨迹二、使用返回变量三、使用To
Workspace模块一、意义随着模型的大小和复杂性的增加,可以将它的模块分成不同的组,组成若干子系统,以达到简化模型的目的。优点:可以减少模型窗口中显示的模块数量;可以将功能上有关联的模块放在一起;可以建立一个层次结构的模块图,子系统模块位于一层,组成子系统的各模块位于另外一层。6.7 创建子系统(Subsystem)创建子系统的途径有两种:1.通过将一些已有模块组织在一起创建子系统先用一个边界框将子系统需要包含的所有模块和连线包括起来;从Edit菜单下选择
Creat
Subsystem菜单项。2.通过加入子系统模块创建子系统(1)从Simulink的信号与系统库中拷贝Subsystem模块到模型中;二、子系统的创建2)双击该子系统模块,打开它;3)在空的子系统(Subsystem)窗口中,创建子系统。使用输入模块(Inport)代表该子系统从外部的输入,使用输出模块(Outport)代表该子系统的输出。1.通过将一些已有模块组织在一起创建子系统(mex3_5_1.mdl)2.通过加入子系统模块创建子系统(mex3_5_2.mdl)所谓子系统的封装就是给已建立的子系统定制模块图标和对话框,用户通过对话框和图标一目了然地了解子系统功能和设置参数等,而不必了解子系统的具体结构。子系统封装的方法和步骤:选中要封装的子系统模块;在模型窗口中,选择菜单Edit-Mask
subsystem,弹出Mask
Editor对话框。填写对话框的3页信息:Icon页、Initialization页、Documentation页。三、子系统的封装Icon页本页功能是对子系统模块的图标进行装饰,如图像、图形或文字,使子系统外观上具有明显特征。❏
此页最重要的部分是Drawing
Commands,在该区域内可以用disp指令设定功能模块的文字名称,用plot指令画线。·◆disp(‘text’)可以在功能模块上显示设定的文字内容。disp(‘text1\ntext2’)分行显示文字text1和text2plot([x1
x2…xn],[y1
y2…yn])指令会在功能模块上画出由[x1
y1]经[x2
y2]经[x3
y3]…直到[xn,yn]为止的直线。例如plot([0
1
2],[0
0
1])
%画出一条折线disp(‘Kp*(1+1/(Ti*s)+Td*s)*e’)
%文字表示PID公式❏用户还可以设置一些参数来控制图标的属性,这些属性在Icon页右下端的下拉式列表中进行选择。·
Icon
frame:Visible显示外框线;Invisible:隐藏外框线。
Icon
Transparency:Opaque隐藏输入输出的标签;Transparent:显示输入输出的标签。Icon
Rotation:旋转模块。Drawing
coordinate:画图时的坐标系。Initialization页本页主要对子系统模块对话框的主要内容进行定义和制作,设计输入提示(prompt)以及对应的变量名称(variable)。·
在prompt编辑框中输入文字,这些文字就会出现在prompt列表中;在variable列表中输入变量名称,则prompt中的文字对应该变量的说明。如果要增加新的项目,可以点击边上的Add键。Up和Down按钮用于执行项目间的位置调整。Control
type
列表给用户提供选择设计的编辑区,选择Edit会出现供输入的空白区域,所输入的值代表对应的variable;Popup则为用户提供可选择的列表框,所选的值代表variable,此时在下面会出现Popup
strings输入框,用来设计选择的内容,各值之间用逻辑或符号“|”·
Assignment属性用于配合Controltype的不同选择来提供不同的变量值,变量值有Evaluate和Literal两种,其含义如下:❏❏
ControlAssignmenttype
EvaluateLiteral❏
Edit理输入的文字是程序执行时所用的变量值; 输入内容作字符串处❏
Popup理为选择的序号,选第一项输出值为1,选择内容作字符串处❏往下类推;❏
Checkbox的字符串输出为1或0;输出为‘on’或‘off’Documentation页❏此页主要用来针对完成的功能模块来编写相应的说明文字和Help。
在Blockdescription中输入的文字,会出现在参数窗口的说明部分。
在Blockhelp中输入的文字则会显示在单击参数窗口中的help按钮后浏览器所加载的HTML文件中。mex3_5_2A.mdl·
Mask
type:在此处输入的文字作为封装模块的标注性说明,在模型窗口下,将鼠标指向模块,则会显示该文字。当然必须先在View菜单中选择
Block
Data
Tips。在MATLAB指令窗口下键入demo命令,可以打开
simulink的Demo窗口,查看各种例题应用的演示。窗口左边的一列为演示题目列表,右边是它的具体说明和进一步选择。下表给出了一些演示的题目说明。GeneralEngine
timing
simulation发动机调速模型仿真Enginetiming
with
close
loopcontrol发动机调速闭控制的仿真clutch
lock-up
simulation离合器锁定模型的仿真Flip-flop
blocks
demonstration数字脉冲生成器Friction
with
hard
stops
model突然停止摩擦模型仿真Enabled
subsystem连续系统与离散系统仿真Accurate
zero
crossings
detection零跨越探测仿真State
event 乒乓控制仿真Simple
modelsSpring
pendulum
simulation 简单钟摆仿真Spring-mass
system
simulation 弹性系统仿真Tracking
a
bouncing
ball 跳球跟踪仿真Von
der
pol
equation
simulation范德坡方程仿真Quarter
rotation
animation三自由度航行器旋转仿真ComplexmodelsPendulm
with
one
joint 单节点摆动仿真Pendulm
with
two
joints 双节点摆动仿真Inverted
pendulm
animation 倒立摆仿真Double
spring
mass
system
simulation双弹簧系统仿真Thermodynamic
model
of
a
house房子热力学模型仿真AdvancedProductsF-14
flight
control
simulation
F-14歼击机控制系统仿真Accelerator仿真加速器Simulink:1)
Continous(连续库)
2)
Discrete(离散库)3)
Functions
&
Tables(函数与表库)
4)
Math(数学运算库)5)
Nonlinear(非线性库)
6)
Sinks(接收库)7)
Signals
&
Systems(信号与系统库)
8)
Source(源库)6.8
Simulink模块库介绍1.
Continous(连续库)模块名功能Derivative(导数)对输入信号求导Integrator(积分器)对输入信号进行积分Memory(记忆)保存前一积分步的输入值State
Space(状态空间)状态空间模型Transfer
Fcn(传递函数)传递函数模型Transfer
Delay(传递延迟)将输入延迟一段给定的时间Variable
Transfer
Delay(可变传递延迟)将输入延迟一段可变的时间Zero-Pole(零-极点)零-极点模型2. Discrete(离散库)模块名功能Discrete
Filter(离散滤波器)实现IIR和FIR滤波器Discrete
State
Space(离散状态空间)离散状态空间模型Discrete-time
Interator(离散时间积分器)对输入信号进行离散时间积分Discrete
Transfer
Fcn(离散传递函数)离散传递函数模型Discrete
Zero-Pole(离散零-极点)离散零-极点模型First-Order
Hold(一阶保持)实现一阶采样保持Unit
Delay(单位延迟)将输入信号延迟一个采样周期Zero-Order
Hold(零阶保持)实现零阶采样保持模块名功能Abs
(绝对值)输出输入的绝对值Algebraic
Constraint将输入信号抑制为零Combinatorial
Logic
(组合逻辑)实现真值表Complex
to
Magnitude-Angle计算复数信号的相角和幅值Complex
to
Real-Imag计算复数信号的实部和虚部Dot
Product(点乘)计算两个输入向量的点乘积Gain(增益)将模块的输入乘以一个数Logical
Operator(逻辑运算)对输入执行指定的逻辑运算Magnitude-Angle
to
Complex将输入的幅值和相角信号转换为复数信号Math
Function(数学函数)执行许多普通的数学函数4.
Math(数学运算库)模块名功能Matrix
Gain(矩阵增益)将模块的输入乘以一个矩阵MinMax(最小最大值)输出输入信号的最小值或最大值Product(乘积)对模块的输入信号进行乘或者除Real-Imag
to
Complex将输入的实部和虚部信号转换为复数信号Relational
Operator
(关系运算)对输入执行指定的关系运算Rounding
Function(圆整函数)执行普通的数学圆整函数Sign(符号)指明输入的正负号Slider
Gain(滑块增益)使用滑块改变标量增益Sum(和)产生各个输入之和Trigonometric
Function(三角函数)执行三角函数Math(数学运算库)模块名功能Backlash(齿隙)Coulomb
ViscousFriction(库仑和粘性摩擦)Dead
Zone(死区)提供一个输出为零的区域Manual
Switch(手动开关)在两个输入之间进行手动切换Multiport
Switch(多路转换开关)从模块的多个输入中选择一个作为
输出(一个控制端,若干个数据端)Quantizer(量化)Rate
Limiter(限速器)限制信号改变的速率Relay(继电器)在两个常数之间切换Saturation(饱和)限制信号的范围Switch(选择开关)在两个输入之间进行切换(总共三个输入端,第二端口为控制端口)5.
Nonlinear(非线性库)模块名功能Display(显示)显示输入的值Scope(显示器)显示仿真期间产生的信号Stop
Simulation(停止仿真)输入为非零时停止仿真To
File(写入文件)向文件中写数据To
Workspace(写入工作空间)向工作空间中的矩阵写入数据XY
Graph(X-Y图)使用MATLAB的图形窗口显示信号的X-Y图6.
Sinks(接收库)模块名功能Demux(解混)将输入的向量信号分解成多个输出信号Mux(混合)将多个输入信号组合成一个向量信号From(导入)从Goto模块接收数据Goto(传出)将模块的输入传给From模块Ground(接地)给悬空的输入端口接地Terminator(终接器)终结未被连接的输出端口Inport(输入端口)为子系统或者外部输入创建一个输入端口Outport(输出端口)为子系统或者外部输出创建一个输出端口Merge(合并)组合几个输入连线成为一个标量连线7.Signals
&
Systems(信号与系统库)8.
Source(源库)模块名功能Band
LimitedWhite
Noise(限带白噪声)给连续系统输入白噪声Chirp
Signal(扫频信号)产生一个频率递增的正弦波Clock(时钟)显示并且提供仿真时间Constant(常量)生成一个与时间无关的常量Digital
Clock(数字时钟)以指定采样时间间隔输出仿真时间DiscretePulseGenerator(离散脉冲发生器)生成间隔恒定的脉冲(用于离散系统中)From
Workspace(从工作空间读取数据)从工作空间定义的矩阵中读取数据From
File(从文件读取数据)从.mat文件读取数据模块名功能Pulse
Generator(脉冲发生器)生成间隔恒定的脉冲(用于连续系统中)Ramp(倾斜)产生连续增大或减小的信号Random
Number(随机数产生器)产生正态分布的随机数Repeating
Sequence(重复序列)产生重复的任意信号Signal
Generator(信号发生器)生成不同的波形信号(正弦波、方波、锯齿波)Sine
Wave(正弦波)产生一个正弦波Step(阶跃)产生阶跃函数Uniform
Random
Number产生均匀分布的随机数【例6.8-1
】已知某控制系统的结构图如下图所示,求其输入阶跃信号
时的响应。0.002【例6.8-2
】已知某控制系统的结构图及开环传递函数如下图所示,求其阶跃响应。【例6.8-3
】已知某控制系统的结构图及开环传递函数如下图所示,求其阶跃响应。【例6.8-4
】(创建方程的模型一)【例6.8-5
】将摄氏温度转换为华氏温度的公式是:其中,TF表示华氏温度,TC表示摄氏温度。(创建方程的模型二)【例6.8-6
】给如下微分方程建模:式中u(t)是一幅度为1,频率为1rad/sec的方波。(创建方程的模型二)【例6.8-6A
】给如下微分方程建模:式中u(t)是一幅度为1,频率为1rad/sec的方波。Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于Simulink原来提供的内置模块。而 Simulink
s-function
是一种强大的对模块库进行扩展的新工具。❏
一、s-function的概念❏
◆s-function是一个动态系统的计算机语言描述在MATLAB里,用户可以选择用m文件编写,也可以用c或mex文件编写,在这里只给大家介绍如何用m文件编写s-function。6.9
s-function的设计
S-function提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解法器进行交互。
S-function最广泛的用途是定制用户自己的
Simulink模块。它的形式十分通用,能够支持连续系统、离散系统和混合系统。❏
1、使用模板文件:sfuntmp1.m❏
该模板文件位于MATLAB根目录下
toolbox/simulink/blocks目录下。❏
模板文件里s-function的结构十分简单,它只为不同的 flag
的值指定要相应调用的m文件子函数。比如当 flag=3
时,即模块处于计算输出这个仿真阶段时,相应调用的子函数为sys=mdloutputs(t,x,u)。二、建立m文件s-functionFlagS-Function子程序仿真阶段0mdlInitializesizes初始化1mdlDerivatives计算导数2mdlUpdate计算输出3mdlOutputs更新离散状态4mdlGetTimeOfNextVarHit计算下一个采样点9mdlTerminate仿真任务结束❏模板文件使用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可用的子函数说明如下:
mdlInitializeSizes:定义s-function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。mdlDerivatives:计算连续状态变量的导数。
mdlUpdate:更新离散状态、采样时间和主时间步的要求。mdlOutputs:计算s-function的输出。
mdlGetTimeOfNextVarHit:计算下一个采样点的绝对时间,这个方法仅仅是在用户在mdlInitializeSizes里说明了一个可变的离散采样时间。
mdlTerminate:实现仿真任务必须的结束。概括说来,建立s-function可以分成两个分离的任务:将算法放到合适的s-function子函数中去。初始化模块特性包括输入输出信号的宽度,离散连续状态的初始条件和采样时间。❏
2、定义s-function的初始信息❏
为了让Simulink识别出一个m文件s-function,用户必须在s-函数里提供有关s-函数的说明信息,
包括采样时间、连续或者离散状态个数等初始条
件。这一部分主要是在mdlInitializeSizes子函数里完成。❏
Sizes数组是s-function函数信息的载体,它内部的字段意义为:NumContStates:连续状态的个数(状态向量连 续部分的宽度)NumDiscStates:离散状态的个数(状态向量离 散部分的宽度)
NumOutputs:输出变量的个数(输出向量的宽度)
NumInputs:输入变量的个数(输入向量的宽度)DirFeedthrough:有无直接馈入NumSampleTimes:采样时间的个数❏
如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1。❏
注意DirFeedthrough是一个布尔变量,它的取值只有0和1两种,0表示没有直接馈入,此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u;1表示有直接馈入。❏
NumSampleTimes表示采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。❏
需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合
成一个复合输入向量或将一个复合输出向量分解为多个单一输出。❏
3、输入和输出参量说明❏
S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为:
t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。
x:表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。u:表示输入向量。
flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。❏
S-function默认的4个返回参数为sys、x0、str和ts,它们的次序不能变动,代表的意义分别为:
sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。
x0:是初始的状态值(没有状态时是一个空矩阵[]),这个返回参数只在flag值为0时才有效,其他时候都会被忽略。
str:这个参数没有什么意义,是MathWorks公司为将来的应用保留的,m文件s-function必须把它设为空矩阵。
ts:是一个m×2的矩阵,它的两列分别表示采样时间间隔和偏移。❏
例1
timestwo.m(一个简单的S函数的例子)❏
例2
csfunc.m(连续状态s-function)❏
例3
dsfunc.m(离散状态s-function)❏
例4
mixedm.m(混合系统s-function)❏
例5
vsfunc.m(可变步长仿真系统)例1
timestwo.m(一个简单的S函数的例子)下面给出一个简单的例子,例子中的S-Function模块接受一个标量信号的输入并将它乘2,如下图所示。function
[sys,x0,str,ts]
=
timestwo(t,x,u,flag)%
Dispatch
the
flag.
The
switch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年HWREP刷适性改进剂项目投资申请报告代可行性研究报告
- 一年级数学(上)计算题专项练习汇编
- 2024健身中心器械维护分包协议
- 2024年餐饮业务全面合作协议范本
- 2024企业欠款清算协议范例
- 2024年企业保安服务协议
- 2024商品采购单一价格协议规范格式
- 2024年股权转移与债务责任分担协议
- 2024年车间操作工劳动协议样本
- 2024年商业房产租赁递增值服务协议
- 检验检测服务项目固定资产和无形资产投资管理
- 6.2 做负责任的人
- 设备安装施工作业指导书
- 危险源辨识与风险评价记录表知识讲解
- 化工系统工程:第4章 换热网络综合
- 医院感染管理组织架构图
- 示范区标识及精神堡垒、文化墙施工方案
- (完整版)国家会计领军人才题型及经验分享
- 6.2做负责任的人课件(25张PPT)
- 制式服装生产供货服务方案
- 煤矿设备设施清单
评论
0/150
提交评论