my code doesn't get into my If statement
1 view (last 30 days)
Show older comments
Mahmoud Elaktash
on 15 Aug 2020
Commented: Antonio Ciociola
on 15 Aug 2020
So my code doesn't get into my first if statment for some reason even though it's valid check the screen shot for Counter and Sc values
% function for Perturb and Observe MPPT algorithm
function k_values=P_and_O_Final(sc,Vc,k,RL)
counter=sc-4;
if counter>1 && counter<sc-4
I_next_1=(Vc(sc+1))/RL;
I_next_2=(Vc(sc+4))/RL;
P_next_1=Vc(sc+1)*I_next_1;
P_next_2=Vc(sc+4)*I_next_2;
I_actual=(Vc(sc))/RL; % The input current value in the current cycle
I_prev_1=(Vc(sc-1))/RL;
I_prev_2=(Vc(sc-4))/RL; % The input current value in the previous cycle
P_actual=Vc(sc)*I_actual; % to calculate the power value for the current cycle
P_prev_1=Vc(sc-1)*I_prev_1;
P_prev_2=Vc(sc-4)*I_prev_2; % To calculate the power value for the previous cycle
delta_V= Vc(sc+1)- Vc(sc) ;
delta_V1= Vc(sc+4)-Vc(sc);
delta_P= P_next_1 - P_actual;
delta_P1= P_next_2 - P_actual;
delta_V_1= Vc(sc)-Vc(sc-4 );
delta_V_2= Vc(sc)-Vc(sc-1);
delta_P_1= P_actual-P_prev_2;
delta_P_2= P_actual-P_prev_1;
if delta_P>0.0001
if delta_V>0
k=k-0.00002;
else
k=k+0.00002;
end
end
if delta_P1 >0.0001
if delta_V1>0
k=k-0.00002;
else
k=k+0.00002;
end
end
% delta_P1= [P_actual-P_prev_2,P_actual-P_prev_1]
%delta_V1=[Vi(z)-Vi(z-2) , Vi(z)-Vi(z-1)]
%delta_V=Vi(z)-Vi(z-1); % to calculate the difference between current voltage value and the previous one.
%delta_P=P_actual-P_prev; % to calculate the difference between current power value and the previous one.
%delta_V=[Vi(z)-Vi(z-2), Vi(z)-Vi(z-1), Vi(z)-Vi(z+1),Vi(z)-Vi(z+2)]
%delta_P=[P_actual-P_prev_2,P_actual-P_prev_1,P_actual-P_next_1,P_actual-P_next_2]
% if statment used to ecide whether to increase or decrease duty ratio(k) value
% depending on voltage and Power difference values.
if delta_P_1<(-0.0001)
if delta_V_1>0
k=k+0.00002;
else
k=k-0.00002;
end
if delta_P_2 <(-0.0001)
if delta_V_2>0
k=k+0.00002;
else
k=k-0.00002;
end
end
end
end
k_values=k % used to store new k in the output
end
0 Comments
Accepted Answer
Antonio Ciociola
on 15 Aug 2020
The problem seems to be here:
counter=sc-4;
if counter>1 && counter<sc-4
If you set "counter" to "sc-4" the following condition can't be statisfied
counter<sc-4
The problem is that you used the "&&" operator and it means that you need to satisfy both conditions.
2 Comments
Antonio Ciociola
on 15 Aug 2020
This is a more specifc question and it depends on the behaviour that you want to get (the goal of your code/function).
Looking at the code, it seems that you can force the code to go into the if statement if you modify the code like this:
if counter>1 && counter<=sc-4
But I'm not sure that is the behaviour that you want to obtain
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!