1、1,第四章 之 simulink的基础应用,2,simulink是Mathworks公司开发的另一个著名的动态仿真系统,它是Matlab的一个附加组件,为用户提供了一个建模与仿真的工作平台。 由于它的许多功能是基于Matlab软件平台的,而且必须是在Matlab环境下运行,有人也将simulink称之为Matlab的一个工具箱。 它能够实现动态系统建模与仿真的环境集成,且可以根据设计及使用的要求,对系统进行修改与优化,以提高系统工作的性能,实现高效开发系统的目的,概述,3,4-1 simulink的特色,simulink是Matlab软件的扩展与特色体现,它是实现动态系统建模和仿真的一个软件包
2、; simulink可以模拟线性与非线性系统,连续与非连续系统,或它们的混合系统,它是强大的系统仿真工具; simulink的另外一个重要特点就是它的开放性,它允许用户定制自己的功能模块和模块库。,4,4-2 simulink的重要操作方法,运行simulink有三种方式: 方式(1)在Matlab的命令窗口直接键入simulink; 方式(2)点击Matlab的工具条上的simulink的快捷键图标; 方式(3)在Matlab的菜单中,选择FileNewModel,会弹出新建立的模型窗口,名为untitled。,5,simulink模块库浏览器,6,打开方法示意图,7,新建的模型窗口,8,认
3、识simulink的重要模块库,Continuous(连续模块) Discrete(离散模块) Look-Up Tables(查询表模块库) Math Operations(数学运算模块库) Model verification(模型验证模块库) Model-Wide Utilities(模块实用模块库) Ports & Subsystems(端口和子系统模块库) Signal Atributies(信号属性模块库) Signal Routing(信号路由模块库) Sinks(接收器模块库) Sources(输入源模块库) User-Defined Functions(用户定义模块库) Dis
4、continuities(非线性模块库),9,Continuous(连续模块),10,Discrete(离散模块),11,Look-Up Tables(查询表模块库),12,Math Operations(数学运算模块库),13,Model verification(模型验证模块库),14,Model-Wide Utilities(模块实用模块库),15,Ports & Subsystems(端口和子系统模块库),16,Signal Atributies(信号属性模块库),17,Signal Routing(信号路由模块库),18,Sinks(接收器模块库),19,Sources(输入源模块库
5、),20,User-Defined Functions(用户定义模块库),21,Discontinuities(非线性模块库),22,4-3仿真模型的搭建方法与步骤,如何正确且快速使用simulink,对于初学者来说,这是最为关心的事情。 已知某直流比较仪的输出特性曲线的表达式为: I1=kI2+ I0 式中I1和I2分别为一次电流和二次电流,I0为比较仪的偏置系数,k为比较仪的灵敏度,且已知k=114和I0=110mA,试用simulink绘制该比较仪的输出特性曲线。,23,1、调用功能模块,24,(1)Ramp模块,用来产生I2信号,也来自输入源Sources模块库; (2)Constan
6、t模块,用来产生常数I0,来自simulink模块库中的输入源Sources模块库; (3)Gain模块,将输入信号乘上k,来自Math Operations模块库; (4)sum模块,把两个量I0和k I2加起来,也来自Math Operations模块库; (5)scope模块,显示比较仪输出特性曲线的结果,来自Sink接收器模块库,25,2、创建并保存; 3、连接模块并设置其参数模型文件,26,Constant模块属性参数对话框,27,Ramp模块属性参数对话框,28,Gain模块属性参数对话框,29,Sum模块属性参数对话框,30,Scope模块属性参数对话框,31,仿真参数的设定对话
7、框,32,仿真结果,33,4-3-2导出仿真数据的操作技巧,点击Scope模块属性参数对话框中的“Data history”按钮,弹出有关Scope模块数据显示属性参数设置对话框,勾掉“Save data to workspace”,同时将“Data history”对话框中的“Format”项的参数设置为Array,接着给输出数据取名; 返回到Matlab的界面窗口,便可以看到outputcurve变量名被显示在workspace窗口中;,34,outputcurve变量在workspace窗口中显示出来,35,命令语句,在MATALB的命令窗口中执行以下命令语句: save outputc
8、urve.txt outputcurve -ascii 还可以在MATALB的命令窗口中执行以下命令语句: x=outputcurve(:,1) ; y=outputcurve(:,2) plot(x,y) title(直流比较仪输出特性曲线) ; xlabel(二次电流I2/mA) ; ylabel(一次电流I1/A),36,执行结果,37,4-3-3创建与封装子系统的基本方法,建立子系统有以下几个优点: (1)可以减少显示在模型窗口的模块数,这样用户的模型窗口就会很整齐,而且条理清晰、层次分明,也方便用户连线; (2)可以将功能相关的模块放在一起,用户可以用建立子系统创建自己的模块库; (
9、3)可以生成层次化的模型图表,即子系统在一层,组成子系统的模块在另一层。这样用户在设计模型时,既可采用自上而下的设计方法,也可以采用自下而上的设计方法。,38,创建与封装子系统的途径,(1)采用Ports & Subsystems端口和子系统模块库的Subsystem功能模块:增加一个子系统模块到你的模型中,并在打开的模型的编辑区设计组合新的功能模块,以建立子系统; (2)将现有的多个功能模块连接好,再组合起来,然后再把这些模块组合成新的功能模块,以建立子系统。,39,从Ports & Subsystems 模块库中复制Subsystem功能模块,40,举例:三相电压波形的子系统,41,三相电
10、压波形的子系统,42,所需要模块,(1)Sine Wave模块,用来产生正弦波形,所处模块库为Sources输入源模块库; (2)Transport Delay模块,用来产生波形延迟,同样来自Sources输入源模块库; (3)Mux模块,将三个输入信号组合为总线输出信号,来自Signal Routing模块库; (4)scope模块,显示比较仪输出特性曲线的结果,来自Sink接收器模块库。,43,Sine Wave模块参数对话框,44,Transport Delay模块参数对话框,45,三相电压波形仿真结果,46,由功能模块组合成子系统,47,所需要功能模块,Step模块(在Simulink
11、模块库中的Sources模块库中调用)、Gain模块(在Simulink模块库中的Math Operations模块库中调用)、Integrator模块(在Simulink模块库中的Continuous模块库中调用)、Derivative 模块(在Simulink模块库中的Continuous模块库中调用)、Sum模块(在Simulink模块库中的Math Operations模块库中调用,本例选择“rectangular”(矩形),将List of signs栏置为+,)和Scope模块(在Simulink模块库中的Sinks模块库中调用),48,设置Step模块参数,49,选中要自定义功能
12、模块的那些功能模块,50,封装完毕的子系统,51,给创建完毕的子系统重新命名,52,被重新命名的子系统,53,对子系统进行封装,54,修改子系统的图标为波音747的图标,55,设置子系统的新图标,56,“直线”图标,57,“学习”图标,58,4-4 S-function的设计方法,simulink为用户提供了许多内置的基本模块库,通过这些功能模块进行连接而构成系统模型。对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于simulink原来提供的内置模块。 simulink中的函数也称之为系统函数,简称S函数。它是为用户提供的一种simulink功能的强大编程机制。通
13、过编写S函数,用户可以向S函数中添加自己的算法,该算法可以用Matlab编写,也可以用C语言等其它编程语言进行编写。并且simulink 中S-function是一种功能强大的能够对模块库进行扩展的新工具。,59,S-function的基本含义,S-function是一个动态系统的计算机语言描述,在Matlab里,用户可以选择用M文件编写,也可以用S或MEX文件编写,在这里只介绍如何用M文件编辑器编写S-function。 S-function提供了扩展simulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解算器进行交互联系。 S函数模块存放在Simulink模块
14、库中的User-Defined Functions用户定义模块库中,通过此模块可以创建包含S函数simulink模型。S函数文件名区域要填写S函数的文件名,60,simulink模块的图标与参数,61,S-function所默认的是4个输入参数,62,S-function所默认的4个返回参数,63,M文件中的S-function常用子函数,64,Sizes数组内部字段意义,65,标示器flag的含义,66,4-6 典型功能模块应用方法举例,本例熟悉使用非线性模块库Discontinuities(如图4-15所示)中的几种典型功能模块如死区非线性模块(Dead Zone)、量化模块(Quanti
15、zer)和MathOperations模块库中Sign功能模块,对于饱和非线性(Saturation)模块将在后续章节中介绍。构建如图4-69所示的simulink的仿真模型,保存为exm_9.mdl,67,非线性模块(库)的使用技巧,68,所需功能模块,exm_9模型由以下几个功能模块构成: (1)Sine wave模块(在simulink模块库中的Sources模块库中); (2) Quantizer和Dead Zone模块(在simulink模块库中的Discontinuities模块库中); (3)Sign模块(在simulink模块库中的Math Operations模块库中); (
16、4)mux模块(在simulink模块库中的Signal Routing模块库中); (5)Scope模块(在simulink模块库中的Sinks模块库中调用)。,69,设置功能模块,(1)Sine wave模块:Amplitude/V(幅值)为10,Frequency/Rads-1(频率)为100,其它为该模块的默认参数; (2)Quantizer模块:Quantization interval(采样间隔)为1e-3; (3)Dead Zone模块:Start of dead zone (死区起始值)为-5,End of dead zone(死区终止值)为5; (4)Sign模块:使用它的默
17、认参数,当输入信号大于0,其输出为1,反之,当输入小于0,则输出为-1; (5)Scope模块:将3个Scope模块(分别被命名为Scope1、Scope2和Scope3)的Data history参数中的Variable name 分别设置为out1、out2、和out3,Format均设置为Array;,70,分析仿真结果,正弦波形和Quantizer模块输出的采样波形,71,正弦波形和Dead Zone模块输出波形,72,正弦波形和Sign模块输出波形,73,开关Switch模块的使用技巧,举例10:本例熟悉使用Signal Routing模块库中的Switch模块、Sources模块库
18、中的Constant模块和Sine wave模块。构建如图4-74所示的simulink的仿真模型,保存为exm_10.mdl。,74,所需功能模块,(1)Sine wave模块和Constant模块(均在simulink模块库中的Sources模块库中调用); (2)Switch模块和mux模块(均在simulink模块库中的Signal Routing模块库中调用); (3)Scope模块(在simulink模块库中的Sinks模块库中调用)。,75,Switch模块和Constant模块,76,设置功能模块,(1)Sine wave模块:Amplitude/V(幅值)为2,Frequen
19、cy/Rads-1(频率)为100,其它为该模块的默认参数; (2)Constant模块:Constant value(恒值)输入栏为0.5; (3)Switch模块:按照图4-75所示参数进行设置,其Threshold栏的参数为0.9; (4)Mux模块:Number of inputs输入栏设置为3,Display option栏选取Signals; (5)Scope模块:将4个Scope模块(分别被命名为Scope1、Scope2、Scope3和Scope4)的Data history参数中的Variable name 分别设置为Sine_wave、Constant、Output和out
20、,Format均设置为Array;,77,仿真结果,-输入的正弦信号,Switch模块输出波形 ,-Constant输出波形,78,离散傅立叶分析模块的使用技巧,本例熟悉离散傅立叶分析的Discrete Fourier模块的使用方法。构建如图4-77所示的simulink的仿真模型,保存为exm_11.mdl。,79,所需功能模块,本例的模型由以下几个功能模块构成: (1)Sine wave模块和Constant模块(均在simulink模块库中的Sources模块库中调用); (2)Sum模块(在simulink模块库中的Math Operations模块库中调用); (3)Display模
21、块(在simulink模块库中的Sinks模块库中调用); (4)Discrete Fourier模块,其调用方法为:点击SimPowersystems模块库,点击Extra Library模块库,点击Discrete Measurements模块库,即可调用该模块。,80,利用Discrete Fourier模块构建的simulink仿真模型,81,滤波器Filter模块的使用技巧,本例熟悉滤波器Filter模块的使用方法。构建如图4-78所示的simulink的仿真模型,保存为exm_12.mdl。滤波器Filter模块主要分为1st-Order filter(一阶滤波)和2nd-Orde
22、r filter(二阶滤波)。1st-Order filter模块,又分为低通和高通滤波器两种类型,如图4-79(a)所示;2nd-Order filter模块,它分为低通、高通、带通和带阻滤波器四种类型,如图4-79(b)所示。调用Filter模块的方法:点击SimPowersystems模块库,点击Extra Library模块库,点击Control Blocks模块库,即可调用它们。,82,利用滤波器Filter构建的simulink仿真模型,83,所需功能模块,exm_12模型由以下几个功能模块构成:(1)Sine wave模块和Constant模块(均在simulink模块库中的So
23、urces模块库中调用);(2)Sum模块(在simulink模块库中的Math Operations模块库中调用);(3)Scope模块(在simulink模块库中的Sinks模块库中调用);(4)Mux模块(在simulink模块库中的Signal Routing模块库中调用)(5)1st-Order filter(一阶滤波)和2nd-Order filter(二阶滤波)。,84,设置功能模块,(1)连续调用4(或者复制3)次Sine wave模块; (2)Constant模块:Constant value(恒值)输入栏为-5; (3)Sum模块:选择“rectangular”(矩形),在List of signs栏中,键入五个“+”即+,然后点击ok,设置结果如图4-78所示; (4)连续调用2(或者复制1)次1st-Order filter(一阶滤波),连续调用2(或者复制1)次2nd-Order filter(二阶滤波); (5)连续调用3(或者复制2)次Mux模块; (6)连续调用4(或者复制3)次Scope模块;,85,一阶和二阶滤波器输出波形,-一阶滤波 二阶滤波,86,两种二阶滤波器输出波形,-由两个1st-Order filter 仅由2nd-Order filter,87,二阶和四阶滤波器的输出波形,-二阶滤波 四阶滤波,88,谢谢!,