function [sys,x0] = MPPT_PO(t,x,u,flag)
if flag==0
sys=[0;3;1;2;0;1];x0=[3;3;44.2];t=[0.0001 0];%Initialization
elseif flag==2
sys=mdlUpdate(t,x,u);
elseif flag==3
sys=mdlOutputs(t,x,u);
elseif flag==4
sys=mdlGetTimeOfNextVarHit(t,x,u);
else sys=[];
end
function sys=mdlUpdate(t,x,u)
Istep=0.01;
Imaxo=x(1);
Ips=x(2);
Vps=x(3);
Pps=Ips*Vps;
Ics=u(1);
Vcs=u(2);
Pcs=Ics*Vcs;
dp=Pcs-Pps;
di=Ics-Ips;
if dp>0
if di>0
x(3)=Vcs;
x(2)=Ics;
x(1)=Imaxo+Istep;
else
x(3)=Vcs;
x(2)=Ics;
x(1)=Imaxo-Istep;
end
else
if di>0
x(3)=Vcs;
x(2)=Ics;
x(1)=Imaxo-Istep;
else
x(3)=Vcs;
x(2)=Ics;
x(1)=Imaxo+Istep;
end
end
sys = [x(1),x(2),x(3)];
function sys=mdlOutputs(t,x,u)
sys = x(1);
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 0.0001;
sys = t + sampleTime;