gpt4 book ai didi

modelica - 如何将多个变量从一个模型传递到另一个模型(内部/外部)

转载 作者:行者123 更新时间:2023-12-02 14:55:13 24 4
gpt4 key购买 nike

假设我们有以下模型:

收藏家:

model Collector
Real collect_here;
annotation(defaultComponentPrefixes="inner");
end Collector;

和以下模型可能多次:

model Calculator
outer Collector collector;
Real calculatedVariable = 2*time;

equation
calculatedVariable = collector.collect_here;

end Calculator;

如果 calcModel 在要模拟的系统中只存在一次,则上面的代码有效。如果模型不止一次存在,我会得到一个单一的系统。下面的示例证明了这一点。更改参数 works 要么提供工作系统,要么提供故障系统。

model Example
parameter Boolean works = true;

inner Collector collector;
Calculator calculator1;
Calculator calculator2 if not works;

end Example;

在收集器内部使用数组传递多个变量并不能解决问题。

解决这个问题的另一种可能方法是使用连接器,但我只让它与一个 calcModel 一起工作。

最佳答案

使用 Calculator 的多个实例确实会破坏模型,因为单个变量 calculatedVariable 将有多个方程式试图计算其值。因此 Dymola 提示该系统在结构上是单一的,在这种情况下意味着在最终的方程组中方程比变量多。

为了提供更多的见解:实际上检查 Collector 将失败,因为从 Modelica 3.0 开始每个组件都必须平衡(意味着它必须具有与状态一样多的未知数),这是Collector 不是这种情况,因为它确实有一个未知但没有等式。这极大地限制了 inner/outer 构造的可能应用,因为基本上每个变量都必须在定义的地方计算。

在给定的示例中,如果只使用一个Calculator,这将在整个系统中得到补偿。所以这个单一的组合会起作用。虽然这行得通,但这是不应该做的事情 - 原因很明显,很容易出错(并且所有子模型都应该通过检查)。

您关于如何解决此问题的问题实际上遗漏了对问题实际情况的描述。在我看来,在某些情况下,您的方法可能对以下方面有用:

  1. 您想从一个点绘制多个变量,这将是收集器。为此,“变量选择”应该是最直接的方法:参见 Dymola Manual Vol. 1,“4.3.11匹配和变量选择”部分如何应用它们。
  2. 您想对这些变量进行一些数学运算。那么拥有可变大小的矢量化输入可能会很有用。这允许任意数量的连接到这个输入。有关这方面的示例,请查看:Modelica.Blocks.Math.MultiSum
  3. 您想在不同型号之间路由多个信号(从您的描述来看这不太可能,但仍然如此):那么可扩展连接器 将是一个很好的可能性。要了解它的作用,请查看 Modelica.Blocks.Examples.BusUsage

希望这对您有所帮助,否则请更清楚地说明您实际希望通过代码实现的目标。

关于modelica - 如何将多个变量从一个模型传递到另一个模型(内部/外部),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53284169/

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