Download presentation
Presentation is loading. Please wait.
1
第9章 MATLAB环境下的仿真软件Simulink
9.3 仿真模型参数的设置 9.4 子系统的建立与封装 9.5 在命令窗口中创建模型 9.6 S-函数的设计和应用 9.7 仿真系统的线性化分析
2
9.1 Simulink的基本操作 9.1.1 Simulink的启动与退出 1. Simulink的启动 启动Simulink的方法有3种: (1)在MATLAB的命令窗口直接键入simulink。 (2)单击MATLAB命令窗口工具栏上的Simulink模块库浏览器命令按钮。 (3)在MATLAB命令窗口File菜单中选择New菜单项下的Model命令。 2. Simulink的退出 为了退出Simulink,只要关闭所有模型窗口和Simulink模块库窗口即可。
3
Simulink模块的操作 1. 选取模块 2. 复制与删除模块 3. 模块的参数和属性设置 4. 模块外形的调整 5. 模块名的处理 6. 模块的连接 7. 在连线上反映信息。
4
9.2 Simulink的几类基本模块 9.3 仿真模型参数的设置 9.3.1 通过菜单命令设置仿真模型参数 选择模型窗口Simulation菜单中的Parameter命令,将出现仿真参数对话框。对话框分四个选项卡:Solver(算法)、Workspace I/O(工作空间输入输出)、Diagnostics(诊断)和Real-Time Workshop(实时工作间)。
5
在命令窗口调用函数设置仿真模型参数 1. sim 函数 其调用格式为: [t, x, y ] =sim(modname,timespan,options,data); 2. simset函数 它有如下4种用法: (1)options=simset(property,value,…) (2)options=simset(old_opstruct,property,value,…) (3)options=simset(old_opstruct,new_opstruct) (4)simset
6
例9.1以图9.15所示的仿真模型为例,说明simset函数的用法。 (1)在命令窗口输入命令:
option=simset('OutputVariables','x','OutputPoints','all','FinalstateName','date'); [t,x,y]=sim('mode1',[1,10],option) (2)在命令窗口中输命令: optionl=simset('OutputVariables','xy','OutputPoints','all'); [t,x,y]=sim('Simul',[2,4,6,8],option1);
7
3. simget函数 该函数有如下3种用法: (1)struct=simget(model) (2)value=simget(model,property) (3)value=simget(Option,Structure,property) 4.set_param函数 (1)设置仿真参数 调用格式为:set_param(mode,property,value,…) (2)控制仿真进程 调用格式为: set_param(mode,'SimulationCommand','cmd')
8
例9. 2 假设从实际应用领域(力学、电学、生态或社会)中,抽象出有初始状态为0的二阶微分方程x"+0. 2x'+0. 4x=0
例9.2 假设从实际应用领域(力学、电学、生态或社会)中,抽象出有初始状态为0的二阶微分方程x"+0.2x'+0.4x=0.2u (t), u(t)是单位阶跃函数。用积分器直接构造求解微分方程的模型exm1.mdl。 步骤如下: (1)改写微分方程。把原方程改写为:x"=0.2u(t)-0.2x'-0.4x (2)利用Simulink模块库中的标准模块构作模型。 (3)仿真操作。 (4)保存在MATLAB工作空间中的数据。
9
例9.3利用传递函数模块建模。 步骤如下: (1)根据系统传递函数构造系统模型 (2)仿真操作。 例9.4利用状态方程模块建模。 (1)利用构造仿真模型 (2)仿真
10
9.4 子系统的建立与封装 9.4.1 子系统的建立 1. 通过Subsystem模块建立子系统 操作步骤为: (1)先打开Simulink模块库浏览器,新建一个仿真模型。 (2)打开Simulink模块库中的Signals & Systems模块库,复制Subsystem模块到新的模型窗口中。 (3)用鼠标左键双击Subsystem模块打开一个空白的Subsystem窗口,将要组合的模块添加到该窗口中,另外还要根据需要复制一个或多个Input和Output模块,表示子系统的输入和输出端口。这样,一个子系统就建好了。
11
2. 通过已有的模块建立子系统 操作步骤为: (1)先选择要建立子系统的模块,不包括输入端口和输出端口。 (2)选择模型窗口Edit菜单中的Create Subsystem 命令,这样,子系统就建好了。在这种情况下,系统会自动把Input模块和Output模块添加到子系统中,并把原来的模块变为子系统的图标。
12
子系统的条件执行 1. 使能子系统 建立使能子系统的方法是:打开Simulink模块库中的Signals & Systems模块库,将Enable模块复制到子系统模型中,则系统的图标发生了变化。
13
例9.5利用使能原理构成一个正弦半波整流器。 操作步骤如下: (1)打开Simulink模块库浏览器以及新建一个模型窗口。 (2)双击空子系统模块Subsystem,打开其结构模型窗。 (3)将Simulink浏览库中的In输入口模块、Out输出口模块、Enable使能模块拖至子系统的结构模型窗;把In模块的输出直接送到Out模块的输入端;Enable模块无须进行任何连接,且采用它的缺省设置实现题目所需使能子系统。 (4)完成新建模型窗口中各模块间的连接并存盘。 (5)双击示波器模块,打开显示窗。然后选择Simulink菜单中的Start命令,就可看到半波整流波形。
14
2. 触发子系统 触发子系统是指当触发事件发生时开始执行子系统。与使能子系统相类似,触发子系统的建立要把Signals & Systems模块库中的Trigger模块拷贝到子系统中。
15
例9.6 利用触发子系统原理将一锯齿波转换成方波。
操作步骤如下: (1)用Signal Generator、Subsystem和Scope模块构成一子系统,双击Signal Generator模块图标在Wave from的下拉列表框中选择sawtooth,即锯齿波。 (2)将上例中的Enable模块换成Trigger触发模块。双击该模块并选Trigger type触发事件形式为either,即上跳沿或下跳没触发。 (3)完成新建模型窗口中各模块间的连接,并存盘。 (4)双击示波器模块,然后选择Simulink菜单中的start命令,就可看到方波。
16
3. 使能加触发子系统 所谓使能加触发子系统就是把Enable和Tirgger模块都加到子系统中,使能控制信号和触发控制信号共同作用子系统的执行,也就是前两种子系统的综合。该系统的行为方式与触发子系统相似,但只有当使能信号为正时,触发事件才起作用。
17
子系统的封装 子系统的封装过程很简单:先选中所要封装的子系统,再选择模型窗口Edit菜单中的Mask Subsystem命令,这时将出现Mask Editor对话框。 Mask Editor对话框中共包括3个选项卡:Icon、Initialization和Documentation。子系统的封装主要就是对这3页参数进行设置。
18
9.5 在命令窗口中创建模型 9.5.1 构造模型的命令 设置参数
19
9.6 S-函数的设计和应用 S-函数概述 用M文件编写S-函数 (1)MATLAB5.3为用户提供了一个模板,只要在必要的子程序里编写代码并输入参数就可以了。 (2)从Function & Tables子库里把S-Function系统的功能模块复制过来,输入程序的文件名,以供调用。
20
例9.7利用M文件来写一个限幅积分器的S-函数,并借助S-函数模块来调用此文件。限幅积分器的数学模型如下: 操作步骤如下:
(1)根据数学模型,编写S-函数sfun97.m。 function [sys, x0, str, ts] = sfun97(t, x, u, flag, lb, ub, xi) switch flag, case 0, [sys, x0, srt, ts] = mdlInitializeSizes(xi); case 1, sys = mdlDerivatives(t, x, u, lb, ub); case 2 , sys = mdlUpdate(t, x, u); case 3, sys = mdlOutputs(t, x, u); case 4, sys = mdlGetTimeOfNextVarHit(t, x, u); case 9, sys = mdlTerminate (t , x , u); otherwise error ( [ ‘Unhandled flag =’ ,num2str ( flag) ] ); end function [sys,x0,str,ts]=mdlInitializeSizes(xi) sizes =simsizes; sizes.NumContStates=1; sizes.NumDiscStates=0; sizes.NumOutputs=1; sizes.NumInputs=1; sizes.DirFeedthrough=0; sizes.NumSampleTimes=1; sys=simsizes(sizes); xo=xi; str=[ ]; ts=[0, 0]; function sys=mdlDerivatives(t,x,u,lb,ub) if(x<=lb&u<0)|(x>=ub&u>0) sys=0; else sys=u; function sys=mdIUpdae(t,x,u) sys=[ ]; function sys=mdIOutputs(t,x,u) sys=x; function sys=mdlGetTimeOfNextVarHit(t,x,u) sampleTime=1;% Example,set the next hit to be one second later sys=t+ sampleTime; function sys=mdlTerminate(t,x,u) sys = [ ];
21
(2)完成S-函数的编写后,接着建立 Simulink模型,将功能模块S-function复制到设计区域,打开其参数页,输入S-函数的文件名sfun97.m和S-函数的参数lb、ub、xi。
(3)编写主程序。 clear; lb=-0.5; ub=0.5; xi=0; sim(‘sfun97’); (4)在命令窗口运行主程序,并双击示波器,即可查看到输入波形及限幅积分的结果。
22
线性化分析函数linmod用来提取非线性系统的近似线性模型,也可以用来获取线性系统的数学模型。linmod函数的调用格式为:
9.7 仿真系统的线性化分析 连续系统的线性化 线性化分析函数linmod用来提取非线性系统的近似线性模型,也可以用来获取线性系统的数学模型。linmod函数的调用格式为: [A,B,C,D]=linmod ('sys') [A,B,C,D]=linmod ('sys', x ,u) [A,B,C,D]=linmod ('sys', x, u, pert) [A,B,C,D]=linmod ('sys', x, u, pert, xpert, upert)
23
9.7.2离散系统的线性化 dlinmod能够以任意给定的采样时间对离散系统、多速率系统以及连续和离散混合系统进行线性化。除了第2个选项需要插入采样时间来对系统线性化外,dlinmod的调用格式和linmod是相同的: [A,B,C,D]=dlinmod ('sys', Ts, x ,u)
24
平衡分析 在给定输入、输出及状态条件下,Simulink提供的函数trim可以用来确定系统的稳态平衡点。其调用格式为: [x,u,y,dx]=trim('sys') [x,u,y,dx]=trim('sys',x0,u0,y0,ix,iu,iy) 其中x,u,y,dx分别代表状态向量、输入向量、输出向量和状态向量的导数。sys是模型名。x0,u0,y0分别为状态向量x、输入向量u和输出向量y的初始猜测值,它们的输入格式必须是列向量形式。ix是向量,它的元素是那些在寻找过程中,要求保持其值固定不变(等于初始猜测值)的那些状态变量的序号。iu、iy与ix类似,分别适用于u和y。
Similar presentations