【发布时间】:2019-06-17 15:21:16
【问题描述】:
我想使用expandable connector(例如Bus-like structure)为更复杂的子系统(主要)模拟input和output连接(array将不允许有不同的单位它的元素和扁平列表变得笨拙,而 record 不允许在不编写方程式的情况下轻松连接其变量之一)。
虽然您可以简单地将一个变量连接到一个空 expandable connector 没有问题,但它的unit(和其他属性)不会被传递。因此,我想在可扩展连接器内灵活声明变量(例如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 Specification(版本 3.2 修订版 2)中,我们在 第 9.1.3 节可扩展连接器中找到:
在生成连接方程之前,在可扩展连接器中声明的非参数标量变量和非参数数组元素被标记为仅可能存在。非参数数组元素可以用数组维度“:”声明,表示大小未知。这适用于简单类型的变量和结构化类型的变量。
正如 f.wue 所指出的,我们应该连接connectors - 而不仅仅是输入和输出。我在上面的代码中对此进行了更改,但并没有解决问题。
【问题讨论】:
-
作为一个信息:您的实现在 dymola 中运行良好。也许 OpenModelica 只是不支持这个?
-
@f.wue 不幸的是,它在Wolfram System Modeler (Version 12.0) 中也不起作用。我曾经(天真地)相信 Modelica 是一种明确指定的语言?
标签: modelica openmodelica systemmodeler