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

在Modelica中调用几个相同的组件,modelica,Modelica,我似乎在为Modelica(使用Dymola)中的一个建模问题而挣扎,我在此寻求您的帮助。这个想法是: 我已经建模了一些组件(模型),我想通过它们的端口将它们连接在一起。模型正在运行。问题是我想把几个相同的单元(在下面的伪代码中称为myUnit)串联起来。如果单位的数量是,比方说,只有5个,那么我可以很容易地把它们一个接一个地拖出来,然后用标准的方式连接起来,但是我想要100个单位。有没有一种简单而优雅的方法可以做到这一点?我不相信循环在模型的等式部分之外工作,我想要一种优雅的命名单位的方法。我

我似乎在为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;
我希望现在我已经设法正确地解释了我的问题

解决这个问题有什么建议吗?我非常欣赏解决问题的策略性建议以及纯粹的语法建议。
首先,感谢您的帮助。:)

您可以使用数组来实现这一点。例如,使用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
循环连接它们。

您可以使用数组来实现这一点。例如,使用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
循环连接它们。

您好,欢迎使用StackOverflow!请注意,为了简洁起见,我们不会在帖子中添加签名或问候语(请参阅常见问题)。因此,我已将您的问候从帖子中删除(这里鼓励您编辑其他人的帖子)。您好,欢迎来到StackOverflow!请注意,为了简洁起见,我们不会在帖子中添加签名或问候语(请参阅常见问题)。因此,我将你的问候从帖子中删除(这里鼓励编辑其他人的帖子)。谢谢!这帮了大忙@用户2527335:很高兴我能帮助你。如果这解决了您的问题,请(单击旁边的复选标记)。这标志着问题已解决(并奖励答案的海报)。谢谢!这帮了大忙@用户2527335:很高兴我能帮助你。如果这解决了您的问题,请(单击旁边的复选标记)。这标志着问题已经解决(并奖励给出答案的海报)。