在Modelica中的特定时间评估变量

时间:2013-08-14 13:32:46

标签: modelica

我在Modelica模拟中使用了一系列变量(使用Dymola),这些变量运行良好。现在我想绘制某些变量的行为,这些变量被编号(带索引)。我不希望绘制变量与时间的关系,而是与它们的索引相比较。我打算使用plotArray函数,但这不是我在这篇文章中的好奇心。问题是,当我调用它们时,所有变量都为零,这确实是它们的初始值,但我想在稳态设置时获得它们的值,比如说time = 5000时。因此,我需要在特定时间评估变量。

如何在模拟的特定时间或模拟结束时评估变量?

编辑经过广泛的谷歌搜索后,我遇到了一个名为val()的函数,这似乎可以做我想要的,但我无法使用我的Dymola软件

编辑2:我已经设法根据需要评估我的变量,但我使用的方法(在我看来)超出了乏味。我将.mat文件从模拟中提取到MATLAB中,在那里我最终设法识别出我想要的变量,然后在所需的时间绘制它们。然而,让我感到惊讶的是.mat文件中变量的明显混乱。乍一看,我的变量在Modelica模型中的排序方式与它们在.mat文件中的排序方式之间几乎没有一致意见,并且没有变量的命名,让我只根据比较它们来搜索变量Dymola模拟的价值。我在这里完全弄错了,还是有一些更简单的方法从.mat文件中提取变量?

2 个答案:

答案 0 :(得分:2)

也许我误解了你的问题,但我怀疑这里有一个简单的答案。听起来你有一个数组,你想在特定时间用特定变量的值填充该数组,然后绘制数组。因此,例如,假设您有一个变量x,并且您希望记录x超过某些阈值的时间。像这样的简单模型就足够了:

model RecordVariables
  Real x;
  Real times[10];
initial equation 
  x = 11;
equation 
  der(x) = -x;
  when x<=10.0 then
    times[1] = time;
  end when;
  when x<=9.0 then
     times[2] = time;
  end when;
  when x<=8.0 then
    times[3] = time;
  end when;
  when x<=7.0 then
     times[4] = time;
  end when;
  when x<=6.0 then
     times[5] = time;
  end when;
  when x<=5.0 then
     times[6] = time;
  end when;
  when x<=4.0 then
    times[7] = time;
  end when;
  when x<=3.0 then
     times[8] = time;
  end when;
  when x<=2.0 then
    times[9] = time;
  end when;
  when x<=1.0 then
     times[10] = time;
  end when;
end RecordVariables;

当然,写出所有when条款非常繁琐。所以我们实际上可以创建一个更紧凑的版本:

model RecordVariables2
  Real x;
  Real times[5];
  Integer i;
  Real next_level;
initial equation 
  next_level = 10.0;
  x = 11;
  i = 1;
algorithm 
  der(x) :=-x;
  when x<=pre(next_level) then
    times[i] :=time;
    if i<size(times,1) then
      i :=pre(i) + 1;
      next_level :=next_level - 1.0;
    end if;
  end when;
end RecordVariables2;

关于这种方法的一些评论。首先,请注意pre运算符的使用。这对于在i子句生成的事件之前和之后区分变量next_levelwhen的值是必要的。其次,您将注意if子句中的when语句,该语句阻止索引i变得足够大以“溢出”times缓冲区。这允许您将times设置为您想要的任何大小,并且不会冒这样的溢出风险。但请注意,在此模型中完全有可能使times如此之大,以至于永远不会填充某些值。

我希望这会有所帮助。

答案 1 :(得分:1)

您可以使用DymBrowse.m将结果文件中的变量加载到Matlab。它应该在\ Program Files \ Dymola xx \ Mfiles \ dymtools中可用。 将目录\ Mfiles ...添加到matlab路径。