www.gusucode.com > matlab通信工程仿真源码(张德丰等编著)程序书籍 > matlab_code/matlab通信工程仿真源码(张德丰等编著)/第6章/sfuntmp2.m

    % sfuntmp1.m程序代码如下(把部分注释删除):
function [sys,x0,str,ts] = sfuntmp2(t,x,u,flag)
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);
  otherwise
    error(['Simulink:blocks:unhandledFlag', num2str(flag)]);
end

%========================================================================
% mdlInitializeSizes模型初始化函数,返回:
% sys是系统参数
% x0是系统初始状态,若没有状态,取[ ]
% str是系统阶字串,通常设为[ ]
% ts是取样时间矩阵,对连续取样时间,ts取[0 0]
% 若使用内部取样时间,ts取[-1 0],-1表示继承输入信号的采样周期
%========================================================================
function [sys,x0,str,ts]=mdlInitializeSizes %模型初始化函数
sizes = simsizes;                           %取系统默认设置
sizes.NumContStates  = 0;                   %设置连续状态变量的个数
sizes.NumDiscStates  = 0;                   %设置离散状态变量的个数
sizes.NumOutputs     = 0;                   %设置系统输出变量的个数
sizes.NumInputs      = 0;                   %设置系统输入变量的个数
sizes.DirFeedthrough = 1;                   %设置系统是否直通
sizes.NumSampleTimes = 1;                   % 采样周期的个数,必须大于等于1
sys = simsizes(sizes);                      %设置系统参数
x0  = [];                                   %系统状态初始化
str = [];                                   %系统阶字串总为空矩阵
ts  = [0 0];                                %初始化采样时间矩阵
%========================================================================
% mdlDerivatives模型计算导数——连续状态部分的计算,返回连续状态的导数
%========================================================================
function sys=mdlDerivatives(t,x,u)
sys = []; %根据状态方程(微分方程部分)修改此处
%========================================================================
% mdlUpdate计算离散状态部分
%========================================================================
function sys=mdlUpdate(t,x,u)
sys = []; %根据状态方程(差分方程部分)修改此处
%========================================================================
% mdlOutputs计算输出信号,返回模块的输出
%========================================================================
function sys=mdlOutputs(t,x,u)
sys = [];  %根据输出方程修改此处
%========================================================================
% mdlGetTimeOfNextVarHit计算一步的仿真时刻,该函数仅当在mdlInitializeSizes
%函数中的采样时间向量定义了一个可变离散采样时间ts为[-2 0]时才被使用
%========================================================================
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;    %  例如,下一步仿真时间是1s之后
sys = t + sampleTime;
%========================================================================
% mdlTerminate终止仿真设定,完成仿真终止时的任务
%========================================================================
function sys=mdlTerminate(t,x,u)
sys = [];
% 程序结束