1、第11章Simulink仿真与分析【本章学习目标】熟悉Simulink的操作环境。掌握建立系统模型的方法。了解子系统模块的建立与封装技术。了解S函数的功能与设计方法。11.1 Simulink概述Simulink提供了用于系统设计、仿真和分析的工具1 1启动启动SimulinkSimulink在MATLAB桌面单击“主页”选项卡工具栏的“Simulink”按钮,或从“主页”选项卡工具栏的“新建”按钮下的展开列表中选“Simulink Model”项,或在命令行窗口输入simulink命令11.1.1 Simulink的工作环境11.1 Simulink概述2Simulink编辑器11.1.1
2、Simulink的工作环境11.1 Simulink概述3模块库浏览器模块库浏览器主要用于检索Simulink模块和模块库。单击Simulink编辑器工具栏中的“Library Browser”按钮,或在命令行窗口执行以下命令打开模块库浏览器。slLibraryBrowser11.1.1 Simulink的工作环境11.1 Simulink概述1模型元素(1)信源(Source)。用于为模型指定或生成输入信号,可以是常量(Constant)、时间(Clock)、正弦波(Sine Wave)、锯齿(Step)波等。(2)系统模块。用于处理输入信号,生成输出信号。例如,数学运算(Math Oper
3、ations)模块、连续系统(Continuous)模块、离散系统(Discrete)模块等。(3)信宿(Sink)。用于可视化呈现输出信号。可以在示波器(Scope)、图形记录仪(XY Graph)上显示仿真结果,也可以把仿真结果存储到文件或导出到工作空间。11.1.2 创建简单模型11.1 Simulink概述2仿真步骤(1)建立系统仿真模型框图,包括添加模块、设置模块参数、进行模块连接等操作。(2)初始化模型参数。(3)启动仿真,观察仿真结果。(4)分析模型,优化模型架构。11.1.2 创建简单模型11.1 Simulink概述3仿真实例【例11.1】利用Simulink仿真y(t)=3
4、sint+sin5(t+/2)。(1)新建一个空模型(Blank Model)。(2)向模型中添加模块正弦信号由信源模块库(Sources)中的正弦波模块(Sine Wave)提供,求和用数学运算模块库(Math Operations)中的加法模块(Add)实现,再用信宿模块库(Sinks)中的示波器模块(Scope)输出波形11.1.2 创建简单模型11.1 Simulink概述3仿真实例【例11.1】利用Simulink仿真y(t)=3sint+sin5(t+/2)。(1)新建一个空模型(Blank Model)。(2)向模型中添加模块(3)模块连接11.1.2 创建简单模型11.1 Si
5、mulink概述3仿真实例【例11.1】利用Simulink仿真y(t)=3sint+sin5(t+/2)。(1)新建一个空模型(Blank Model)。(2)向模型中添加模块(3)模块连接(4)配置模块正弦波的幅值、频率模型建好后,单击工具栏的Save按钮进行保存,或从模型编辑器的File菜单中选Save或Save as菜单项保存模型。MATLAB 2017b默认以.slx格式保存模型。11.1.2 创建简单模型11.1 Simulink概述3仿真实例【例11.1】利用Simulink仿真y(t)=3sint+sin5(t+/2)。(1)新建一个空模型(Blank Model)。(2)向模
6、型中添加模块(3)模块连接(4)配置模块(5)设置系统仿真参数11.1.2 创建简单模型11.1 Simulink概述3仿真实例【例11.1】利用Simulink仿真y(t)=3sint+sin5(t+/2)。(1)新建一个空模型(Blank Model)。(2)向模型中添加模块(3)模块连接(4)配置模块(5)设置系统仿真参数(6)仿真操作。11.1.2 创建简单模型11.2 系统模型的构建1Simulink的基本模块 连续和离散动态模块,如连续系统模块库(Continuous)中包含积分(Integrator)、微分(Derivative)、状态(State-Space)方程、传递函数(T
7、ransfer Fcn)等许多模块,可供连续系统建模使用。算法模块,如 Sum(加法)、Product(乘法)和 Lookup Table(查找表)等。结构模块,如 Mux、Switch 和 Bus Selector 等。11.2.1 Simulink模块11.2 系统模型的构建2模块操作(1)调整模块(2)添加模型标识(3)选择模块11.2.1 Simulink模块11.2 系统模型的构建3模块的连接(1)连接两个模块(2)连线的调整(3)连线的分支11.2.1 Simulink模块11.2 系统模型的构建4 4模型元素的参数模型元素的参数常用以下方法编辑模型元素的参数。(1)在模型编辑器中
8、,选View菜单的Property Inspector菜单项,或按Ctrl+Shift+I,打开Property Inspector面板进行设置。Parameters选项卡用于设置模型元素的参数Properties选项卡用于设置模型元素的属性Info选项卡用于设置模型元素的注解、说明。(2)在模型编辑器中双击要设置参数的模块,或从Diagram菜单选Block Parameters菜单项,或从模块右键菜单中选Block Parameters项,打开Block Parameters对话框进行设置。11.2.1 Simulink模块11.2 系统模型的构建5 5模型元素的属性模型元素的属性常用常用
9、以下方法编辑模型元素属性。以下方法编辑模型元素属性。(1 1)在)在Property InspectorProperty Inspector面板的面板的PropertiesProperties选项卡中选项卡中设置。设置。(2 2)在在Block Block PropertiesProperties对话框对话框中设置中设置。GeneralGeneral选项卡用于设置模块基本属性。选项卡用于设置模块基本属性。Block AnnotationBlock Annotation选项选项卡用于设置模块的卡用于设置模块的注解注解CallbacksCallbacks选项卡用于指定当对该模块实施某种操作时需要执
10、选项卡用于指定当对该模块实施某种操作时需要执行的行的MATLABMATLAB命令或程序命令或程序。11.2.1 Simulink模块11.2 系统模型的构建5 5模型元素的属性模型元素的属性模块模块基本属性包括:基本属性包括:Description属性。用于描述模块在模型中的作用以及用法。Priority属性。用于指定模块在模型中的优先级。Tag属性。用于指定模块的标识。11.2.1 Simulink模块11.2 系统模型的构建1 1新建新建模型模型(1)在模型编辑器中单击工具栏的Create a Simulink model using the factory default setting
11、s按钮,或按Ctrl+N。(2)在模块库浏览器中单击工具栏的Create a Simulink model using the factory default settings按钮。(3)在命令行窗口输入Simulink命令,或单击MATLAB桌面功能区的主页选项卡工具栏的“新建”按钮,从列表中选Simulink Model项,或单击工具栏的Simulink按钮,弹出Simulink Start Page对话框,从中选择一种模型模板创建模型或打开一个已有的模型。11.2.2 模型设计11.2 系统模型的构建2 2编辑编辑模型模型把预定义的模块放到模型框图中称为模块实例化。在Simulink中,
12、模型的数据有三种:方程系数、状态和信号。系数定义系统动态特性和行为,状态反映系统的初始特性,信号是系统的输入数据,也是系统的输出数据。MATLAB 2012b以前的版本,模型存储为.mdl文件,后来的版本增加了使用Unicode UTF-8的XML标准的.slx格式。11.2.2 模型设计11.2 系统模型的构建3 3模型模型信号信号输入信号用于将数据加载到要仿真的模型中,而输出信号用于记录仿真结果。11.2.2 模型设计信号的基本属性包括:(1)数据类型:数值型、布尔型、枚举型或定点型。(2)维度:标量、矢量、矩阵、N-D 或可变大小数组。(3)值域、初始值和度量单位。(4)信号名称和标签1
13、1.2 系统模型的构建4 4模型模型输入输入(1)利用信源模块,如Sine Wave模块,生成基于时间或基于样本的正弦波信号。(2)利用根级输入端口模块,如Inport、Enable、Trigger模块,通过Root Inport Mapper工具加载信号数据。(3)使用From File模块从MAT 文件中读取数据,并将数据转换为信号。(4)使用From Spreadsheet模块从Excel电子表格或CSV电子表格读取数据,并将数据转换为一个或多个信号。(5)使用From Workspace模块从工作空间读取数据,并将数据转换为信号。(6)利用Signal Builder模块导入数据。11
14、.2.2 模型设计11.3 系统的仿真与分析1 1SolverSolver参数设置参数设置Solver(求解器)是指模型中所采用的计算系统动态行为的积分算法。参数在Configuration Parameters对话框中设置。在Configuration Parameters对话框左窗格选择Solver项,在右窗格中会列出Solver的相关参数。11.3.1 设置仿真参数11.3 系统的仿真与分析1 1SolverSolver参数设置参数设置(1)设置仿真起始和终止时间(2)选择仿真算法仿真算法根据步长的变化分为固定步长类算法和变步长类算法。11.3.1 设置仿真参数11.3 系统的仿真与分析
15、2 2Data Import/ExportData Import/Export参数参数设置设置导入(Import)的数据包括模型的输入信号和初始状态导出(Export)的数据包括输出信号和仿真过程的状态数据。(1)Load from workspace(从工作空间加载数据)描述数据可以采用以下格式。数组格式。状态矩阵的每一行对应一个时刻各个模块的状态,每一列对应模型中一个模块的状态;输出矩阵的每一列对应一个模型输出端口,每一行对应模型在一个时刻的输出。例如,在命令行窗口输入以下命令,定义变量t和u。t=0:0.1:10;u=sin(t),sin(3*t),sin(5*t);u=sin(t),s
16、in(3*t)/3,sin(5*t)/5;11.3.1 设置仿真参数11.3 系统的仿真与分析2 2Data Import/ExportData Import/Export参数参数设置设置(1)Load from workspace(从工作空间加载数据)描述数据可以采用以下格式。数组格式。包含时间的结构体格式。例如,在命令行窗口输入以下命令,定义变量Signal1。Signal1.time=0:0.1:10;Signal1.signals(1).values=sin(t);Signal1.signals(2).values=sin(3*t)/3;Signal1.signals(3).value
17、s=sin(5*t)/5;11.3.1 设置仿真参数11.3 系统的仿真与分析2 2Data Import/ExportData Import/Export参数参数设置设置(1)Load from workspace(从工作空间加载数据)描述数据可以采用以下格式。数组格式。包含时间的结构体格式。结构体格式。不存储仿真时间。数据集格式。使用 MATLAB的timeseries对象存储数据。11.3.1 设置仿真参数11.3 系统的仿真与分析2 2Data Import/ExportData Import/Export参数参数设置设置(2)Save to workspace or file(数据保
18、存至工作空间或文件)在Save to workspace or file栏中,可以设置输出的数据,包括:Time(时钟)、State(状态)、Output(输出端口)和Signals(信号)等。11.3.1 设置仿真参数11.3 系统的仿真与分析2 2Data Import/ExportData Import/Export参数参数设置设置(3)其他参数Limit data points to last用来限定保存到工作空间中的数据的最大长度。Decimation是指从几个数据中抽取一个,如在编辑框内输入4,则表示输出数据时,每4个数据取一个,也就是每隔3个数据取一个数据,默认为1。11.3.1
19、 设置仿真参数11.3 系统的仿真与分析1.1.交互仿真交互仿真(1)Normal:标准模式(默认设置),以解释方式运行,仿真过程中能够灵活地更改模型参数和显示结果,但仿真运行最慢。(2)Accelerator:加速器模式,通过创建和执行已编译的目标代码来提高仿真性能,而且在仿真过程中能够较灵活地更改模型参数。(3)Rapid Accelerator:快速加速器模式,比 Accelerator模式能够更快地进行模型仿真。不支持调试器和性能评估器。11.3.2 运行仿真与仿真结果分析11.3 系统的仿真与分析2 2.命令仿真命令仿真以不同参数调用仿真函数sim,可以对同一系统在不同的仿真参数或不
20、同的系统模块参数下进行仿真。Sim函数调用格式如下。simOut=sim(模型,属性1,属性值1,属性2,属性值2.);11.3.2 运行仿真与仿真结果分析simOut=sim(simdemo,SimulationMode,rapid,AbsTol,1e-5,.StopTime,30,.ZeroCross,on,.SaveTime,on,TimeSaveName,tout,.SaveState,on,StateSaveName,xoutNew,.SaveOutput,on,OutputSaveName,youtNew,.SignalLogging,on,SignalLoggingName,lo
21、gsout)11.3 系统的仿真与分析3.3.仿真结果输出仿真结果输出 使用Scope模块和波形查看器;通过Simulation Data Inspector。使用Dashboard模块。使用 MATLAB 构建自定义的 HMI 显示屏 将仿真结果导出到 MATLAB 工作区或MAT文件。11.3.2 运行仿真与仿真结果分析11.3 系统的仿真与分析3.3.仿真结果输出仿真结果输出不同的输出方式不同的输出方式 Scope模块用于显示时域信号,XY Graph模块显示连接到该模块输入端的两个信号中的一个相对另一个的变化关系。使用Outport模块、To File模块、To Workspace模块
22、,将结果导出到文件或工作空间。使用Display模块显示仿真结果。11.3.2 运行仿真与仿真结果分析11.3 系统的仿真与分析【例例11.211.2】利用利用SimulinkSimulink仿真仿真求求I=I=。(1)新建1个空模型,在模型中加入1个Clock模块、1个 Fcn模块、1个Integrator模块和1个Display模块。(2)设置模块参数并连接各个模块组成仿真模型。(3)规划模型仿真过程。(4)运行仿真。11.3.2 运行仿真与仿真结果分析230dxx 11.3 系统的仿真与分析【例例11.311.3】有初始状态为有初始状态为0 0的二阶的二阶微分方程微分方程y y+1.5y
23、+10y=2u(t)+10u(t+1.5y+10y=2u(t)+10u(t)其中其中u(t)u(t)是单位阶跃函数,试建立系统模型并仿真。是单位阶跃函数,试建立系统模型并仿真。方法方法1 1:用微分:用微分/积分器直接构造求解微分方程的模型。积分器直接构造求解微分方程的模型。把原微分方程改写把原微分方程改写为为y y=2u(t=2u(t)+10u(t)+10u(t)1.5y1.5y10y10y(1)建立系统模型,并设置各个模型元素的参数和属性。11.3.3 系统仿真实例 11.3 系统的仿真与分析(2)设置模型仿真参数。仿真的停止时间设为5。(3)仿真操作。在Simulink编辑器中双击Sco
24、pe模块,打开示波器窗口。单击模型编辑器工具栏或示波器窗口工具栏的Run按钮11.3.3 系统仿真实例 11.3 系统的仿真与分析方法方法2 2:利用传递函数模块建模:利用传递函数模块建模。对方程两边取Laplace变换,整理得传递函数:根据系统传递函数构建如图仿真模型。11.3.3 系统仿真实例 2()210()()1.510Y ssG sU sss11.3 系统的仿真与分析方法方法3 3:利用状态方程模块建模。:利用状态方程模块建模。若令若令x1=yx1=y,x2=x2=yy,得状态方程,得状态方程其中其中根据系统状态方程构建如图仿真模型。打开Block Parameters对话框,在A
25、A、B B、C C、D D各栏依次输入0,1;-10,-1.5、0;1、10,2和0。11.3.3 系统仿真实例 xxuyxuABCD11.4 子系统1 1通过通过SubsystemSubsystem模块建立模块建立子系统子系统2通过已有的模型建立子系统在模型中选择要组建子系统的模型元素,然后执行创建子系统的命令,将模块集变为子系统。11.4.1 子系统的创建 11.4 子系统【例11.4】PID控制器的传递函数为 建立PID控制器的模型并建立子系统。先建立PID控制器的模型在模型中框选所有模块(不包括In1和Out1模块)后,按键Ctrl+G,所选模块集将被一个Subsystem模块取代()
26、ipdKU sKK ss11.4 子系统1 1使能子系统使能子系统若子系统在控制信号为正时执行,控制信号为负时结束执行,则称该子系统为使能子系统(Enabled Subsystem)。使能子系统外观上有一个使能控制信号输入端。利用Ports&Subsystems模块库的Enabled Subsystem模块来建立使能子系统 从已有模型中框选模块后,单击左上角工具条中的Create Enabled Subsystem按钮,将该模型转换为使能子系统。11.4.2 条件子系统 11.4 子系统【例11.511.5】利用使能子系统构成一个正弦半波整流器。新建一个空模型,在模型中添加一个Sine Wav
27、e模块、一个Enabled Subsystem模块和一个Scope模块按图连接各模块对子系统的Enable模块进行参数设置。图11.20 Enable模块参数设置对话框图11.21 半波整流波形和正弦波形11.4 子系统2 2触发子系统触发子系统当触发事件发生时子系统开始执行,则称该子系统为触发子系统。利用Ports&Subsystems模块库的Triggered Subsystem模块来建立触发子系统 从已有模型中框选模块后,单击左上角工具条中的Create Triggered Subsystem按钮,将该模型转换为触发子系统。触发形式包括:(1)rising(上跳沿触发)(2)fallin
28、g(下跳沿触发)(3)either(上跳沿或下跳沿触发)(4)function-call(函数调用触发)11.4.2 条件子系统 11.4 子系统【例11.6】利用触发子系统实现将锯齿波转换成方波。新建一个空模型,在模型中添加1个Signal Generator模块、1个Triggered Subsystem模块和一个Scope模块按图连接各模块设置Signal Generator模块参数:在Wave from的下拉列表中选sawtooth项,Amplitude栏内输入0.8,Frequency栏内输入4设置Triggered Subsystem模块参数:从Trigger type列表中选ei
29、ther项 11.4 子系统将一组模块和信号封装在一个模块内,隐藏子系统内容,并为子系统定制自己的图标和参数对话框。选中所要封装的子系统,再从模型编辑器的Diagram菜单中选Mask菜单项的Create Mask子命令,或按Ctrl+M键1Icon&Ports面板的参数设置(1)Icon drawing commands编辑框用于输入命令生成模块图标,例如disp(PID子系统);port_label(input,1,输入端);port_label(output,1,输出端);11.4.3 子系统的封装 11.4 子系统将一组模块和信号封装在一个模块内,隐藏子系统内容,并为子系统定制自己的图
30、标和参数对话框。选中所要封装的子系统,再从模型编辑器的Diagram菜单中选Mask菜单项的Create Mask子命令,或按Ctrl+M键1Icon&Ports面板的参数设置(1)Icon drawing commands编辑框(2)设置封装图标特性11.4.3 子系统的封装 11.4 子系统2Parameters&Dialog面板的参数设置用于设计配置封装子系统的参数对话框。11.4.3 子系统的封装 设置封装子系统的参数PID控制器子系统的参数对话框11.4 子系统3 3InitializationInitialization面板的参数设置面板的参数设置用于初始化封装模块的参数。4 4D
31、ocumentationDocumentation面板的参数设置面板的参数设置用于定义封装模块的功能及用法的说明。11.4.3 子系统的封装 封装后的PID11.5 S函数的设计与应用S函数称为系统函数(System Function),采用非图形化的方式开发Simulink功能模块。11.5.1 用MATLAB语言编写S函数 1 1主函数主函数S函数的主函数引导语句为fname是S函数的主函数名,输入参数t、x、u、flag分别为当前时间、状态向量、输入向量和仿真过程中的状态标志。flag控制在仿真的各阶段调用S函数的哪一个子程序输出参数sys、x0、str和ts用于存储S函数的返回值。fu
32、nction sys,x0,str,ts=fname(t,x,u,flag,p1,p2,.)11.5 S函数的设计与应用11.5.1 用MATLAB语言编写S函数 2 2子函数子函数S函数的定义主要采用switch-case语句,通过flag的值引导调用不同的子函数。(1)初始化子函数mdlInitializeSizes定义S函数的采样时间、输入量、输出量、状态变量的个数以及其他特征。(2)其他子函数状态的动态更新使用mdlDerivatives和mdlUpdate两个子函数,前者用于连续状态的更新,后者用于离散状态的更新。模块输出信号的计算使用mdlOutputs子函数,系统的输出仍由sys
33、变量返回。11.5 S函数的设计与应用11.5.2 S函数的示例【例例11.711.7】采用采用S S函数实现函数实现y=y=asinasinx+bcosx+bcosx x。(1 1)编写)编写S S函数函数function sys,x0,str,ts=sfundemo(t,x,u,flag,a,b)switch flagcase 0 sys,x0,str,ts=mdlInitializeSizes;%调用初始化函数case 3 sys=mdlOutputs(t,x,u,a,b);%调用计算函数case 1,2,4,9 sys=;%返回空值otherwise error(num2str(fla
34、g);%出错处理end function sys,x0,str,ts=mdlInitializeSizes()%调用函数simsizes建立结构体变量sizessizes=simsizes;sizes.NumContStates=0;%无连续状态sizes.NumDiscStates=0;%无离散状态sizes.NumOutputs=1;%有一个输出量sizes.NumInputs=1;%有一个输入信号sizes.DirFeedthrough=1;%输出量中含有输入量sizes.NumSampleTimes=1;%单个采样时间序列%用sizes初始化输出参数syssys=simsizes(si
35、zes);%给其他返回参数赋值x0=;str=;ts=-1,0;%设定输出信号继承输入信号的采样周期 function sys=mdlOutputs(,u,a,b)sys=a*sin(u)+b*cos(u);11.5 S函数的设计与应用11.5.2 S函数的示例(2 2)S S函数模块的封装函数模块的封装建立建立S S函数模块函数模块新建一个Simulink空模型,向模型中添加1个S-Function模块、1个Repeating Sequence模块和1个Scope模块按图设置S-Function模块的参数11.5 S函数的设计与应用11.5.2 S函数的示例(2 2)S S函数模块的封装函数模块的封装建立建立S S函数模块函数模块封装S函数模块。编辑S函数模块的封装参数11.5 S函数的设计与应用11.5.2 S函数的示例(3)S函数模块的测试封装后的S函数模块参数对话框S函数的仿真结果