MATLAB-S函数编写心得.pdfVIP

  • 6
  • 0
  • 约7.07千字
  • 约 12页
  • 2019-05-17 发布于浙江
  • 举报
matlab 中 s 函数编写心得(转) 2011-12-20 12:07:54| 分类:Matlab|举报|字号订阅 Part I: 所谓s函数是systemFunction的简称,用它来写自己的simulink 模块.s函数可以用matlab、C、C++、Fortran、Ada等语言来写,这 儿我只介绍怎样用matlab语言来写吧 (主要是它比较简单) xmlnamespace prefix o ns urn:schemas-microsoft-com:office:office/ 先讲讲为什么要用s函数,我觉得用s函数可以利用matlab的丰 富资源,而不仅仅局限于simulink提供的模块,而用c或c++等语言 写的s函数还可以实现对硬件端口的操作,还可以操作windowsAPI 等 先介绍一下simulink的仿真过程 (以便理解s函数),simulink 的仿真有两个阶段:一个为初始化,这个阶段主要是设置一些参数, 像系统的输入输出个数、状态初值、采样时间等;第二个阶段就是运 行阶段,这个阶段里要进行计算输出、更新离散状态、计算连续状态 等等,这个阶段需要反复运行,直至结束. 在matlab的workspace里输入edit sfuntmpl(这是matlab 自 己提供的s函数模板),我们看它来具体分析s函数的结构. 1. 函数的函数头 函数的第一行:function[sys,x0,str,ts] sfuntmpl(t,x,u,flag), 先 讲输入与输出变量的含义: t是采样时间,x是状态变量, u是输入(是做成simulink模块的输 入),flag是仿真过程中的状态标志(以它来判断当前是初始化还是运行 等) sys输出根据flag的不同而不同(下面将结合flag来讲sys的含 义),x0是状态变量的初始值,str是保留参数(mathworks公司还没想 好该怎么用它, 一般在初始化中将它置空就可以了,str []),ts是一个 1×2的向量,ts(1)是采样周期,ts(2)是偏移量 2. 函数分析 下面结合sfuntmpl.m中的代码来讲具体的结构: switchflag, %判断flag,看当前处于哪个状态 case 0, [sys,x0,str,ts] mdlInitializeSizes; // 解释说明 flag 0表示当前处于初始化状态,此时调用函数 mdlInitializeSizes进行初始化,此函数在该文件的第 149行定义. 其 中的参数sys是一个结构体,它用来设置模块的一些参数,各个参数详 细说明如下 size simsizes;%用于设置模块参数的结构体用simsizes来生 成 sizes.NumContStates 0; %模块连续状态变量的个数 sizes.NumDiscStates 0; %模块离散状态变量的个数 sizes.NumOutputs 0; %模块输出变量的个数 sizes.NumInputs 0; %模块输入变量的个数 sizes.DirFeedthrough 1; %模块是否存在直接贯通 sizes.NumSampleTimes 1; %模块的采样时间个数, 至少是 一个 sys simsizes(sizes); %设置完后赋给sys输出 举个例子,考虑如下模型: dx/dt fc(t,x,u) 也可以用连续状态方程描述:dx/dt A*x+B*u x(k+1) fd(t,x,u) 也可以用离散状态方程描述: x(k+1) H*x(k)+G*u(k) y fo(t,x,u) 也可以用输出状态方程描述:y C*x+D*u 设上述模型连续状态变量、离散状态变量、输入变量、输出变量均为 1 个,我们就只需改上面那一段代码为(一般连续状态与离散状态不会一 块用, 我这儿是为了方便说明): sizes.NumContStates 1;sizes.NumDiscStates 1;sizes.Nu mOutputs 1;sizes.NumInputs 1; 其他的可以不变, 继续在mdlInitializeSizes函数中往下看: x0 []; %状态变量设置为空,表示没有

文档评论(0)

1亿VIP精品文档

相关文档