Simscape/Simulink persistent variable in algebraic loop
이전 댓글 표시
I have a simple Simscape electrical model containg a circuit that trips if a current is exceeded. I want the trip to happen a certain time after the current excess, so I use Matlab function block and the Simulink Clock Block to track time.
The red highlighted portion is flagged as modifying a persistent variable in an algebraic loop.

This page says to avoid such loops:
But I am not sure how to acheive my goal without the MATLAB function block and the Simulink Clock.
The code in my function block is here:
% Monitors current. If over current, trip with a timed delay.
function switch_control = current_monitor(current, clockin)
persistent starttime;
persistent tripped;
if isempty(starttime)
starttime = 0;
end
if isempty(tripped)
tripped = false;
end
if (current > 10)
starttime = clockin;
if ((clockin - starttime) > 0.2) % fixed delay of 200ms
tripped = true;
end
end
if(tripped)
switch_control = 0;
else
switch_control = 1;
end
end
Any insights on what I am doing wrong?
채택된 답변
추가 답변 (1개)
Alan Lian
2023년 4월 10일
0 개 추천
I meet the same problem today, and I try a new way different from you. Put a switch after switch control, and use a step to turn on this signal channel in 1e-5 second. This solution works well in my condiction.
카테고리
도움말 센터 및 File Exchange에서 Electrical Sensors에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!