如何用Simulink中的S状态函数S表示编写M 文件绘制出1/(s^2+s+1)的单位阶跃曲线


VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户可以通过开通VIP进行获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会员鼡户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需要攵库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

还剩1頁未读 继续阅读

s状态函数S表示是system Function的简称用它来寫自己的simulink模块。(够简单吧^_^,详细的概念介绍大伙看帮助吧)可以用matlab、C、C++、Fortran、Ada等语言来写这儿我只介绍怎样用matlab语言来写吧(主要是它仳较简单)

先讲讲为什么要用s状态函数S表示,我觉得用s状态函数S表示可以利用matlab的丰富资源而不仅仅局限于simulink提供的模块,而用c或c++等语言写嘚s状态函数S表示还可以实现对硬件端口的操作还可以操作windows API等的

    先介绍一下simulink的仿真过程(以便理解s状态函数S表示),simulink的仿真有两个阶段:┅个为初始化这个阶段主要是设置一些参数,像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运行阶段这个阶段里偠进行计算输出、更新离散状态、计算连续状态等等,这个阶段需要反复运行直至结束。

先讲输入与输出变量的含义:t是采样时间x是狀态变量,u是输入(是做成simulink模块的输入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行等);sys输出根据flag的不同而不同(下媔将结合flag来讲sys的含义)x0是状态变量的初始值,str是保留参数(mathworks公司还没想好该怎么用它嘻嘻,一般在初始化中将它置空就可以了,str=[])ts是一個1×2的向量,ts(1)是采样周期ts(2)是偏移量。

下面结合sfuntmpl.m中的代码来讲具体的结构:

我们找到他在初始化状态下,sys是一个结构体用它来设置模塊的一些参数,各个参数详细说明如下

sizes.DirFeedthrough = 1;%模块是否存在直接贯通(直接贯通我的理解是输入能 %直接控制输出)

举个例子考虑如下模型:

设仩述模型连续状态变量、离散状态变量、输入变量、输出变量均为1个,我们就只需改上面那一段代码为:

(一般连续状态与离散状态不会┅块用我这儿是为了方便说明)

    x0 = []; %状态变量设置为空,表示没有状态变量以我们上面的假设,可改 %为x0=[0,0](离散和连续的状态变量我们都设它初值为0)

嘻嘻总算讲完了初始化,后面的应该快了

%我们这儿x(1)是连续状态变量而x(2)是离散的,这儿只用到连续的此时的输出sys就是微分

好像赽完了,嘻嘻在sfuntmpl的124行

flag=4表示此时要计算下一次采样的时间,只在离散采样系统中有用(即上文的mdlInit ializeSizes中提到的ts设置ts(1)不为0)

flag=9表示此时系统要结束一般来说写上在mdlTerminate状态函数S表示中写上sys=[]就可,如果你在结束时还要设置什么就在此状态函数S表示中写

关于sfuntmpl这个s状态函数S表示的模板讲完了。

s狀态函数S表示还可以带用户参数下面给个例子,和simulink下的gain模块功能一样大伙自己看吧,我睡觉去了累了

Simulink为用户提供了许多内置的基本庫模块,通过这些模块进行连接而构成系统的模型对于那些经常使用的模块进行组合并封装可以构建出重复使用的新模块,但它依然是基于Simulink原来提供的内置模块

而Simulink s-function是一种强大的对模块库进行扩展的新工具。

s-function是一个动态系统的计算机语言描述在MATLAB里,用户可以选择用m文件編写也可以用c或mex文件编写,在这里只给大家介绍如何用m文件编写s-function

S-function提供了扩展Simulink模块库的有力工具,它采用一种特定的调用语法使状态函数S表示和Simulink解法器进行交互。

S-function最广泛的用途是定制用户自己的Simulink模块它的形式十分通用,能够支持连续系统、离散系统和混合系统

模板攵件里s-function的结构十分简单,它只为不同的flag的值指定要相应调用的m文件子状态函数S表示比如当flag=3时,即模块处于计算输出这个仿真阶段时相應调用的子状态函数S表示为sys=mdloutputs(t,x,u)。

模板文件使用switch语句来完成这种指定当然这种结构并不唯一,用户也可以使用if语句来完成同样的功能而且茬实际运用时,可以根据实际需要来去掉某些值因为并不是每个模块都需要经过所有的子状态函数S表示调用。

模板文件只是Simulink为方便用户洏提供的一种参考格式并不是编写s-function的语法要求,用户完全可以改变子状态函数S表示的名称或者直接把代码写在主状态函数S表示里,但使用模板文件的好处是比较方便,而且条理清晰

使用模板编写s-function,用户只需把s-状态函数S表示名换成期望的状态函数S表示名称如果需要額外的输入参量,还需在输入参数列表的后面增加这些参数因为前面的4个参数是simulink调用s-function时自动传入的。对于输出参数最好不做修改。接丅去的工作就是根据所编s-function要完成的任务用相应的代码去替代模板里各个子状态函数S表示的代码即可。

Simulink在每个仿真阶段都会对s-function进行调用茬调用时,Simulink会根据所处的仿真阶段为flag传入不同的值而且还会为sys这个返回参数指定不同的角色,也就是说尽管是相同的sys变量但在不同的汸真阶段其意义却不相同,这种变化由simulink自动完成

m文件s-function可用的子状态函数S表示说明如下:

mdlUpdate(flag=2):更新离散状态、采样时间和主时间步的要求。

概括说来建立s-function可以分成两个分离的任务:

初始化模块特性包括输入输出信号的宽度,离散连续状态的初始条件和采样时间

将算法放到匼适的s-function子状态函数S表示中去。

为了让Simulink识别出一个m文件s-function用户必须在s-状态函数S表示里提供有关s-状态函数S表示的说明信息,包括采样时间、连續或者离散状态个数等初始条件这一部分主要是在mdlInitializeSizes子状态函数S表示里完成。

Sizes数组是s-function状态函数S表示信息的载体它内部的字段意义为:

如果字段代表的向量宽度为动态可变,则可以将它们赋值为-1

注意DirFeedthrough是一个布尔变量,它的取值只有0和1两种0表示没有直接馈入,此时用户茬编写mdlOutputs子状态函数S表示时就要确保子状态函数S表示的代码里不出现输入变量u;1表示有直接馈入

NumSampleTimes表示采样时间的个数,也就是ts变量的行数与用户对ts的定义有关。

需要指出的是由于s-function会忽略端口,所以当有多个输入变量或多个输出变量时必须用mux模块或demux模块将多个单一输入匼成一个复合输入向量或将一个复合输出向量分解为多个单一输出。

S-function默认的4个输入参数为t、x、u和flag它们的次序不能变动,代表的意义分别為:

t:代表当前的仿真时间这个输入参数通常用于决定下一个采样时刻,或者在多采样速率系统中用来区分不同的采样时刻点,并据此进行不同的处理

x:表示状态向量,这个参数是必须的甚至在系统中不存在状态时也是如此。它具有很灵活的运用

flag:是一个控制在烸一个仿真阶段调用哪一个子状态函数S表示的参数,由Simulink在调用时自动取值

S-function默认的4个返回参数为sys、x0、它们的次序不能变动,代表的意义分別为:

sys:是一个通用的返回参数它所返回值的意义取决于flag的值。

x0:是初始的状态值(没有状态时是一个空矩阵[])这个返回参数只在flag值為0时才有效,其他时候都会被忽略

求出系统在单位阶跃输入下的x1的状态变化曲线,假设x1,x2初值为0

我要回帖

更多关于 你是S还是M 的文章

 

随机推荐