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 Kommentare

Ameer Hamza
Ameer Hamza am 3 Okt. 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 am 3 Okt. 2020
Bearbeitet: ps19 am 3 Okt. 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 am 3 Okt. 2020
Can you attach the model?
ps19
ps19 am 3 Okt. 2020
Bearbeitet: ps19 am 5 Okt. 2020
Yes no problem. In attachment
Ameer Hamza
Ameer Hamza am 4 Okt. 2020
I tried running the model. The brakpoint is working and it does give non zero value in PWMout.
ps19
ps19 am 5 Okt. 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 am 6 Okt. 2020
Btw, look at persistent variables. You will need that to properly save PID values from the last step inside the function block.

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Produkte

Version

R2020a

Gefragt:

am 3 Okt. 2020

Kommentiert:

am 6 Okt. 2020

Community Treasure Hunt

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

Start Hunting!

Translated by