我想使用expandable connector
(例如类似总线的结构)来(主要)为更复杂的子系统建模input
和连接(An将不允许其元素具有不同的单元,并且扁平列表变得笨拙,而 a不允许仅轻松连接它的一个变量没有写方程)。output
array
record
虽然您可以简单地将一个变量连接到一个空 expandable connector
而没有问题,但它的unit
(和其他属性)不会被传递。因此,我想在可扩展连接器(例如 like x[:]
)内灵活地声明变量,并让它们的尺寸由实际连接确定。
不幸的是,这在OpenModelica和Wolfram System Modeler中均无效:
package FirstAttempt
model SimpleBusModel
DataBus dataBus;
Modelica.Blocks.Interfaces.RealOutput x[ nout ](each unit = "widgets");
parameter Integer nout = 2;
equation
x = ones( nout );
connect( x, dataBus.x );
end SimpleBusModel;
expandable connector DataBus
Real[:] x(each unit = "widgets");
end DataBus;
end FirstAttempt;
...也没有将其声明connector
为子组件并通过以下方式传递数组大小inner
并计算outer
出:
model SimpleBusModel
DataBus dataBus;
Modelica.Blocks.Interfaces.RealOutput x[ nout ](each unit = "widgets");
inner parameter Integer nout = 2;
expandable connector DataBus
Real[nout] x(each unit = "widgets");
outer parameter Integer nout;
end DataBus;
equation
x = ones( nout );
connect( x, dataBus.x );
end SimpleBusModel;
如何expandable connector
设置具有灵活、预定义的数组变量?
更新:
这似乎是与 OpenModelica 和 Wolfram System Modeler 相关的问题,因为给出的示例在 Dymola 中运行良好(参见下面 f.wue 的评论)。我在Wolfram Community上交叉发布了一个类似的问题。
在Modelica 规范(版本 3.2 修订版 2)中,我们在第 9.1.3 节可扩展连接器中找到:
在生成连接方程之前,在可扩展连接器中声明的非参数标量变量和非参数数组元素被标记为仅可能存在。非参数数组元素可以用数组维度“:”声明,表示大小未知。这适用于简单类型的变量和结构化类型的变量。
正如 f.wue 所指出的,我们应该连接connectors
- 而不仅仅是输入和输出。我在上面的代码中对此进行了更改,但这并没有解决问题。