Modelica传播/默认变量名称

时间:2015-12-02 16:41:22

标签: modelica

我想在模型中设置默认变量名称T(= xx) - 将该模型拖动到新模型中并在那里定义变量xx。 我收到错误消息:使用未声明的变量xx。

这是子模型

model test
  parameter Real T = xx;
  Real f;
equation 
  f = T + time;
end test;

这是完整的模型

model fullmodel
  parameter Real xx = 12;
  Test Test1; 
end fullmodel;

我的问题:你如何在Modelica中做到这一点?我需要我的模型100相同的模型,我想设置一些参数(diamter,lenghts等)默认为变量名称,然后定义这个变量。我知道我可以传播变量 - 但是如果我只需要拖动模型然后定义参数就会很好。谢谢你的帮助!

3 个答案:

答案 0 :(得分:3)

您应该可以执行以下操作:

model test
  parameter Real T;
  Real f;
equation 
  f = T + time;
end test;

model fullmodel
  parameter Real xx = 12;
  Test Test1(T = xx);
end fullmodel;

答案 1 :(得分:2)

或者你可以使用inner / outer:

来做到这一点
model Test
  outer parameter Real xx;
  parameter Real T = xx;
  Real f;
equation 
  f = T + time;
end Test;

model fullmodel
  inner parameter Real xx = 12;
  Test test1;
end fullmodel;

答案 2 :(得分:2)

如果您有多个相同型号的实例并且您不想重复修改,则另一种可能性是执行以下操作:

model test
  parameter Real T;
  parameter Real S=1;
  Real f;
equation 
  f = S*(T + time);
end test;

model fullmodel
  parameter Real xx = 12;
  // Create an "alias" model using a short class definition that
  // includes a modification (for all instances of PreConfig).
  model PreConfig = Test1(T=xx);
  // Now create instances (potentially with their own unique values
  // for some parameters
  PreConfig pc1(S=1), pc2(S=2), pc3(S=3);
end fullmodel;

正如我在上面的评论中提到的,使用数组的fullmodel的另一个实现将如下所示:

model fullmodel
  parameter Integer n = 100;
  parameter Real xx = 12;
  // Create 100 instances of Test1.  Each on has the same
  // value for T, but they each have different values for
  // S
  Test1 tarray[n](each T=xx, S=linspace(0, 1, n));
end fullmodel;