pre 的代码生成中的内部错误
Internal error in code generation for pre
我试图通过使用pre
运算符来避免Modelica中的代数环,但是当我使用像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 语言规范 (section 3.7.3 on event related operators -> table) 中读到 pre
的参数需要是变量,而不是表达式。
我试图通过使用pre
运算符来避免Modelica中的代数环,但是当我使用像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 语言规范 (section 3.7.3 on event related operators -> table) 中读到 pre
的参数需要是变量,而不是表达式。