Persistent Variable will not update in a function call

I have a sub-function of an EML Simulink Block that has a persistent variable, wm_last, declared. The variable is not used anywhere other than within this function call. I keep getting an error when I try to update this variable. When he line, "wm_last = wm" is uncommented, my model will not build. What gives?
function corr = LeverArmCorrection(m_deltaTime, deltaThetaMountingFrame, ...
earthRateMountingFrame)
persistent wm_last
if isempty(wm_last)
wm_last = zeros(1,3);
end
m_TableLeverArm = [0.00524; 0.4416; 1.2755];
%mounting to ENA frame rate (rad/sec)
wm = (deltaThetaMountingFrame / m_deltaTime) - earthRateMountingFrame;
%mounting to ENA frame angular acceleration (rad/sec^2)
am = (wm - wm_last) ./ m_deltaTime;
% wm_last = wm;
%mounting frame sensed acceleration sensitivity to lever arm
XM = zeros(3,3); % mounting frame sensed accel sensitivity to lever arm (ft/sec^2/ft)
XM(1, 1) = -wm(2).^2 - wm(3).^2;
XM(2, 2) = -wm(1).^2 - wm(3).^2;
XM(3, 3) = -wm(1).^2 - wm(2).^2;
XM(1, 2) = wm(1) * wm(2) - am(3);
XM(1, 3) = wm(1) * wm(3) + am(2);
XM(2, 1) = wm(2) * wm(1) + am(3);
XM(2, 3) = wm(2) * wm(3) - am(1);
XM(3, 1) = wm(3) * wm(1) - am(2);
XM(3, 2) = wm(3) * wm(2) + am(1);
%lever arm correction (ft/sec^2)
XRM = (XM * m_TableLeverArm)';
corr = XRM .* m_deltaTime;
end

2 comentarios

What's the error you're getting?
Alyssa
Alyssa el 11 de Mayo de 2015
I get an "Error occured during pasring of Matlab Funciton 'GCA/Local/..."
If I comment out the "wm_last = wm" as shown above, the model compiles and runs just fine. Error doesn't give you much, does it...

Iniciar sesión para comentar.

Respuestas (1)

Image Analyst
Image Analyst el 8 de Mayo de 2015
Try making it global instead of persistent. It should work then.

4 comentarios

@Image Analyst: Do you have any explanation of why presistent does not work? I can't see why it shouldn't.
No I don't. Hoping to hear if this solved it. If no other functions declare the variable global then it's just in this function, and for all intents and purposes it's like a persistent except it's easier because you don't have to initialize it.
Alyssa
Alyssa el 11 de Mayo de 2015
When I make the variable global, I get a port dimension error. I'm completely stumped. We have persistent variables in multiple other subfunctions - updated in exactly the same way. This makes no sense.
@Alyssa: can you please give us the complete error message, which includes all of the red text.

Iniciar sesión para comentar.

Categorías

Más información sobre General Applications en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 6 de Mayo de 2015

Comentada:

el 12 de Mayo de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by