How declare a variable only once in a matlab function block and then use the previous value the nex time the function is used?

15 views (last 30 days)
I am using the matlab function block in simulink. I need it to continuously read its inputs and change its outputs. The problem is that I must declare my start position as zero. Then my function runs and increments as desired. THEN it seems to enter the function again and reset to zero (as it would). I need to declare the variable to zero the very first time through the function then all times after use the value that it generated before. See code below:
function y = fcn(sEMG5,sEMG6)
%#codegen
% %set original servo positions to zero
% servo2=0;
% servo3=0;
% servo4=0;
% servo5=0;
%incrememt servo position when threshold is met
if sEMG5 > 150
servo2 = servo2+3;
elseif sEMG6 > 150
servo2= servo2-3;
end
%keep servo position in allowable range
if servo2 > 180
servo2 = 180;
elseif servo2 < 0
servo2 = 0;
else
servo2=servo2;
end
y = servo2;
So my problem is how to declare servo2 as zero once and then use the value that y was all successive times through. Thanks!

Accepted Answer

Ryan Livingston
Ryan Livingston on 9 Jul 2014
You could also use a persistent variable inside your MATLAB function block:
function y = fcn(sEMG5,sEMG6)
%#codegen
persistent servo2;
% set original servo positions to zero the
% first time this function is invoked
if isempty(servo2)
servo2=0;
end
% Use servo2 here
...

More Answers (1)

Anthony Poulin
Anthony Poulin on 9 Jul 2014
Is it possible for you to have one more input and one more output? What I suggest is to do like the image below:
You do not work with a variable but with an input (u2) that you update and affect to the output (y2). With a unit delay you have your output, in input the next simulation step u2(z) = y2(z-1). (You configure your unit delay with the initial value to 0)

Categories

Find more on Event Functions in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!