错误消息中的“涉及整数或布尔值的代数循环”是什么意思

时间:2019-11-04 02:23:28

标签: modelica dymola

我正在使用Dymola平台制作PI控制器,但遇到如下错误消息

Error message

这是我的一些代码,其中包括用于计算分配量的阀和控制分配量的PI控制器。 他们正在使用标志互相沟通

b

有人可以告诉我代数循环错误是什么意思,找出问题所在吗?

1 个答案:

答案 0 :(得分:5)

从您的代码段中很难分辨出问题出在哪里。

Dymola告诉您,您为Unknowns下顶部列出的所有变量和Equations下部分列出的方程式创建了一个大的代数循环。 当您创建变量彼此依赖的if语句时,这很容易发生。通常,您只需要在正确的位置使用pre()即可中断循环。

让我们用另一个小例子来解释这个问题。 由于某些原因,我们尝试计算完整的毫秒数,直到当前时间达到100毫秒为止,当前仿真中该毫秒数已停止并停止。

model count_ms
  Integer y(start=0);
equation 
  if y >= 100 then
    y = 100;
  else
    y = integer(1000*time);
  end if;
end count_ms;

此代码将产生与您类似的错误:

  

已检测到涉及整数或布尔值的代数循环。
  未知:y

     

等式:y =(如果y> = 100,则为100,否则为整数(1000 *时间));

从错误消息中我们看到y无法解决,这是由于if语句产生的等式所致。该方程式不可解,因为y取决于自身。为了解决此类问题,引入了pre,它使您可以访问事件触发时具有的变量的值。

要修复上面的代码,我们只需在检查pre时使用y

if pre(y) >= 100 then

,模型将按预期进行仿真。