【发布时间】:2021-08-19 20:22:39
【问题描述】:
我正在尝试通过以下方式使用数组可扩展连接器:
model MWE
expandable connector ControlBus
extends Modelica.Icons.SignalBus;
end ControlBus;
ControlBus controlBus[1];
Modelica.Blocks.Math.Gain gain(k=1);
equation
connect(gain.u, controlBus[1].a);
end MWE;
...但是 Dymola 会抛出关于在记录扩展中找不到成员“a”的错误。
奇怪的是,如果我在 controlBus 声明之后(不是之前!)声明了一个整数参数并使用它来指定 controlBus 的大小,它会按预期工作而没有错误:
model MWE
expandable connector ControlBus
extends Modelica.Icons.SignalBus;
end ControlBus;
ControlBus controlBus[k];
Modelica.Blocks.Math.Gain gain(k=1);
parameter Integer k=1;
equation
connect(gain.u, controlBus[1].a);
end MWE;
我的主要问题是 Modelica 中是否允许使用阵列可扩展连接器?如果是这样,我的第一种方法是否存在任何问题,或者 Dymola 是否存在一些错误(显然恰好可以通过第二种方法中的解决方法克服)?
编辑:添加另一个相关示例,其中声明顺序似乎与可扩展连接器有所不同:
model MWE
expandable connector ControlBus
Real variable;
end ControlBus;
ControlBus controlBus;
Modelica.Blocks.Sources.RealExpression realExpression(y=controlBus.variable);
end MWE;
这里 Dymola 会在检查时发出警告,但会编译。但是,如果我在 realExpression 之后声明 controlBus,它就不会抱怨了。
【问题讨论】:
-
我在 OpenModelica 中试过这个(有效,没有警告)。我尝试时 Dymola 给我的另一个有趣的信息是
Connected variables must have subscripts that can be expanded into literals.,但1是文字。 -
@sjoelund.se 感谢您对此进行检查