您的位置:首页 > 编程语言 > MATLAB

matlab的M-文件 S-函数的标准模板

2017-04-29 11:12 197 查看
原文地址:matlab的M-文件 S-函数的标准模板作者:神人

function [sys,x0,str,ts] = sfuntmpl(t,x,u,flag)
% SFUNTMPL 是M-文件 S函数模板

%  通过剪裁,用户可以生成自己的S函数,不过一定要重新命名

%  利用S函数可以生成连续、离散混合系统等,实现任何模块的功能

%

%  M-文件S函数的语法为:

%       [SYS,X0,STR,TS] = SFUNC(T,X,U,FLAG,P1,...,Pn)

%

%  参数含义:

%       t是当前时间

%       x是S函数相应的状态向量

%       u是模块的输入

%       flag是所要执行的任务

%

%   FLAG   结果               功能

%   -----  ------             --------------------------------------------

%   0      [SIZES,X0,STR,TS]  模块初始化

%   1      DX                 计算模块导数

%   2      DS                 更新模块离散状态

%   3      Y                  计算模块输出

%   4      TNEXT              计算下一个采样时间点

%   9      []                 结束仿真

%

%

%  用户切勿改动输出参数的顺序、名称和数目

%  输入参数的数目不能小于1,这四个参数的名称和排列顺序不能改动

%  用户可以根据自己的要求添加额外的参数,位置依次为第5,6,7,8,9等。

%  S函数的flag参数是一个标记变量,具有6个不同值,分别为0,1,2,3,4,9

%  flag的6个值分别指向6个不同的子函数

%  flag所指向的子函数也成为回调方法(Callback Methods)

switch flag,

%初始化,调用“模块初始化”子程序%
  case 0,

    [sys,x0,str,ts]=mdlInitializeSizes;

%连续状态变量计算,调用“计算模块导数”子函数%
  case 1,

    sys=mdlDerivatives(t,x,u);

%更新,调用“更新模块离散状态”子函数%
  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);

%其他的flag%
  otherwise

    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));

end

% end sfuntmpl

%=============================================================================

% “模块初始化”子函数

% 返回大小、初始条件和样本
function [sys,x0,str,ts]=mdlInitializeSizes

%  调用simsizes函数,返回规范格式的sizes构架

%  这条指令不要修改
sizes = simsizes;

%  模块的连续状态个数,0是默认值

%  用户可以根据自己的要求进行修改
sizes.NumContStates  = 0;

%  模块的离散状态个数,0是默认值

%  用户可以根据自己的要求进行修改
sizes.NumDiscStates  = 0;

%  模块的输出个数,0是默认值

%  用户可以根据自己的要求进行修改
sizes.NumOutputs     = 0;

%  模块的输入个数,0是默认值

%  用户可以根据自己的要求进行修改
sizes.NumInputs      = 0;

%  模块中包含的直通前向馈路个数,1是默认值

%  用户可以根据自己的要求进行修改
sizes.DirFeedthrough = 1;

%  模块中采样时间的个数,1是默认值,至少需要一个样本时间

%  用户可以根据自己的要求进行修改
sizes.NumSampleTimes = 1;

%  初始化后的构架sizes经simsizes函数处理后向sys赋值

%  这条指令不要修改
sys = simsizes(sizes);

%  给模块初始值变量赋值,[]是默认值

%  用户可以根据自己的要求进行修改
x0  = [];

%  系统保留变量

%  切勿改动,保持为空
str = [];

%  “二元对”描述采样时间及偏移量。[0 0]是默认值

%  [0 0]适用于连续系统

%  [-1 0]则表示该模块采样时间继承其前的模块采样时间设置
ts  = [0 0];

% end mdlInitializeSizes

%=============================================================================

% 计算导数向量
function sys=mdlDerivatives(t,x,u)

%  此处填写计算导数向量的指令

%  []是模块的默认值

%  用户必须把算得的离散状态的导数向量赋给sys
sys = [];

% end mdlDerivatives

%=============================================================================

% 计算离散状态向量
function sys=mdlUpdate(t,x,u)

%  此处填写计算离散状态向量的指令

%  []是模块的默认值

%  用户必须把算得的离散状态向量赋给sys
sys = [];

% end mdlUpdate

%=============================================================================

% 计算模块输出向量
function sys=mdlOutputs(t,x,u)

%  此处填写计算模块输出向量的指令

%  []是模块的默认值

%  用户必须把算得的模块输出向量赋给sys
sys = [];

% end mdlOutputs

%=============================================================================

% 计算下一采样时刻
function sys=mdlGetTimeOfNextVarHit(t,x,u)
%  该子函数仅在“采样时间”情况下使用

%  sampleTime = 1 是模块默认设置,表示在当前时间1秒后再调用本模块

%  用户可以根据自己的要求修改
sampleTime = 1;
%  将计算得到的下一采样时刻赋给sys

%  切勿改动
sys = t + sampleTime;

% end mdlGetTimeOfNextVarHit

%=============================================================================

function sys=mdlTerminate(t,x,u)

%  模板默认设置,一般情况不要改动
sys = [];

% end mdlTerminate
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: