USING PERSISTENT VARS IN CUSTOM SIMULINK MATLAB FUNCTION
18 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Evgeny Shavelzon
le 31 Oct 2016
Commenté : Snus Mumrik
le 2 Juil 2019
Hello, I have a FOR loop that makes a call for a custom simulink matlab function block I wrote every iteration. The function block has persistent variables that are supposed to remember their values from previous calls, however currently they don't. What do I do wrong?
Thats how the initialization looks (I don't use CLEAR in between the calls):
function[] = custom_func()
persistent gen tstat hyst comps xvalve yvalve;
if (isempty(gen))
[gen, tstat, hyst, comps, xvalve, yvalve]=data_locker();
end
2 commentaires
Jan
le 2 Nov 2016
Please do not use UPPERCASE, because this signals a SHOUTING and there is no reason to get upset here. Thanks.
Snus Mumrik
le 2 Juil 2019
Dear Sir,
There is really no need in wasting the time for both of us: for you to write and for me to read this. However, if you DO have a constructive comment on the question I had asked, I would be very thankful to read this.
Thanks.
Réponse acceptée
Shivang Menon
le 2 Nov 2016
I understand that you want the persistent variables to remember their values in a MATLAB function block. I tried using persistent variables in MATLAB function block, and placed the function block in a for iterator subsystem, and the persistent variables remember their values everytime the MATLAB function block is called by the Simulink Engine. Consider this code in a MATLAB function block:
function y = fcn()
persistent z d;
if(isempty(z))
z=1; d =0;
end
y = z + d;
z=z+1;
d=d+1;
Place the MATLAB function block inside a For iterator subsystem that executes 5 times on each time step. Connect the output of the MATLAB function block to a scope. You will see that output increases by 9 at each time step (use FixedStepDiscrete and set time step to 1 and stop time to 10). Please note that since the MATLAB function block is placed inside a For iterator subsystem, the MATLAB function block will execute 5 times (or N times) at each time step and the output of the 5th iteration will be taken as the output of the MATLAB function block for that time step. This is because the blocks inside a For subsystem are executed N times at each time step.
It is better to put a breakpoint in the code for the MATLAB function block and step through the code to understand more.
Hope this helps!
1 commentaire
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Simulink Functions dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!