gpt4 book ai didi

Modelica - 是否可以将子模型的名称设置为另一个变量的值?

转载 作者:行者123 更新时间:2023-12-05 08:46:13 26 4
gpt4 key购买 nike

我在 Modelica 语言方面相当菜鸟,对于这个简单问题的任何帮助,我将不胜感激。我想知道是否可以将变量名称(取决于子模型)编写为其他变量的函数以缩短通用代码。这里有一个关于我想做什么的例子。

我正在考虑一个包含标准模型库(tank1、tank2 和 tank3)的三个相同子模型 (OpenTank) 的顶级模型。我想知道是否可以使用这样的循环(附上示例代码)或类似的方式从顶级模型调用子模型内部的变量(“level”),而不是将代码重复三次(我真的很想在顶层模型中设置这个操作)

你会建议我做什么?提前致谢!

model threeTanks
Modelica.Fluid.Vessels.OpenTank tank1;
Modelica.Fluid.Vessels.OpenTank tank2;
Modelica.Fluid.Vessels.OpenTank tank3;
equation
for i in 1:3 loop
tank(i).level= /* … */;
end for;
end threeTanks;

最佳答案

您将需要一个组件迭代器,它在Modelica Change Proposal MCP-0021 Component Iterators 中提出。 .但它目前还不可用,如果我没看错的话,自 2016 年以来没有任何变化,所以不要期望很快就会得到它。

使用当前的 Modelica 语言版本(在 Modelica Language Specification 3.5 中指定),在引用组件时必须使用文字名称。
(在 Modelica 中,您可能从其他语言中了解到 eval。)

因此要么选择 Rene Just Nielsens 解决方案并使用矢量化水箱。这可行,但在图形 View 中您将只有一个坦克。然后参数窗口将接受矢量,并且水箱连接器也将被矢量化。

如果您不想这样,您也可以像以前一样实例化您的坦克,并手动指定您要迭代的组件名称:

for item in {tank1, tank2, tank3} loop
item.level= /* … */;
end for;

问题也是你想达到什么目的。水箱已经有计算液位的方程式,因此您不太可能想要设置它。

也许您想将所有层级都集中在一个变量中。您可以通过添加这一行来做到这一点:

Modelica.Units.SI.Length levels[3] = {item.level for item in {tank1, tank2, tank3}};

关于Modelica - 是否可以将子模型的名称设置为另一个变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70081501/

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