Я пытаюсь избежать алгебраического цикла в Modelica, используя оператор pre
, но когда я использую что-то вроде pre(x>0.5)
, возникает ошибка Internal error in code generation for pre
.
И если я использую pre(cond)
, где cond
— переменная логического типа, ошибки не будет.
Мой вопрос: есть ли какое-то регулирование оператора pre
, которое требует, чтобы я НЕ мог использовать выражения внутри оператора pre
.
Вот код и скриншот:
model WithAlgebraicLoop_Wrong2
"Demonstration of how to avoid generating algebraic loop,
but end up with internal error in code generation for pre"
Real x,y(start=1,fixed=true);
equation
when pre(x>0.5) then
y=1*time;
end when;
x=sin(y*10*time);
end WithAlgebraicLoop_Wrong2;
model WithAlgebraicLoop_Right "Demonstration of how to avoid generating algebraic loop"
Real x,y(start=1,fixed=true);
Boolean cond;
equation
cond=x>0.5;
when pre(cond) then
y=1*time;
end when;
x=sin(y*10*time);
end WithAlgebraicLoop_Right;
Вы можете прочитать в спецификации языка Modelica (раздел 3.7.3 об операторах, связанных с событиями -> таблица), что аргумент pre
должен быть переменной, а не выражением.