资源简介

使用S-Function函数实现离散PID控制器,并建立simulink仿真模型。

资源截图

代码片段和文件信息

function [sysx0strts] = dPID(txuflagkpkikd)
%SFUNTMPL General M-file S-function template

switch flag
  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0
    [sysx0strts]=mdlInitializeSizes;
  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%
  case 1
    sys=mdlDerivatives(txu);
  %%%%%%%%%%
  % Update %
  %%%%%%%%%%
  case 2
    sys=mdlUpdate(txu);
  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3
    sys=mdlOutputs(txukpkikd);
  %%%%%%%%%%%%%%%%%%%%%%%
  % GetTimeOfNextVarHit %
  %%%%%%%%%%%%%%%%%%%%%%%
  case 4
    sys=mdlGetTimeOfNextVarHit(txu);
  %%%%%%%%%%%%%
  % Terminate %
  %%%%%%%%%%%%%
  case 9
    sys=mdlTerminate(txu);

  %%%%%%%%%%%%%%%%%%%%
  % 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 [sysx0strts]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 0;
sizes.NumDiscStates  = 4;
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;0;0;0];

str = [];

ts  = [-2 0];

% end mdlInitializeSizes

function sys=mdlDerivatives(txu)

sys = [];

% end mdlDerivatives

%=============================================================================
% mdlUpdate
% Handle discrete state updates sample time hits and major time step
% requirements.
%=============================================================================
%
function sys=mdlUpdate(txu)
x(3)=x(2);
x(2)=x(1);
x(1)=u;
x(4)=u+x(4);
sys =x;

% end mdlUpdate

%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(txukpkikd)
sys=kp*x(1)+ki*0.01*x(4)+kd*(x(2)-x(3))/0.01;


% 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(txu)

sampleTime = 0.01;%  Example set the next hit to be one second later.
sys = t + sampleTime;

% end mdlGetTimeOfNextVarHit

%=============================================================================
% mdlTerminate
% Perform any end of simulation tasks.
%============

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件      20563  2012-11-05 16:52  untitled.mdl

     文件       3132  2012-11-05 16:49  dPID.m

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

                23695                    2


评论

共有 条评论