function [sys,x0,str,ts] =mppt(t,x,u,flag)
global Dout;
global Ik;
global Vk;
global Pk;
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case {1,9},
sys=[];
case 2,
sys=mdlUpdate(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case 4,
sys=mdlGetTimeOfNextVarHit(t,x,u);
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys,x0,str,ts]=mdlInitializeSizes()
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 4; %四个离散状态
sizes.NumOutputs = 1;
sizes.NumInputs = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0;0;30;0];
str = [];
ts = [-1,0];
function sys=mdlUpdate(t,x,u)
sys =[x(1);x(2);x(3);x(4)]; %更新离散状态 x1:电流 x2电压 x3输出占空比 x4功率
function sys=mdlOutputs(t,x,u)
Ik=x(1);
Vk=x(2);
Dout=x(3);
Pk=x(4);
I=u(1);
V=u(2);
P=u(3);
d=5;
dp=P-Pk;
dv=V-Vk;
if dv==0|dp==0
dd=0.01;
end
if dv>0
if dp>0
dd=-d;
elseif dp<0
dd=d;
end
elseif dv<0
if dp>0
dd=d;
elseif dp<0
dd=-d;
end
end
Dout=Dout+dd;
if Dout<10
Dout=10;
end
x(1)=I;
x(2)=V;
x(3)=Dout;
x(4)=P;
%fid=fopen('dout.txt','a');
%fprintf(fid,'%d \n',Dout);
%fclose(fid);
sys =Dout;
function sys=mdlGetTimeOfNextVarHit(t,x,u)
sampleTime = 1;
% 将计算得到的下一采样时刻赋给sys
% 切勿改动
sys = t + sampleTime;
评论0