MATLAB: USING PERSISTENT VARS IN CUSTOM SIMULINK MATLAB FUNCTION

persistentsimulink

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

Best Answer

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!