matlab-simulink中s-function函数…

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

matlab-simulink中s-function函数的使用学习(自定义模块创建) - 阿 - 我的博客
自己还没整明白就乱发,并且也不注意细节。

        后来自己干脆回到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

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

matlab-simulink中s-function函数的使用学习(自定义模块创建) - 阿 - 我的博客


<script type="text/javascript" id="wumiiRelatedItems"> </script>
 
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值