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 的参数需要是变量,而不是表达式。