我正在使用Dymola平台制作PI控制器,但遇到如下错误消息
这是我的一些代码,其中包括用于计算分配量的阀和控制分配量的PI控制器。 他们正在使用标志互相沟通
b
有人可以告诉我代数循环错误是什么意思,找出问题所在吗?
答案 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
,模型将按预期进行仿真。