gpt4 book ai didi

modelica - 如何在可扩展连接器中使用灵活的阵列大小?

转载 作者:行者123 更新时间:2023-12-03 02:49:41 25 4
gpt4 key购买 nike

我想使用可扩展连接器(例如 Bus-like structure )来建模(主要)输入输出连接,以实现更复杂的连接子系统(数组不允许其元素具有不同的单位,并且扁平列表变得笨拙,而记录不允许仅轻松连接其变量之一,无需编写方程)。

虽然您可以简单地将变量连接到可扩展连接器而不会出现问题,但其单位(和其他属性)将不会被传递在。因此,我想在可扩展连接器内灵活地声明变量(例如 x[:]),并让它们的尺寸由实际连接确定。

不幸的是,这在OpenModelicaWolfram 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声明为子组件并通过innerouter传递数组大小也不起作用:

  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;

如何设置具有灵活的预定义数组变量的可扩展连接器

更新:

这似乎是与 OpenModelica 和 Wolfram System Modeler 有关的问题,因为给出的示例在 Dymola 中运行良好(参见下面 f.wue 的评论)。我在Wolfram Community上交叉发布了一个类似的问题.

Modelica Specification (版本 3.2 修订版 2)我们在第 9.1.3 节可扩展连接器中找到:

Before generating connection equations non-parameter scalar variables and non-parameter array elements declared in expandable connectors are marked as only being potentially present. A non-parameter array element may be declared with array dimensions “:” indicating that the size is unknown. This applies to both variables of simple types, and variables of structured types.

如 f.wue 所示,我们应该连接连接器 - 而不仅仅是输入和输出。我在上面的代码中更改了这一点,但它没有解决问题。

最佳答案

可行的方法是使用 RealInputs 和 RealOutputs 而不仅仅是 Real。这样连接就可以工作并且单位可以正确传递。

package FirstAttempt

model OuterModel
SimpleBusModel sbm;
Modelica.Blocks.Sources.RealExpression dummy(y=3);
equation
connect(sbm.x[1], dummy.y);
connect(sbm.x[2], dummy.y);

end OuterModel;

model SimpleBusModel
DataBus dataBus;
Modelica.Blocks.Interfaces.RealInput x[nout](each unit = "widgets");
parameter Integer nout = 2;
equation
connect(x, dataBus.x_in);
end SimpleBusModel;

expandable connector DataBus
Real[:] x_in(each unit = "widgets");
end DataBus;
end FirstAttempt;

然后,您可以使用标准库中的 Blocks.Routing 模型连接任何其他值,并将它们连接到 SimpleBusModelRealInput >.

编辑:

我更改了包并添加了 OuterModel。这就是我模拟 OuterModel 时 dymola 中的结果。这就是您想要实现的行为吗?

enter image description here

关于modelica - 如何在可扩展连接器中使用灵活的阵列大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56634321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com