第二章_simulink_仿真技术解说.ppt
文本预览下载声明
2、定义s-function的初始信息 为了让Simulink识别出一个m文件s-function,用户必须在s-函数里提供有关s-函数的说明信息,包括采样时间、连续或者离散状态个数等初始条件。这一部分主要是在mdlInitializeSizes子函数里完成。 Sizes数组是s-function函数信息的载体,它内部的字段意义为: NumContStates:连续状态的个数(状态向量连续部分的宽度) NumDiscStates:离散状态的个数(状态向量离散部分的宽度) NumOutputs: 输出变量的个数(输出向量的宽度) NumInputs:输入变量的个数(输入向量的宽度) DirFeedthrough:有无直接馈入 NumSampleTimes:采样时间的个数 如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1。 注意DirFeedthrough是一个布尔变量,它的取值只有0和1两种,0表示没有直接馈入,此时用户在编写mdlOutputs子函数时就要确保子函数的代码里不出现输入变量u;1表示有直接馈入。 NumSampleTimes表示采样时间的个数,也就是ts变量的行数,与用户对ts的定义有关。 需要指出的是,由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时,必须用mux模块或demux模块将多个单一输入合成一个复合输入向量或将一个复合输出向量分解为多个单一输出。 3、输入和输出参量说明 S-function默认的4个输入参数为t、x、u和flag,它们的次序不能变动,代表的意义分别为: t:代表当前的仿真时间,这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中,用来区分不同的采样时刻点,并据此进行不同的处理。 x: 表示状态向量,这个参数是必须的,甚至在系统中不存在状态时也是如此。它具有很灵活的运用。 u:表示输入向量。 flag:是一个控制在每一个仿真阶段调用哪一个子函数的参数,由Simulink在调用时自动取值。 S-function默认的4个返回参数为sys、x0、str和ts,它们的次序不能变动,代表的意义分别为: sys:是一个通用的返回参数,它所返回值的意义取决于flag的值。 x0: 是初始的状态值(没有状态时是一个空矩阵[]),这个返回参数只在flag值为0时才有效,其他时候都会被忽略。 str:这个参数没有什么意义,是MathWorks公司为将来的应用保留的,m文件s-function必须把它设为空矩阵。 ts:是一个m×2的矩阵,它的两列分别表示采样时间间隔和偏移。 S-函数的模板程序位于toolbox/simulink/blocks目录下,文件名为sfuntmpl.m。 在运用S-函数进行仿真前,应当自行编制S-函数程序,因此必须知道系统在不同时刻所需要的信息: (1)在系统开始进行仿真时,应先知道系统有多少状态变量,其中哪些是连续变量,哪些是离散变量,以及这些变量的初始条件等信息。这些信息可通过S-函数中设置flag=0获取。 (2)若系统是严格连续的,则在每一步仿真时所需要的信息为:通过flag=1获得系统状态导数;通过flag=3获得系统输出。 (3)若系统是严格离散的,则通过flag=2获得系统下一个离散状态;通过flag=3获得系统离散状态的输出。 如例题如示:(a)用S函数模块为图2-41所示单摆构造系统动力学模型;(b)利用simulink研究该单摆摆角的运动曲线;(c)用S函数动画模块表现单摆的运动。 图2-41单摆示意图 (a)写出该单摆的动力学方程 式中 实施加在单摆上的等效外力; 是等效摩擦系数; 是等效重力系数。 (b)把上述二阶方程写成状态方程组 令 于是上述方程可写为 (c)根据状态方程对模板文件进行“裁剪”得到simpendzzy.m 从MATLAB的toolbox\simulink\blocks子目录下,复制sfintempl.m,并把它改名为simpendzzy.m,再根据状态方程对文件进行修改,最后形成文件。 (d)构成名为simpendzzy的S-函数模块 从simulink的“user-defined Function ”子库中复制S-Function框架模块到空白模型窗,如图2-42所示。 2-42复制得到的S-函数框架模块 双击S-Function框架模块,弹出图2-43所示对话窗;在“S-Function name ”栏中填写函数名simpendzzy;在“S-Function parameters”栏中填写函数simpendzzy.m的第4、5、6、个输入
显示全部