1、1,第6讲 SIMULINK交互式仿真集成环境,6.1 SIMULINK简介 6.2 SIMULINK功能模块的处理 6.3 SIMULINK自定义功能模块 6.4 SIMULINK仿真的运行 6.5 SIMULINK s-function的设计,2,6.1 SIMULINK简介,一、什么是SIMULINK? 二、 SIMULINK的启动 三、SIMULINK的模块库介绍 四、SIMULINK简单模型的建立及模型特点,3,一、什么是SIMULINK? SIMULINK是实现动态系统建模、仿真和综合分析的集成软件包,与用户交互的接口是基于Windows的模型化图形输入。 模型化图形输入:指SIM
2、ULINK提供了一些按功能分类的基本的系统模块(用户只需要知道这些模块的输入输出及模块的功能,而不必考察模块内部是如何实现的),通过调用、连接这些基本模块,就可以构成所需要的系统模型(以.mdl文件进行存取),从而进行仿真与分析。 优点:用户可以把更多的精力投入到系统模型的构建,而非语言的编程上。,4,SIMULINK模型的含义: 视觉上,直观的方框图; 文件上,扩展名为MDL的ASCII代码; 数学上,一组微分方程或差分方程; 行为上,模拟物理器件构成的实际系统的动态特性。 SIMULINK模型的一般组件:可处理的系统:线性、非线性系统;离散、连续及混合系统,单任务、多任务离散事件系统 可加
3、载的工具包:通信、控制、信号处理、DSP、电力系统等,5,二、SIMULINK的启动 1、在MATLAB命令窗口中输入simulink 打开Simulink Library Browser窗口,窗口中列出了按功能分类的各种模块的名称。2、在MATLAB命令窗口中输入simulink3 打开Library :simulink3的Simulink模块库窗口。,6,三、SIMULINK的模块库介绍 SIMILINK模块库按功能进行分类: Continuous(连续模块) Discrete(离散模块) Function&Tables(函数和平台模块) Math(数学模块) Nonlinear(非线性模
4、块) Signals&Systems(信号和系统模块) Sinks(接收器模块) Sources(输入源模块),7,1、连续模块(Continuous) continuous.mdl Integrator:输入信号积分 Derivative:输入信号微分 State-Space:线性状态空间系统模型 Transfer-Fcn:线性传递函数模型 Zero-Pole:以零极点表示的传递函数模型 Memory:存储上一时刻的状态值 Transport Delay:输入信号延时一个固定时间再输出 Variable Transport Delay:输入信号延时一个可变时间再输出,8,2、离散模块(Dis
5、crete) 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:一个采样周期的延时,9,3、 Function&Tables(函数和平台模块) function.mdl Fcn:用自定
6、义的函数(表达式)进行运算 MATLAB Fcn:利用matlab的现有函数进行运算 S-Function:调用自编的S函数的程序进行运算 Look-Up Table:建立输入信号的查询表(线性峰值匹配) Look-Up Table(2-D):建立两个输入信号的查询表(线性峰值匹配),10,4、 Math(数学模块) math.mdl Sum:加减运算 Product:乘运算 Dot Product:点乘运算 Gain:比例运算 Math Function:包括指数函数、对数函数、求平方、开根号等常用数学函数 Trigonometric Function:三角函数,包括正弦、余弦、正切等 Mi
7、nMax:最值运算 Abs:取绝对值 Sign:符号函数,11,Logical Operator:逻辑运算 Relational Operator:关系运算 Complex to Magnitude-Angle:由复数输入转为幅值和相角输出 Magnitude-Angle to Complex:由幅值和相角输入合成复数输出 Complex to Real-Imag:由复数输入转为实部和虚部输出 Real-Imag to Complex:由实部和虚部输入合成复数输出,12,5、 Nonlinear(非线性模块) nonlinear.mdl Saturation:饱和输出, 让输出超过某一值时能够
8、饱和。 Relay:滞环比较器, 限制输出值在某一范围内变化。 Switch:开关选择, 当第二个输入端大于临界值时, 输出由第一个输入端而来, 否则输出由第三个输入端而来。 Manual Switch:手动选择开关,13,6、Signal&Systems(信号和系统模块) sigsys.mdl In1:输入端。 Out1:输出端。 Mux:将多个单一输入转化为一个复合输出。 Demux:将一个复合输入转化为多个单一输出。 Ground:连接到没有连接到的输入端。 Terminator:连接到没有连接到的输出端。 SubSystem:建立新的封装(Mask)功能模块,14,7、Sinks(接收
9、器模块) sinks.mdl Scope:示波器。 XY Graph:显示二维图形。 To Workspace:将输出写入MATLAB的工作空间。 To File(.mat):将输出写入数据文件。,15,8、Sources(输入源模块) sources.mdl Constant:常数信号。 Clock:时钟信号。 From Workspace:来自MATLAB的工作空间。 From File(.mat):来自数据文件。 Pulse Generator:脉冲发生器。 Repeating Sequence:重复信号。 Signal Generator:信号发生器,可以产生正弦、方波、锯齿波及随意波
10、。 Sine Wave:正弦波信号。 Step:阶跃波信号。,16,四、SIMULINK简单模型的建立及模型特点 1、简单模型的建立 exp5_1.mdl (1)建立模型窗口 (2)将功能模块由模块库窗口复制到模型窗口 (3)对模块进行连接,从而构成需要的系统模型 2、模型的特点 提供了许多如Scope的接收器模块,使得SIMULNK仿真具有像做实验一般的图形化显示效果。 SIMULINK的模型具有层次性,通过底层子系统可以构建上层母系统。 SIMULINK提供了对子系统进行封装的功能,用户可以自定义子系统的图标和设置参数对话框。,17,例:求微分方程的数值解并给定初始条件y(0)=1, y(
11、0)=2。,18,6.2 SIMULINK功能模块的处理,一、 SIMULINK功能模块的处理二、SIMULINK线的处理,19,一、 SIMULINK功能模块的处理功能模块的基本操作,包括模块的移动、复制、删除、转向、改变大小、模块命名、颜色设定、参数设定、属性设定、模块输入输出信号等。模块库中的模块可以直接用鼠标进行拖曳(选中模块,按住鼠标左键不放)而放到模型窗口中进行处理。,20,对模块的基本操作: 移动:选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离线而移动,可按住shift键,再进行拖曳。 复制:选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。 删除:选中模块
12、,按Delete键即可。也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。 转向:在菜单Format中选择Flip Block旋转180度,选择Rotate Block顺时针旋转90度。或者直接按Ctrl+F键执行Flip Block,按Ctrl+R键执行Rotate Block。 改变大小:选中模块,对模块出现的4个黑色标记进行拖曳。,21,模块命名:先用鼠标单击需要更改的名称,然后直接更改。Hide Name可以隐藏模块名称。 颜色设定: Format菜单中的Foreground Color可以改变模块的前景颜色,Background Color可以改变模
13、块的背景颜色;而模型窗口的颜色可以通过Screen Color来改变。 参数设定:用鼠标双击模块,对模块进行参数设定。通过对模块的参数设定,就可以获得需要的功能模块。 属性设定:选中模块,打开Edit菜单的Block Properties对模块进行属性设定。包括Description属性、 Priority优先级属性、Tag属性、Open function属性、Attributes format string属性。 模块的输入输出信号:模块处理的信号包括标量信号和向量信号;标量信号是一种单一信号,而向量信号为一种复合信号,是多个信号的集合,它对应着系统中几条连线的合成。,22,例exp5_2.
14、mdl,23,例exp5_3.mdl,24,二、SIMULINK线的处理 exp5_4.mdl,1)改变粗细 2)设定标签 3)线的折弯 4)分支,SIMULINK模型的构建是通过用线将各种功能模块连接而构成的。 可以对线做如下操作:,25,6.3 SIMULINK自定义功能模块,一、自定义功能模块的方法二、自定义功能模块的封装,26,一、自定义功能模块的方法 (1)采用Signal&Systems 模块库中的Subsystem功能模块,利用其编辑区设计组合新的功能模块;A. 将模块库中的Subsystem功能模块复制到打开的模型窗口中。 B. 双击Subsystem功能模块,进入自定义功能模
15、块窗口,从而可以利用已有的基本功能模块设计出新的功能模块。,27,例 exp5_5.mdl,28,(2)将现有的多个功能模块组合起来,形成新的功能模块。对于很大的SIMULINK模型,通过自定义功能模块可以简化图形,减少功能模块的个数,有利于模型的分层构建。A. 在模型窗口中建立所定义功能模块的子模块。 B. 用鼠标将这些需要组合的功能模块框住,然后选择Edit菜单下的Create Subsystem即可。,29,例exp5_6.mdl,30,三、自定义功能模块的封装 exp5_7.mdl exp5_8.mdl exp5_9.mdl exp5_10.mdl 首先选中Subsystem功能模块,
16、再打开Edit菜单中的Mask Subsystem进入mask的编辑窗口,可以看出有3个标签页。 Icon:设定功能模块的外观。 Initialization:设定输入数据窗口(Prompt List)。 Documentation:设计该功能模块的文字说明。,31,1、Icon标签页,Drawing Commands,在该区域内可以用disp指令设定功能模块的文字名称,用plot指令画线,用dpoly指令画转换函数。 disp(text):在功能模块上显示设定的文字内容。disp(text1ntext2)分行显示文字text1和text2 plot(x1 x2 xn,y1 y2 yn):在功
17、能模块上画出由x1 y1经x2 y2经x3 y3 直到xn,yn为止的直线。功能模块的左下角会根据目前的坐标刻度被正规化为0,0,右上角则会依据目前的坐标刻度被正规化为1,1。 dpoly(num,den):按s次数的降幂排序,在功能模块上显示连续的传递函数。 dpoly(num,den,z):按z次数的降幂排序,在功能模块上显示离散的传递函数。,32,用户还可以设置一些参数来控制图标的属性,这些属性在Icon页左侧的下拉式列表中进行选择。 Icon frame:Visible 显示外框线;Invisible:隐藏外框线。 Icon Transparency:Opaque 隐藏输入输出的标签;
18、Transparent:显示输入输出的标签。 Icon Rotation:旋转模块。 Drawing coordinate:画图时的坐标系。,33,2、Initialization标签页,主要是设计输入提示(prompt)以及对应的变量名称(variable)。若配合在initialization commands内编辑程序,可以发挥功能模块的功能来执行特定的操作。 在prompt编辑框中输入文字,这些文字就会出现在prompt列表中;在variable列表中输入变量名称,则prompt中的文字对应该变量的说明。如果要增加新的项目,可以点击边上的Add键。Up和Down按钮用于执行项目间的位置
19、调整。 Control type列表给用户提供选择设计的编辑区。 Assignment属性用于配合Control type的不同选择来提供不同的变量值,变量值有Evaluate和Literal两种,34,3、Documentation标签页,主要针对完成的功能模块编写相应的说明文字和Help。 在Block description中输入的文字,会出现在参数窗口的说明部分。 在Block help中输入的文字则会显示在单击参数窗口中的help按钮后浏览器所加载的HTML文件中。 Mask type:在此处输入的文字作为封装模块的标注性说明,在模型窗口下,将鼠标指向模块,则会显示该文字。当然必须先
20、在View菜单中选择Block Data TipsShow Block Data Tips。,35,6.4 SIMULINK仿真的运行,一、设置仿真参数和选择解法器 二、启动仿真 三、仿真结果分析,36,一、设置仿真参数和选择解法器 选择Simulation菜单下的Configuration Parameters命令,就会弹出一个仿真参数对话框,它主要用三个页面来管理仿真的参数。 Solver页,它允许用户设置仿真的开始和结束时间,选择解法器,说明解法器参数及选择一些输出选项。 Workspace I/O页,作用是管理模型从MATLAB工作空间的输入和对它的输出。 Diagnostics页,允
21、许用户选择Simulink在仿真中显示的警告信息的等级。,37,1、Solver页,可以进行的设置有:选择仿真开始和结束的时间;选择解法器,并设定它的参数;选择输出项。 仿真时间:注意这里的时间概念与真实的时间并不一样,只是计算机仿真中对时间的一种表示。总的说来,执行一次仿真要耗费的时间依赖于很多因素,包括模型的复杂程度、解法器及其步长的选择、计算机时钟的速度等等。 仿真步长模式:用户在Type后面的第一个下拉选项框中指定仿真的步长选取方式,可供选择的有Variable-step(变步长)和Fixed-step(固定步长)方式。变步长模式可以在仿真的过程中改变步长,提供误差控制和过零检测。固定
22、步长模式在仿真过程中提供固定的步长,不提供误差控制和过零检测。,38,变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。 ode45:缺省值,四/五阶龙格库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器。一般来说,面对一个仿真问题最好是首先试试ode45。 ode23:二/三阶龙格库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。 ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode1
23、13是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。 ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。,39,ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。 ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。 ode23tb:是TR-BDF2的一种
24、实现, TR-BDF2 是具有两个阶段的隐式龙格库塔公式。 discrtet:当Simulink检查到模型没有连续状态时使用它。,40,固定步长模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。 ode5:缺省值,是ode45的固定步长版本,适用于大多数连续或离散系统,不适用于刚性系统。 ode4:四阶龙格库塔法,具有一定的计算精度。 ode3:固定步长的二/三阶龙格库塔法。 ode2:改进的欧拉法。 ode1:欧拉法。 discrete:是一个实现积分的固定步长解法器,它适合于离散无连续状态的系统。,41,步长参数(变步长模式) Maximum step si
25、ze(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50” 。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。 Initial step size(初始步长参数):一般建议使用“auto” 即可。 仿真精度的定义(变步长模式) Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,表示状态的计算值要精确到0.1%。 Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误
26、差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。,42,Mode(固定步长模式选择) Multitasking:使用速率转换模块可以减少模型中的非法速率转换。Simulink提供了两个这样的模块:unit delay模块(从慢速率到快速率的非法转换)和zero-order hold模块(快速率到慢速率的转换)。 Singletasking:不检查模块间的速率转换,它在建立单任务系统模型时非常有用,在这种系统就不存在任务同步问题。 Auto:simulink会根据模型中模块的采样速率是否一致,自动决定切换到multitasking和singletaskin
27、g。,43,输出选项(变步长模式) Refine output:产生更光滑的输出曲线,改变精细因子比减小仿真步长更有效。精细输出只能在变步长模式中才能使用,并且在ode45效果最好。 Produce additional output:它允许用户直接指定产生输出的时间点。与精细因子相比,这个选项会改变仿真的步长。 Produce specified output only:它让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。,44,2、Workspace I/O页,主要设置SIMULINK与M
28、ATLAB工作空间交换数值的有关选项。 Load from workspace:可从MATLAB工作空间获取时间和输入变量,一般时间变量定义为t,输入变量定义为u。 Initial state用来定义从MATLAB工作空间获得的状态初始值的变量名。 Save to workspace:用来设置存往MATLAB工作空间的变量类型和变量名。一般存往工作空间的变量包括输出时间向量(Time)、状态向量(States)和输出变量(Output)。 Final state用来定义将系统稳态值存往工作空间所使用的变量名。 Save option:用来设置存往工作空间的有关选项。,45,3、Diagnost
29、ics页,分成两个部分:仿真选项和配置选项。 1)配置选项:列举了一些常见的事件类型,以及当SIMULINK检查到这些事件时给予的处理。 2)仿真选项:包括是否进行一致性检验、是否禁用过零检测、是否禁止复用缓存、是否进行不同版本的SIMULINK的检验等。 除了上述3个主要的页外,仿真参数设置窗口还包括real-time workshop页,主要用于与C语言编辑器的交换,通过它可以直接从SIMULINK模型生成代码并且自动建立可以在不同环境下运行的程序,这些环境包括实时系统和单机仿真。,46,二、启动仿真 选择Simulink菜单下的start选项来启动仿真。在MATLAB命令窗口中通过函数进
30、行,格式如下:t,x,y=sim(模型文件名,to tf,simset(参数1,参数值1,参数2,参数值2, )其中,to为仿真起始时间,tf为仿真终止时间。 t,x,y-t为返回的时间向量值,x为返回的状态值,y为返回的输出向量值。,47,simset定义了仿真参数,包括以下一些主要参数: AbsTol:默认值为1e-6设定绝对误差范围。 Decimation:默认值为1,决定隔多少个点返回状态和输出值。 Solver:解法器的选择。 MaxRows:默认值为0,表示不限制。若为大于零的值,则表示限制输出和状态的规模,使其最大行数等于该数值。 InitialState:一个向量值,用于设定初
31、始状态。 FixedStep:用一个正数表示步阶的大小,仅用于固定步长模式。 MaxStep:默认值为auto。用于变步长模式,表示最大的步阶大小。 已知模型文件名称,可以用以下命令得到该模型的仿真参数: simget(模型文件名)三、仿真结果分析,48,6.5 SIMULINK s-function的设计,一、s-function的概念二、建立m文件s-function三、s-function举例,49,一、s-function的概念 s-function是一个动态系统的计算机语言描述,在MATLAB里,用户可以选择用m文件编写,也可以用c或mex文件编写。 S-function提供了扩展S
32、imulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解法器进行交互。 S-function最广泛的用途是定制用户自己的Simulink模块。它的形式十分通用,能够支持连续系统、离散系统和混合系统。,50,二、建立m文件s-function 1、使用模板文件:sfuntmp1. m (根目录下toolbox/simulink/blocks/) function sys,x0,str,ts,simStateCompliance = sfuntmpl(t,x,u,flag) 模板文件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子函
33、数。 模板文件只是Simulink为方便用户而提供的一种参考格式,并不是编写s-function的语法要求,用户完全可以改变子函数的名称,或者直接把代码写在主函数里,但使用模板文件的好处是,比较方便,而且条理清晰。,51,m文件s-function可用的子函数: mdlInitializeSizes:定义s-function模块的基本特性,包括采样时间、连续或者离散状态的初始条件和sizes数组。 mdlDerivatives:计算连续状态变量的微分方程。 mdlUpdate:更新离散状态、采样时间和主时间步的要求。 mdlOutputs:计算s-function的输出。 mdlGetTime
34、OfNextVarHit:计算下一个采样点的绝对时间。 mdlTerminate:实现仿真任务必须的结束。,52,概括说来,建立s-function可以分成两个分离的任务: 初始化模块特性:包括输入输出信号的宽度,离散连续状态的初始条件和采样时间。 将算法放到合适的s-function子函数中去。,53,2、定义s-function的初始信息 用户必须在s-函数里提供有关s-函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。 Sizes数组是s-function函数信息的载体,它内部的字段意义: NumContSta
35、tes:连续状态的个数(状态向量连续部分的宽度) NumDiscStates:离散状态的个数(状态向量离散部分的宽度) NumOutputs: 输出变量的个数(输出向量的宽度) NumInputs:输入变量的个数(输入向量的宽度) DirFeedthrough:有无直接馈入 NumSampleTimes:采样时间的个数,54,3、输入和输出参量说明 function sys,x0,str,ts,simStateCompliance = sfuntmpl(t,x,u,flag) S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为: t:当前仿真时间
36、,通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。 x:状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。 u:输入向量。 flag:控制在每一个仿真阶段调用哪一个子函数,由Simulink在调用时自动取值。,55,S-function默认的4个返回参数为sys、x0、str和ts,它们的次序不能变动,代表的意义分别为: sys:通用返回参数,它所返回值的意义取决于flag的值。 x0: 是初始状态值(没有状态时是一个空矩阵),只在flag值为0时才有效,其他时候都会被忽略。 str:没有什么意义,是MathWorks公司为将来的应用保留的,m文件s-function必须把它设为空矩阵。 ts:是一个m2的矩阵,它的两列分别表示采样时间间隔和偏移。,56,三、s-function举例 例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(非模板文件形式),