Code of An Estimation-based Approach of Fault Detection and Isolation of the Wind TurbineBenchmark

by

Qi (view profile)

 

The matlab code of the solution of “FDI Design Competition for Wind Turbines" (winning 2nd place)

FD_fault2_c(t,x,u,flag,A,B,C,L)
function [sys,x0,str,ts] = FD_fault2_c(t,x,u,flag,A,B,C,L)

switch flag,

  %%%%%%%%%%%%%%%%%%
  % Initialization %
  %%%%%%%%%%%%%%%%%%
  case 0,
    [sys,x0,str,ts]=mdlInitializeSizes;

  %%%%%%%%%%%%%%%
  % Derivatives %
  %%%%%%%%%%%%%%%
  case 1,
    sys=mdlDerivatives(t,x,u,A,B,C,L);

  %%%%%%%%%%%
  % Outputs %
  %%%%%%%%%%%
  case 3,
    sys=mdlOutputs(t,x,u,C);

  %%%%%%%%%%%%%%%%%%%
  % Unhandled flags %
  %%%%%%%%%%%%%%%%%%%
  case { 2, 4, 9 },
    sys = [];

  %%%%%%%%%%%%%%%%%%%%
  % Unexpected flags %
  %%%%%%%%%%%%%%%%%%%%
  otherwise
    error(['Unhandled flag = ',num2str(flag)]);

end
% end csfunc

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

sizes = simsizes;
sizes.NumContStates  = 2;
sizes.NumDiscStates  = 0;
sizes.NumOutputs     = 1;
sizes.NumInputs      = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;

sys = simsizes(sizes);
x0  = [0 0 ]' ;
str = [];
ts  = [0 0];

% end mdlInitializeSizes
%
%=============================================================================
% mdlDerivatives
% Return the derivatives for the continuous states.
%=============================================================================
%
function sys=mdlDerivatives(t,x,u,A,B,C,L)

y1 = u(1);  %m1
control = u(2);
y2 = u(3);  %m2

x_est = x(1:2);
y1_est = C*x_est;


G = -B*0.5*y1; %[control-0.5*y1-0.5*y2; 0];

if y1 ==0
    ratio =1;
else
    ratio = y2/y1;
end

sys = [ A*x_est + B*control + L*(y1-y1_est)+ ratio*G ];
   
% end mdlDerivatives
%
%=============================================================================
% mdlOutputs
% Return the block outputs.
%=============================================================================
%
function sys=mdlOutputs(t,x,u,C)

x_est = x(1:2);
y1_est = C*x_est;

sys = [y1_est ]; 

%end mdlOutputs

Contact us