[未答复] S函数实现MPPT

[复制链接]
JY2013 发表于 2016-11-13 19:59:11
用S函数实现的MPPT程序如下,其中输入X分别为电压和电流, 输出却一直无法更新,请各位大虾帮忙看看,谢啦




function [sys,x0,str,ts,simStateCompliance] = optim_fun(t,x,u,flag)

switch flag

  case 0
    [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes;
   
  case 1
    sys=mdlDerivatives(t,x,u);

  case 2
    sys=mdlUpdate(t,x,u);
   
  case 3
    sys=mdlOutputs(t,x,u);  
   
  case 4
    sys=mdlGetTimeOfNextVarHit(t,x,u);
   
  case 9
    sys=mdlTerminate(t,x,u);
   
  otherwise
    DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end


function [sys,x0,str,ts,simStateCompliance]=mdlInitializeSizes

sizes = simsizes;

sizes.NumContStates  = 0;

sizes.NumDiscStates  = 3;

sizes.NumOutputs     = 1;

sizes.NumInputs      = 2;

sizes.DirFeedthrough = 0;

sizes.NumSampleTimes = 1;

sys = simsizes(sizes);

str = [];

x0  = [0.5,0.009,0.5];

ts  = [0 0];

simStateCompliance = 'UnknownSimState';

function sys=mdlDerivatives(t,x,u)

sys = [];


function sys=mdlUpdate(t,x,u)
x(1)=u(1);
x(2)=u(2);
dv=u(1)-x(1);
di=u(2)-x(2);
s=u(1)*u(2)-x(1)*x(2);
d=0.05;
    if dv==0
        if di==0
        x(3)=x(3);
        else
            if di>0
        x(3)=x(3)+d;
            else
        x(3)=x(3)-d;
            end
        end
    else   
        if s==0
        x(3)=x(3);
        else
            if s>0
         x(3)=x(3)+d;
            else
         x(3)=x(3)-d;
            end
        end
    end         
sys = [x(1) x(2) x(3)];


function sys=mdlOutputs(t,x,u)

sys =x(3);


function sys=mdlGetTimeOfNextVarHit(t,x,u)

sampleTime = 1;   

sys = t + sampleTime;



function sys=mdlTerminate(t,x,u)

sys = [];
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表