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 Comments

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 on 3 Oct 2020
Edited: ps19 on 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.
Can you attach the model?
ps19
ps19 on 3 Oct 2020
Edited: ps19 on 5 Oct 2020
Yes no problem. In attachment
I tried running the model. The brakpoint is working and it does give non zero value in PWMout.
It`s started working, I created new model recreated block by block, something must have been crashed in some configuration stage.
Btw, look at persistent variables. You will need that to properly save PID values from the last step inside the function block.

Sign in to comment.

Answers (0)

Categories

Products

Release

R2020a

Asked:

on 3 Oct 2020

Commented:

on 6 Oct 2020

Community Treasure Hunt

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

Start Hunting!