阵列可扩展连接器问题
Array Expandable Connector Issue
我正在尝试通过以下方式使用阵列可扩展连接器:
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,它就不会抱怨了。
在 Modelica 中没有任何内容使该示例非法; a
是可扩展连接器组件 controlBus[1]
的未声明成员。
https://specification.modelica.org/maint/3.5/connectors-and-connections.html#expandable-connectors
Dymola 似乎需要改进才能处理这种情况,假设下一个常规版本不会发生任何奇怪的事情。
我正在尝试通过以下方式使用阵列可扩展连接器:
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,它就不会抱怨了。
在 Modelica 中没有任何内容使该示例非法; a
是可扩展连接器组件 controlBus[1]
的未声明成员。
https://specification.modelica.org/maint/3.5/connectors-and-connections.html#expandable-connectors
Dymola 似乎需要改进才能处理这种情况,假设下一个常规版本不会发生任何奇怪的事情。