Matlab function in Simulink

Hello,
I have problem with MATLAB function in Simulink - after Run values are always zero, while other parts of code (built in PID controller) are working quite good.
function PWMout = myPID(valTarget,valPres, kp, ki, kd, Td, Ts,errorPrev,...
PIDoutMax, PIDoutMin, errorTolerance)
upperBound = PIDoutMax - (PIDoutMax*(1-errorTolerance));
lowerBound = PIDoutMin - (PIDoutMin*(1-errorTolerance));
errPres = valTarget - valPres;
Pout = kp*(errPres - errorPrev);
Iout = ki*errPres;
Dout = kd*(Td/Ts)*(errPres - (2*errorPrev) + ...
+ errorPrev);
PIDoutTemp = Pout + Iout + Dout;
PWMout = PIDoutTemp;
errorPrev = errPres;
end

7 commentaires

Ameer Hamza
Ameer Hamza le 3 Oct 2020
Try adding a breakpoint inside the function to see whether what is causing the output to remain zero. https://www.mathworks.com/help/matlab/matlab_prog/set-breakpoints.html
ps19
ps19 le 3 Oct 2020
Modifié(e) : ps19 le 3 Oct 2020
Yes I know about debugging but code is in Subsystem/MATLAb function block and when I will add breakpoint it didn`t stop on it - it didn't matter which place in code of subsystem.
Ameer Hamza
Ameer Hamza le 3 Oct 2020
Can you attach the model?
ps19
ps19 le 3 Oct 2020
Modifié(e) : ps19 le 5 Oct 2020
Yes no problem. In attachment
Ameer Hamza
Ameer Hamza le 4 Oct 2020
I tried running the model. The brakpoint is working and it does give non zero value in PWMout.
ps19
ps19 le 5 Oct 2020
It`s started working, I created new model recreated block by block, something must have been crashed in some configuration stage.
Ameer Hamza
Ameer Hamza le 6 Oct 2020
Btw, look at persistent variables. You will need that to properly save PID values from the last step inside the function block.

Connectez-vous pour commenter.

Réponses (0)

Catégories

Produits

Version

R2020a

Question posée :

le 3 Oct 2020

Commenté :

le 6 Oct 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by