function [sys,x0,str,ts] = control(t,x,u,flag,par)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u,par);
case {2,4,9}
sys=[];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end;
function [sys,x0,str,ts]=mdlInitializeSizes
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 6;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0,0];
function sys=mdlOutputs(t,x,u,par)
x(1) = u(1);
x(2) = u(2);
x(3) = u(3);
fkp = u(4);
fki = u(5);
fkd = u(6);
kp = par(1);
ki = par(2);
kd = par(3);
k = par(4);
fkp1 = par(5);
fki1 = par(6);
fkd1 = par(7);
delta_fkp = fkp*fkp1;
delta_fki = 0;
delta_fkd = fkd*fkd1;
M = par(8);
if M==1 %%x(1) <-100
ut =k*( kp*x(1)+ki*x(2)+kd*x(3)); %%PID
else
ut =k*( (kp+delta_fkp)*x(1)+(ki+delta_fki)*x(2)+(kd+delta_fkd)*x(3));
%%fuzzyPID
delta_fki = fki*fki1;
A=(kp+delta_fkp);
B=(ki+delta_fki);
C=(kd+delta_fkd);
x(1),A,B,C
end
if ut>=6000
ut=6000;
end
sys=ut;