我想激发我之前提出的关于Modelica array of partial model的问题。考虑以下 2 个控制器之间的切换模型。
model Switch
input Real u;
input Integer sel;
output Real y;
protected
Real x;
equation
if sel == 1 then
y = 0.1 * (0 - u);
der(x) = 0;
else
y = 0.1 * (0 - u) + 0.2 * x;
der(x) = 0 - u;
end if;
end Switch;
让我们忽略一个事实,即 PI 控制器在一段时间未选择时可能会由于 的分歧而中断x
。这可以通过x
在选择 PI 控制器时复位来解决。然而,这不是重点。
我想以两种方式抽象这个开关。首先,在参数数量的控制器之间切换。其次,使用部分模型来抽象控制器。设Ctrl
为控制器的部分模型。
partial model Ctrl
input Real u;
output Real y;
end Ctrl;
我们可以如下实例化嵌入在交换机中的两个控制器。
model P extends Ctrl;
equation
y = 0.1 * (0 - u);
end P;
model PI extends Ctrl;
protected
Real x;
equation
y = 0.1 * (0 - u) + 0.2 * x;
der(x) = 0 - u;
end PI;
开关的抽象版本应该是这样的:
model Switch
parameter Integer N(min=1);
Ctrl c[N];
input Real u;
input Integer sel(min=1, max=N);
output Real y;
equation
for i in 1:N loop
c[i].u = u;
end for;
y = c[sel].y;
end Switch;
但是,这种模式存在一些问题。首先,尚不清楚如何实例化该模型,例如使用P
一对一PI
控制器。其次,我收到一个令我惊讶的警告,即:以下输入缺少绑定方程:c[1].u
是否有可能以某种方式在 Modelica 中表达这个抽象开关?