Persistent Variable will not update in a function call
9 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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
Respuestas (1)
Image Analyst
el 8 de Mayo de 2015
Try making it global instead of persistent. It should work then.
4 comentarios
Stephen23
el 12 de Mayo de 2015
@Alyssa: can you please give us the complete error message, which includes all of the red text.
Ver también
Categorías
Más información sobre General Applications en Help Center y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!