⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ninestate.m

📁 这是书籍:Matlab控制系统与应用的源码,
💻 M
字号:
%参数e0和de0是设定的相平面误差允许范围。
function [sys,x0,str,ts] = mfile(t,x,u,flag,e0,de0)

switch flag,
  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  % Initialize the states, sample times, and state ordering strings.
  case 0
    [sys,x0,str,ts]=mdlInitializeSizes;

  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  % Return the outputs of the S-function block.
  case 3
    sys=mdlOutputs(t,x,u,e0,de0);

  %%%%%%%%%%%%%%%%%%%
  % Unhandled flags %
  %%%%%%%%%%%%%%%%%%%
  % There are no termination tasks (flag=9) to be handled.
  % Also, there are no continuous or discrete states,
  % so flags 1,2, and 4 are not used, so return an emptyu
  % matrix 
  case { 1, 2, 4, 9 }
    sys=[];

  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Unexpected flags (error handling)%
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  % Return an error message for unhandled flag values.
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end

% end timestwo

%
%=============================================================================
% mdlInitializeSizes
% Return the sizes, initial conditions, and sample times for the S-function.
%=============================================================================
%
function [sys,x0,str,ts] = mdlInitializeSizes()

sizes = simsizes;
sizes.NumContStates  = 0;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;  % dynamically sized
sizes.NumInputs      = 2;  % dynamically sized
sizes.DirFeedthrough = 1;   % has direct feedthrough
sizes.NumSampleTimes = 1;

sys = simsizes(sizes);
str = [];
x0  = [];
ts  = [-1 0];   % inherited sample time

% end mdlInitializeSizes

%
%=============================================================================
% mdlOutputs
% Return the output vector for the S-function
%=============================================================================
%u(1,1)为输入控制量e
%u(2,1)为输入控制量de
function sys = mdlOutputs(t,x,u,e0,de0)

if (u(1,1)>=e0 & u(2,1)>=de0)
    sys=20;
elseif (u(1,1)>=e0 & abs(u(2,1))<de0)
    sys=4;    
elseif (u(1,1)>=e0 & u(2,1)<=-de0)
    sys=2;
elseif abs((u(1,1))<e0 & u(2,1)>=de0)
    sys=1;
elseif abs(u(1,1))<e0 & abs(u(2,1))<de0
    sys=0;
 elseif abs(u(1,1))<e0 & u(2,1)<-de0
    sys=-1;   
elseif (u(1,1)<=-e0 & u(2,1)>=de0)
    sys=-2;
elseif (u(1,1)<=-e0 &abs(u(2,1))<de0)
    sys=-4;
elseif (u(1,1)<=-e0 & u(2,1)<-de0)
    sys=-20;
else 
     error(['my error ']);
end
% end mdlOutputs

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -