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

matlab-simulink中s-function函数…

2013-11-01 09:22 288 查看
     
 首先我参考了网上一篇文章,好似是某些所谓的老师发表的大作,不知是不是为了评什么才发表的,即使这样,你也要认真对待呀,md现在的报刊也是真tm贱,只要给钱就发,不管有没有质量。



自己还没整明白就乱发,并且也不注意细节。

     
 
后来自己干脆回到matlab的help里面去学习,人家做的真是没的说,所以以后还是建议大家有问题找help,是在不行了再在网络上搜索。

     
 s函数结构的具体分析: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)是偏移量。

     
  下面是自己的代码:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

function [sys,x0,str,ts] = sfunt(t,x,u,flag,b)
%定义函数名称:sfunt

switch flag,

 

  % Initialization %

  case 0,

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

  % Derivatives %

  case 1,

   
sys=mdlDerivatives(t,x,u);

  % Update %

  case 2,

    sys=mdlUpdate(t,x,u);

 

  % Outputs %

  case 3,

   
sys=mdlOutputs(t,x,u,b);

 

  % GetTimeOfNextVarHit %

  case 4,

   
sys=mdlGetTimeOfNextVarHit(t,x,u);

 

  % Terminate %

  case 9,

   
sys=mdlTerminate(t,x,u);

 

  % Unexpected flags %

  otherwise

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

end

% end sfuntmpl

 

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

% mdlInitializeSizes

% Return the sizes, initial conditions, and sample times for the
S-function.

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

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

%调用函数simsizes以创建结构体sizes

sizes = simsizes;

%用初始化信息填充结构体sizes

sizes.NumContStates  = 1;
%包含一个连续状态

sizes.NumDiscStates  = 0; %无离散状态

sizes.NumOutputs     = 1;
%有一个输出量

sizes.NumInputs    
 = 1; %有一个输入信号

sizes.DirFeedthrough = 0;
%不包含直接馈通(输出量中不含输入量)

sizes.NumSampleTimes = 1; % (单个采样周期)at least
one sample time is needed

%根据上面的设置设定系统初始化参数

sys = simsizes(sizes);

%给其他返回参数赋值

% initialize the initial conditions

x0  = [0]; %设置初始状态为零状态

% str is always an empty matrix

str = []; %将str变量设置为空字符串

% initialize the array of sample times

ts  = [0 0];
%假定继承输入信号的采样周期

%初始化子程序结束

% end mdlInitializeSizes

 

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

% mdlDerivatives

% Return the derivatives for the continuous states.

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

function sys=mdlDerivatives(t,x,u)

  sys = u;

% end mdlDerivatives

 

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

% mdlUpdate

% Handle discrete state updates, sample time hits, and major
time step

% requirements.

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

function sys=mdlUpdate(t,x,u)

sys = [];

% end mdlUpdate

 

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

% mdlOutputs:当flag值为3时,计算输出量

% Return the block outputs.

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

function sys=mdlOutputs(t,x,u,b)

if(x <= b)

    sys = x;

else

    sys = 2;
 

end

% end mdlOutputs

 

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

% mdlGetTimeOfNextVarHit

% Return the time of the next hit for this block.
 Note that the result is

% absolute time.  Note that this function is
only used when you specify a

% variable discrete-time sample time [-2 0] in the sample time
array in

% mdlInitializeSizes.

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

function sys=mdlGetTimeOfNextVarHit(t,x,u)

 

sampleTime = 1;    %
 Example, set the next hit to be one second
later.

sys = t + sampleTime;

% end mdlGetTimeOfNextVarHit

 

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

% mdlTerminate

% Perform any end of simulation tasks.

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

function sys=mdlTerminate(t,x,u)

sys = [];

% end mdlTerminate

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
     
结果截图:





转发至微博
 



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