在Modelica中调用几个相同的组件

时间:2013-08-05 13:29:40

标签: modelica

我似乎很难解决Modelica中的建模问题(使用Dymola),我在此寻求你的帮助。这个想法是这样的:

我已经建模了一些我希望通过其端口连接在一起的组件(模型)。这些模型正在运作。问题是我想在一系列中连接几个相同的单元(在下面的伪代码中称为myUnit)。如果单位的数量,比方说,只有5,那么我可以轻松地将它们逐个拖出并以标准方式连接它们,但是假设我想要100个单位。有一种简单而优雅的方法吗?我不相信循环在模型的等式部分之外工作,我想要一种优雅的方式命名单位。我将尝试通过下面的伪代码来说明这一点,解释我希望实现的目标:

model someModel
    parameter Integer n = 100 "Length of series";
    parameter Real optionValue = 123;
    myLibrary.myStartUnit startUnit(someOption = optionValue); // First unit
    for i in 2:n-1 loop
        myLibrary.myUnit unit_'num2str(i)'(someOption = optionValue); // i'th unit
    end for;
    myLibrary.myEndUnit endUnit(someOption = optionValue);     // Last unit
equation
    connect(startUnit.outPort,unit_1.inPort);
    for i in 2:n-1 loop
        connect(unit_'num2str(i)'.outPort,unit_'num2str(i+1)'.inPort)
    end for;
    connect(unit_'num2str(n-1)'.outPort,endUnit.inport);
end someModel;

我希望我现在能够正确解释我的问题。

解决此问题的任何提示?我非常感谢解决问题的战略建议以及纯粹的句法建议。 提前,谢谢你的帮助。 :)

1 个答案:

答案 0 :(得分:4)

您可以使用数组来实现此目的。例如,使用Modelica标准库的模型:

model ArrayDemo

  parameter Integer n = 10 "Number of springs/masses";

  Modelica.Mechanics.Translational.Sources.ConstantForce constantForce(f_constant=100);
  Modelica.Mechanics.Translational.Components.Spring springs[n];
  Modelica.Mechanics.Translational.Components.Mass masses[n];
  Modelica.Mechanics.Translational.Components.Fixed fixed;

equation 
  connect(constantForce.flange, springs[1].flange_a);
  for i in 1 : n - 1 loop
    connect(springs[i].flange_b, masses[i].flange_a);
    connect(masses[i].flange_b, springs[i + 1].flange_a);
  end for;
  connect(springs[n].flange_b, masses[n].flange_a);
  connect(masses[n].flange_b, fixed.flange);

 end ArrayDemo;

我们的想法是使用数组声明组件,然后使用for循环连接它们。