Presentation is loading. Please wait.

Presentation is loading. Please wait.

内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用

Similar presentations


Presentation on theme: "内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用"— Presentation transcript:

1 内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用
第3章Simulink仿真 内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用

2 例子: 构建一个对正弦波进行积分运算的模型,并显示该正弦及其积分的结果。 1
例子: 构建一个对正弦波进行积分运算的模型,并显示该正弦及其积分的结果。 1.打开一个新的窗口,找到相应的模块,并将它们移到模型中去。 需要的模块有:输入源模块(Sources)中的正弦波模块;接收器(Sink)模块中的示波器模块;连续系统(Continous)模块组中的积分(Integrator)模块;信号路线(Signal Routing)模块组的信号混路(Mux)模块 2.连接模块。3. 设置参数,运行仿真,观察示波器中的波形。4.以file_name为文件名保存模型。

3 3.1 系统仿真工具箱 simulink 可视化的动态系统仿真 图形建模
SIMULINK是MATLAB软件的扩展,它是实现动态系统建模和仿真的一个软件包,它与MATLAB语言的主要区别在于,其与用户交互接口是基于Windows的模型化图形输入,其结果是使得用户可以把更多的精力投入到系统模型的构建,而非语言的编程上 图形建模 所谓模型化图形输入是指SIMULINK提供了一些按功能分类的基本的系统模块,用户只需要知道这些模块的输入输出及模块的功能,而不必考察模块内部是如何实现的,通过对这些基本模块的调用,再将它们连接起来就可以构成所需要的系统模型(以.mdl文件进行存取),进而进行仿真与分析。

4 数学基础 求常微分方程初值问题的数值解法 欧拉法(Euler) 阿达姆斯法(Admas,Trapezoidal)
龙格-库塔法(Runge-Kutta) 吉尔法(Gear)

5 3.2.1 Simulink 启动 Show Library Browser,弹出Simulink Library Brower 四种方法:
1、在MATLAB命令窗口中输入simulink 结果是在桌面上出现一个称为Simulink Library Browser的窗口,在这个窗口中列出了按功能分类的各种模块的名称。 2、在MATLAB命令窗口中输入simulink3 结果是在桌面上出现一个用图标形式显示的Library :simulink3的Simulink模块库窗口。 3、可以通过单击MATLAB主窗口工具条上的Simulink图标打开。 4、可以通过单击MATLAB主窗口菜单选择FileNewModel 弹出一个Untitled的Simulink模型窗口,再选择View  Show Library Browser,弹出Simulink Library Brower 模块库窗口

6 点击鼠标左键

7 点击鼠标左键

8 5、simulink 的使用 1. 点击鼠标左键 2. 点击鼠标左键‘新建’ 3. 双击打开模块窗口

9 取信号源Sources/Step 双击可弹出属性窗口编辑属性 弹开右边模块窗口 鼠标选中后拖拽 到仿真窗口

10 取增益Math/Gain 双击可弹出属性窗口编辑属性 点击增益所在模块夹 鼠标选中后拖拽 到仿真窗口

11 取传函Continuous/Transfer Fcn
双击可弹出属性窗口编辑属性 点击传函所在模块夹 鼠标选中后拖拽 到仿真窗口

12 取相加点Math/Sum 双击可弹出属性窗口编辑属性 点击求和所在模块夹 鼠标选中后拖拽 到仿真窗口

13 取显示Sinks/Scope 双击可弹出示波器窗口 点击示波器所在模块夹 点击示波器参数图标 鼠标选中后拖拽 到仿真窗口

14 连接各元件;选择仿真参数,如停止时间等Simulation/Simulation parameters; 开始仿真Simulation/Start
或这里开始仿真 选择start 点击右键,调整显示参数

15 仿真结果显示

16 SIMULINK的模块库介绍 SIMILINK模块库按功能进行分类

17 1、连续模块(Continuous) Derivative:输入信号微分 Integrator:积分器
State-Space:线性状态空间系统模型 Transfer-Fcn:线性传递函数模型 Zero-Pole:以零极点表示的传递函数模型 Memory:存储上一时刻的状态值 Transport Delay:输入信号延时一个给定时间再输出 Variable Transport Delay:输入信号延时一个可变时间再输出

18 2、离散模块(Discrete) Zero-Order Hold:零阶采样保持器 Unit Delay:一个采样周期的延时
Discrete-time Integrator:离散时间积分器 Discrete State-Space:离散状态空间系统模型 Discrete Filter:离散滤波器 Discrete Transfer-Fcn:离散传递函数模型 Discrete Zero-Pole:以零极点表示的离散传递函数模型 First-Order Hold:一阶采样保持器

19 3、 Look-up Table(查表模块) User-defined function(用户定义函数模块)
(线性峰值匹配) Look-Up Table(2-D):建立两个输入信号的 查询表(线性峰值匹配) Fcn:用自定义的函数(表达式) MATLAB Fcn:利用MATLAB的现有函数 S-Function:调用自编的S函数的程序

20 4、 Math operations(数学模块)
Sum:加减运算 Product:模块输入的乘除运算 Dot Product:点乘运算 Gain:比例运算 Math Function:包括指数函数、对数函数、求平方等常用数学函数 Trigonometric Function:三角函数, 包括正弦、余弦、正切等 MinMax:最小值或最大值运算

21 Abs:取绝对值 Sign:给出符号函数 Rounding Function 圆整函数 Combinatorial Logic:建立真值表 Logical Operator:逻辑运算 Relational Operator:关系运算 Complex to Magnitude-Angle: 由复数输入转为幅值和相角输出 Complex to Real-Imag: 由复数输入转为实部和虚部输出 Magnitude-Angle to Complex: 由幅值和相角输入合成复数输出 Real-Imag to Complex: 由实部和虚部输入合成复数输出

22 5、 Discontinuous(非线性模块)
Rate Limit: 变化速率限制 Saturation:饱和输出, 让输出超过某一值时能够饱和。 Quantizer:离散化 Blacklash:滞环或间隙 Dead Zone:死区 Relay:滞环继电器 Switch: 切换开关 Manual Switch:手动选择开关 Coulomb & Viscous Friction 库仑和粘滞摩擦

23 6、Signal Routing (信号通路模块)
Mux:将多个单一输入转化为一个复合输出。 Demux:将一个复合输入转化为多个单一输出。

24 7、Sinks(接收器模块) Scope:示波器,显示信号曲线。 XY Graph:显示二维X-Y图形。 Out1:输出端口
Display:显示数值 To Workspace:将输出写入MATLAB的工作空间。 To File(.mat):将输出写入数据文件。 Terminator:终止一个未连接的输出端口

25 8、Sources(输入源模块) In1:输入端口 Constant:常数信号 Signal Generator:信号发生器,产生任意波形
Ramp:斜坡信号 Sine Wave:正弦波信号 Step:阶跃波信号 Repeating Sequence:重复信号 Pulse Generator:脉冲发生器 Ground:搁置一个未连接的输入端口 Clock:时钟信号 From Workspace:来自MATLAB的工作空间。 From File(.mat):来自数据文件。

26 其他常用方块组及工具箱 Blocksets &Toolboxes

27 Simulink extras(特别模块)

28 3.2.3 仿真结构图 exp5_1.mdl 菜单功能 File,Edit,View,Simulation,Format,Tool

29 模块的处理 移动:选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离线而移动,可按住shift键,再进行拖曳。
在模型窗口中,选中模块,则其4个角会出现黑色标记。此时可以对模块进行以下的基本操作。 移动:选中模块,按住鼠标左键将其拖曳到所需的位置即可。若要脱离线而移动,可按住shift键,再进行拖曳。 复制:选中模块,然后按住鼠标右键进行拖曳即可复制同样的一个功能模块。 删除:选中模块,按Delete键即可。若要删除多个模块,可以同时按住Shift键,再用鼠标选中多个模块,按Delete键即可。也可以用鼠标选取某区域,再按Delete键就可以把该区域中的所有模块和线等全部删除。 转向:为了能够顺序连接功能模块的输入和输出端,功能模块有时需要转向。在菜单FormatFlip Block (Ctrl+I)旋转180度, FormatRotate Block (Ctrl+R)顺时针旋转90度。

30 改变大小:选中模块,对鼠标移到角上出现,进行拖曳即可。
模块命名:先用鼠标在需要更改的名称上单击一下,然后直接更改即可。名称在功能模块上的位置也可以变换180度,可以用FormatFlip Name来实现,也可以直接通过鼠标进行拖曳。Hide Name可以隐藏模块名称。 颜色设定: Format  Foreground Color改变模块的前景颜色,Background Color改变模块的背景颜色;而模型窗口的颜色可以通过Screen Color来改变。 参数设定:用鼠标双击模块,就可以进入模块的参数设定窗口,从而对模块进行参数设定。或点击鼠标右键,选择Block parameters 参数设定窗口包含了该模块的基本功能帮助。通过对模块的参数设定,就可以获得需要的功能模块。

31 模块的连接 SIMULINK模型的构建是通过用线将各种功能模块进行连接而构成的。 用鼠标可以在功能模块的输入与输出端之间直接连线。
线的分支: 按住鼠标右键,在需要分支的地方拉出即可。 或者按住Ctrl键,并在要建立分支的地方用鼠标拉出即可。 或从输入端拉线到分支点

32 线的处理 线可以改变粗细、设定标签,也可以把线折弯、分支。 exp5_4.mdl 改变粗细:线所以有粗细是因为线引出的信号可以是标量信号或向量信号,当选中Format菜单下的Wide Vector Lines时,线的粗细会根据线所引出的信号是标量还是向量而改变,如果信号为标量则为细线,若为向量则为粗线。选中Vector Line Widths则可以显示出向量引出线的宽度,即向量信号由多少个单一信号合成。 设定标签:只要在线上双击鼠标,即可输入该线的说明标签。也可以通过选中线,然后打开Edit菜单下的Signal Properties进行设定,其中signal name属性的作用是标明信号的名称,设置这个名称反映在模型上的直接效果就是与该信号有关的端口相连的所有直线附近都会出现写有信号名称的标签。 线的折弯:按住Shift键,再用鼠标在要折弯的线处单击一下,就会出现圆圈,表示折点,利用折点就可以改变线的形状。

33 属性的改变 属性设定:选中模块,打开EditBlock Properties可以对模块进行属性设定。或鼠标右键选择Block Properties 属性包括 Description描述属性:对模块的说明文本 Priority优先级属性:模块执行顺序 Tag标签属性: Open function属性:通过它指定一个函数名,则当该模块被双击之后,Simulink就会调用该函数执行,这种函数在MATLAB中称为回调函数 Attributes format string属性

34 3.2.4 仿真方法与仿真参数的选择 构建好一个系统的模型之后,接下来的事情就是运行模型,得出仿真结果。运行一个仿真的完整过程分成三个步骤:设置仿真参数,启动仿真和仿真结果分析。 第1 步:设置仿真参数和选择解法器 选择Simulation菜单下的Parameters命令,就会弹出一个仿真参数对话框,它主要用三个页面来管理仿真的参数。 Solver页,它允许用户设置仿真的开始和结束时间,选择解法器,说明解法器参数及选择一些输出选项。 Workspace I/O页,作用是管理模型从MATLAB工作空间的输入和对它的输出。 Diagnostics诊断页,允许用户选择Simulink在仿真中显示的警告信息的等级。

35

36 1、Solver页 Simulation time仿真时间:注意这里的时间是计算机仿真中对时间的一种表示,比如10秒的仿真时间,如果采样步长定为0.1,则需要执行100步,若把步长减小,则采样点数增加,那么实际的执行时间就会增加。一般仿真开始时间设为0,而结束时间视不同的因素而选择。 Solver option解法选项:Type后面的第一个选项中指定仿真的步长类型, 分Variable-step(变步长)和Fixed-step(固定步长)两种。

37 1.变步长模式解法器有:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb和discrete。
ode45:缺省值,四/五阶龙格-库塔法,适用于大多数连续或离散系统,但不适用于刚性(stiff)系统。它是单步解法器,也就是,在计算y(tn)时,它仅需要最近处理时刻的结果y(tn-1)。一般来说,面对一个仿真问题最好是首先试试ode45。 ode23:二/三阶龙格-库塔法,它在误差限要求不高和求解的问题不太难的情况下,可能会比ode45更有效。也是一个单步解法器。 ode113:是一种阶数可变的解法器,它在误差容许要求严格的情况下通常比ode45有效。ode113是一种多步解法器,也就是在计算当前时刻输出时,它需要以前多个时刻的解。 ode15s:是一种基于数字微分公式的解法器(NDFs)。也是一种多步解法器。适用于刚性系统,当用户估计要解决的问题是比较困难的,或者不能使用ode45,或者即使使用效果也不好,就可以用ode15s。

38 ode23s:它是一种单步解法器,专门应用于刚性系统,在弱误差允许下的效果好于ode15s。它能解决某些ode15s所不能有效解决的stiff问题。
ode23t:是梯形规则的一种自由插值实现。这种解法器适用于求解适度stiff的问题而用户又需要一个无数字振荡的解法器的情况。 ode23tb:是TR-BDF2的一种实现, TR-BDF2 是具有两个阶段的隐式龙格-库塔公式。 discrtet:当Simulink检查到模型没有连续状态时使用它。

39 固定步长模式解法器有:ode5,ode4,ode3,ode2,ode1和discrete。

40 Fixed step size固定步参数:缺省情况下,步长自动地确定,它由值auto表示
Mode(固定步长模式选择) Multi tasking:多任务模式,当simulink检测到模块间非法的采样速率转换,它会给出错误提示。所谓的非法采样速率转换指两个工作在不同采样速率的模块之间的直接连接。在实时多任务系统中,如果任务之间存在非法采样速率转换,那么就有可能出现一个模块的输出在另一个模块需要时却无法利用的情况。通过检查这种转换,Multitasking将有助于用户建立一个符合现实的多任务系统的有效模型。 使用速率转换模块可以减少模型中的非法速率转换。Simulink提供了两个这样的模块:unit delay模块和zero-order hold模块。对于从慢速率到快速率的非法转换,可以在慢输出端口和快输入端口插入一个单位延时unit delay模块。而对于快速率到慢速率的转换,则可以插入一个零阶采样保持器zero-order hold。 Single tasking:单任务模式,不检查模块间的速率转换,它在建立单任务系统模型时非常有用,在这种系统就不存在任务同步问题。 Auto:自动模式,simulink会根据模型中模块的采样速率是否一致,自动决定切换到multitasking和singletasking。

41 Step size步长参数:对于变步长模式,用户可以设置最大的和推荐的初始步长参数,缺省情况下,步长自动地确定,它由值auto表示。
Maximum step size(最大步长参数):它决定了解法器能够使用的最大时间步长,它的缺省值为“仿真时间/50”,即整个仿真过程中至少取50个取样点,但这样的取法对于仿真时间较长的系统则可能带来取样点过于稀疏,而使仿真结果失真。一般建议对于仿真时间不超过15s的采用默认值即可,对于超过15s的每秒至少保证5个采样点,对于超过100s的,每秒至少保证3个采样点。 Initial step size(初始步长参数):一般建议使用“auto”默认值即可。 Relative tolerance(相对误差):它是指误差相对于状态的值,是一个百分比,缺省值为1e-3,表示状态的计算值要精确到0.1%。 Absolute tolerance(绝对误差):表示误差值的门限,或者是说在状态值为零的情况下,可以接受的误差。如果它被设成了auto,那么simulink为每一个状态设置初始绝对误差为1e-6。

42 Output options输出选项(在变步长模式下有效)
Refine output:精细输出,其意义是在仿真输出太稀松时,simulink会产生额外的精细输出,这一点就像插值处理一样。用户可以在refine factor设置仿真时间步间插入的输出点数。 产生更光滑的输出曲线,改变精细因子比减小仿真步长更有效,并且在ode45效果最好。 Produce additional output:它允许用户直接指定产生输出的时间点。一旦选择了该项,则在它的右边出现一个output times编辑框,在这里用户指定额外的仿真输出点,它既可以是一个时间向量,也可以是表达式。与精细因子相比,这个选项会改变仿真的步长。 Produce specified output only:它的意思是让simulink只在指定的时间点上产生输出。为此解法器要调整仿真步长以使之和指定的时间点重合。这个选项在比较不同的仿真时可以确保它们在相同的时间输出。

43 2、Workspace I/O页 此页主要用来设置与MATLAB工作空间交换数值的有关选项。
Load from workspace:从MATLAB工作空间获取时间和输入变量,一般时间变量定义为t,输入变量定义为u。 Initial state用来定义从MATLAB工作空间获得的状态初始值的变量名。 Save to workspace:设置保存到MATLAB工作空间的变量类型和变量名,包括输出时间向量(Time)、状态向量(States)和输出变量(Output)。 最终状态(Final state)用来定义将系统稳态值存往工作空间所使用的变量名。

44 Save option:用来设置存往工作空间的有关选项。
Limit rows to last仿真结果最终可存往工作空间的变量的规模,对于向量而言即其维数,对于矩阵而言即其秩; Decimation亚采样因子,缺省值为1,也就是对每一个仿真时间点产生值都保存,而若为2,则是每隔一个仿真时刻才保存一个值。 Format返回数据的格式,包括矩阵matrix、结构struct及带时间的结构struct with time。

45 3、Diagnostics页 此页分成两个部分:仿真选项和配置选项。配置选项下的列表框主要列举了一些常见的事件类型,以及当SIMULINK检查到这些事件时给予的处理。仿真选项options主要包括是否进行一致性检验、是否禁用过零检测、是否禁止复用缓存、是否进行不同版本的SIMULINK的检验等几项。 除了上述3个主要的页外,仿真参数设置窗口还包括real-time workshop页,主要用于与C语言编辑器的交换,通过它可以直接从SIMULINK模型生成代码并且自动建立可以在不同环境下运行的程序,这些环境包括实时系统和单机仿真。

46 第2步:启动仿真 设置仿真参数和选择解法器之后,就可以启动仿真而运行。
选择Simulink菜单下的start选项来启动仿真,如果模型中有些参数没有定义,则会出现错误信息提示框。如果一切设置无误,则开始仿真运行,结束时系统会发出一鸣叫声。

47

48 在MATLAB命令窗口中通过函数进行,格式如下:
[t,x,y]=sim(‘模型文件名’,[to tf],simset(‘参数1’,参数值1,‘参数2’,参数值2, …)) [t,x,y]为返回值,t为返回的时间向量值,x为返回的状态值,y为返回的输出向量值。 to_为仿真起始时间, tf为仿真终止时间。 simset定义了仿真参数,包括以下一些主要参数: AbsTol:默认值为1e-6设定绝对误差范围。 Decimation:默认值为1,决定隔多少个点返回状态和输出值。 Solver:解法器的选择。 MaxRows:默认值为0,表示不限制。若为大于零的值,则表示限制输出和状态的规模,使其最大行数等于该数值。 InitialState:一个向量值,用于设定初始状态。 FixedStep:用一个正数表示步阶的大小,仅用于固定步长模式。 MaxStep:默认值为auto。用于变步长模式,表示最大的步阶大小。

49 如果知道模型文件名称,可以用以下命令得到该模型的仿真参数:
  simget(‘模型文件名’)

50 第3步:仿真结果的输出与保存 利用Scope显示 利用Out1模块保存到MATLAB工作空间 利用To Workspace模块
利用To File模块 利用save 命令

51 演示示波器Scope

52 SCOPE图形的鼠标右键: Exm5_2.mdl zoom out Autoscale Save current axes setting
Axes properties 工具栏: Scope parameters General Data history Floating scope

53 利用sinksOut1模块 >>yout yout= u y >>plot(tout,yout)

54 利用sinksTo Workspace 模块

55 3.2.5 simulink 分析工具 系统的线性化模型将非线性系统在某平衡点表示为近似的线性模型
[A,B,C,D]=linmod(‘modelname’,x,u,para,xpert,upert) 模型名称 工作点状态和输入 缺省时为零 时间点和扰动值 允许缺省 状态和输入的扰动值 允许缺省

56 t3701.mdl cd E:\matlab讲义\matlab教程 [A,B,C,D]=linmod(‘t3701');
[num,den]=ss2tf(A,B,C,D); printsys(num,den,'s') num/den = 1.1369e-012 s^ e-010 s^ s^ s s^ s^ s^ s^ s

57 线性系统分析工具 打开线性分析工具

58 弹出LTI Viewer窗口和Model Input and Output 窗口
获取线性化模型作为输入

59

60 获取线性化模型作为输入

61 设置图形种类

62 例子: 构建一个对正弦波进行积分运算的模型,并显示该正弦及其积分的结果。 1
例子: 构建一个对正弦波进行积分运算的模型,并显示该正弦及其积分的结果。 1.打开一个新的窗口,找到相应的模块,并将它们移到模型中去。 需要的模块有:输入源模块(Sources)中的正弦波模块;接收器(Sink)模块中的示波器模块;连续系统(Continous)模块组中的积分(Integrator)模块;信号路线(Signal Routing)模块组的信号混路(Mux)模块 2.连接模块。3. 设置参数,运行仿真,观察示波器中的波形。4.以file_name为文件名保存模型。

63 3.2.5 S函数及其应用 Simulink为用户提供了许多内置的基本库模块,通过这些模块进行连接而构成系统的模型。对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于Simulink原来提供的内置模块。 而Simulink s-function是一种强大的对模块库进行扩展的新工具。 一、s-function的概念 s-function是一个动态系统的计算机语言描述,在MATLAB里,用户可以选择用m文件编写,也可以用c或mex文件编写,在这里只给大家介绍如何用m文件编写s-function。 S-function提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法,使函数和Simulink解法器进行交互。 S-function最广泛的用途是定制用户自己的Simulink模块。它的形式十分通用,能够支持连续系统、离散系统和混合系统。

64 二、建立m文件s-function 1、使用模板文件:sfuntmp1. m 该模板文件位于MATLAB根目录下toolbox/simulink/blocks目录下。 模板文件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子函数。比如当flag=3时,即模块处于计算输出这个仿真阶段时,相应调用的子函数为sys=mdloutputs(t,x,u)。 模板文件使用switch语句来完成这种指定,当然这种结构并不唯一,用户也可以使用if语句来完成同样的功能。而且在实际运用时,可以根据实际需要来去掉某些值,因为并不是每个模块都需要经过所有的子函数调用。 模板文件只是Simulink为方便用户而提供的一种参考格式,并不是编写s-function的语法要求,用户完全可以改变子函数的名称,或者直接把代码写在主函数里,但使用模板文件的好处是,比较方便,而且条理清晰。

65 使用模板编写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的输出。

66 mdlGetTimeOfNextVarHit:计算下一个采样点的绝对时间,这个方法仅仅是在用户在mdlInitializeSizes 里说明了一个可变的离散采样时间。
mdlTerminate:实现仿真任务必须的结束。 概括说来,建立s-function可以分成两个分离的任务: 初始化模块特性包括输入输出信号的宽度,离散连续状态的初始条件和采样时间。 将算法放到合适的s-function子函数中去。

67 2、定义s-function的初始信息 为了让Simulink识别出一个m文件s-function,用户必须在s-函数里提供有关s-函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。 Sizes数组是s-function函数信息的载体,它内部的字段意义为: NumContStates:连续状态的个数(状态向量连续部分的宽度) NumDiscStates:离散状态的个数(状态向量离散部分的宽度) NumOutputs: 输出变量的个数(输出向量的宽度) NumInputs:输入变量的个数(输入向量的宽度) DirFeedthrough:有无直接馈入 NumSampleTimes:采样时间的个数

68 如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1。
注意DirFeedthrough是一个布尔变量,它的取值只有0和1两种,0表示没有直接馈入,此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u;1表示有直接馈入。 NumSampleTimes表示采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。 需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向量分解为多个单一输出。

69 3、输入和输出参量说明 S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为: t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。 x: 表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。 u:表示输入向量。 flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。

70 S-function默认的4个返回参数为sys、x0、str和ts,它们的次序不能变动,代表的意义分别为:
sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。 x0: 是初始的状态值(没有状态时是一个空矩阵[]),这个返回参数只在flag值为0时才有效,其他时候都会被忽略。 str:这个参数没有什么意义,是MathWorks公司为将来的应用保留的,m文件s-function必须把它设为空矩阵。 ts:是一个m×2的矩阵,它的两列分别表示采样时间间隔和偏移。 例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(非模板文件形式)

71 3.2.5 模块化与封装 自定义功能模块有两种方法,一种方法是采用Ports and subsystems 模块库中的Subsystem功能模块,利用其编辑区设计组合新的功能模块;另一种方法是将现有的多个功能模块组合起来,形成新的功能模块。对于很大的SIMULINK模型,通过自定义功能模块可以简化图形,减少功能模块的个数,有利于模型的分层构建。 一、方法1 将Ports and subsystems模块库中的Subsystem功能模块复制到打开的模型窗口中。 双击Subsystem功能模块,进入自定义功能模块窗口,从而可以利用已有的基本功能模块设计出新的功能模块。 二、方法2 在模型窗口中建立所定义功能模块的子模块。 用鼠标将这些需要组合的功能模块框住,然后选择Edit菜单下的Create Subsystem即可。

72 双击打开模块进入设计窗口 弹开子系统所在模块窗口 鼠标选中后拖拽 到仿真窗口
方法1 Ports and subsystems模块库中的Subsystem 双击打开模块进入设计窗口 弹开子系统所在模块窗口 鼠标选中后拖拽 到仿真窗口

73 方法2 Edit菜单下的Create Subsystem

74 双击打开模块进入设计窗口

75 三、自定义功能模块的封装 exp5_7.mdl exp5_8.mdl exp5_9.mdl exp5_10.mdl 上面提到的两种方法都只是创建一个功能模块而已,如果要命名该自定义功能模块、对功能模块进行说明、选定模块外观、设定输入数据窗口,则需要对其进行封装处理。 首先选中Subsystem功能模块,再打开Edit菜单中的Mask Subsystem进入mask的编辑窗口,可以看出有3个标签页。 Icon:设定功能模块的外观。 Initialization:设定输入数据窗口(Prompt List)。 Documentation:设计该功能模块的文字说明。

76 1、Icon标签页 此页最重要的部分是Drawing Commands,在该区域内可以用disp指令设定功能模块的文字名称,用plot指令画线,用dpoly指令画转换函数。 注意,尽管这些命令在名字上和以前讲的MATLAB函数相同,但它们在功能上却不完全相同,因此不能随便套用以前所讲的格式。 disp(‘text’)可以在功能模块上显示设定的文字内容。disp(‘text1\ntext2’)分行显示文字text1和text2 plot([x1 x2 … xn],[y1 y2 … yn])指令会在功能模块上画出由[x1 y1]经[x2 y2]经[x3 y3] … 直到[xn,yn]为止的直线。功能模块的左下角会根据目前的坐标刻度被正规化为[0,0],右上角则会依据目前的坐标刻度被正规化为[1,1]。 dpoly(num,den):按s次数的降幂排序,在功能模块上显示连续的传递函数。 dpoly(num,den,’z’):按z次数的降幂排序,在功能模块上显示离散的传递函数。

77 用户还可以设置一些参数来控制图标的属性,这些属性在Icon页右下端的下拉式列表中进行选择。
Icon frame:Visible 显示外框线;Invisible:隐藏外框线。 Icon Transparency:Opaque 隐藏输入输出的标签;Transparent:显示输入输出的标签。 Icon Rotation:旋转模块。 Drawing coordinate:画图时的坐标系。

78 2、Initialization标签页 此页主要用来设计输入提示(prompt)以及对应的变量名称(variable)。在prompt栏上输入变量的含义,其内容会显示在输入提示中。而variable是仿真要用到的变量,该变量的值一直存于mask workspace中,因此可以与其他程序相互传递。 如果配合在initialization commands内编辑程序,可以发挥功能模块的功能来执行特定的操作。 在prompt编辑框中输入文字,这些文字就会出现在prompt列表中;在variable列表中输入变量名称,则prompt中的文字对应该变量的说明。如果要增加新的项目,可以点击边上的Add键。Up和Down按钮用于执行项目间的位置调整。 Control type列表给用户提供选择设计的编辑区,选择Edit会出现供输入的空白区域,所输入的值代表对应的variable;Popup则为用户提供可选择的列表框,所选的值代表variable,此时在下面会出现Popup strings输入框,用来设计选择的内容,各值之间用逻辑或符号“|”隔开;如选择Checkbox则用于on与off的选择设定。

79 Assignment属性用于配合Control type的不同选择来提供不同的变量值,变量值有Evaluate和Literal两种,其含义如下:
Edit 输入的文字是程序执行时所用的变量值; 输入内容作字符串处理 Popup 为选择的序号,选第一项输出值为1, 选择内容作字符串处理 往下类推; Checkbox 输出为1或0; 输出为‘on’或‘off’的字符串

80 3、Documentation标签页 此页主要用来针对完成的功能模块来编写相应的说明文字和Help。
在Block description中输入的文字,会出现在参数窗口的说明部分。 在Block help中输入的文字则会显示在单击参数窗口中的help按钮后浏览器所加载的HTML文件中。 Mask type:在此处输入的文字作为封装模块的标注性说明,在模型窗口下,将鼠标指向模块,则会显示该文字。当然必须先在View菜单中选择Block Data Tips——Show Block Data Tips。

81 举例 1、利用SIMULINK进行时域系统分析(shiyufx.mdl) 2、利用SIMULINK求解电路(dianlu.mdl)
3、利用SIMULINK设计一个时钟脉冲控制的RS触发器(RS.mdl) 4、利用SIMULINK设计一个单极性SPWM控制的单相逆变电路(inverter.mdl)

82 3.4 以simulink为基础的模块工具箱 SimPowerSystem powerlib

83 本章小结 SIMULINK是MATLAB的一个扩展软件,它是基于模型化图型输入的仿真环境。
S-FUNCTION是扩展MATLAB函数库的一个实用方法,要求熟练掌握它的编写及用法。


Download ppt "内容: 1. 库模块简介 2.基本建模方法 3.模型举例 4.子系统与模块封装技术 5.函数的编写与应用"

Similar presentations


Ads by Google