我似乎很难解决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;
我希望我现在能够正确解释我的问题。
解决此问题的任何提示?我非常感谢解决问题的战略建议以及纯粹的句法建议。 提前,谢谢你的帮助。 :)
答案 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
循环连接它们。