样本功能对Dymola不起作用

时间:2013-02-19 08:26:12

标签: modelica dymola

我尝试使用Dymola编译以下代码:

class abc
  import Modelica.SIunits;
  parameter SIunits.Time delta_t=0.5;

  constant Real a[:]={4,2,6,-1,3,5,7,4,-3,-6};
  Real x;
  Integer j(start=1);
  Integer k=size(a, 1);

algorithm 
  when {(sample(0, delta_t) and j < k),j == 1} then
    x := a[j];
    j := j + 1;
  end when;
end abc;

time = 0变量j2开头。但它应该从j = 1开始 有没有人对这个问题有所了解?

2 个答案:

答案 0 :(得分:3)

请注意,sample(x,y)表示样本在x+i*y处为真,其中i从零开始。也就是说sample(0, ...)的{​​{1}}成为现实。

由于time=0从1开始而且j大概超过1,所以k在模拟开始时应该变为真,这似乎并不出人意料。

我怀疑你想要的是:

sample(0, delta_t) and j<k

我真的没有看到class abc import Modelica.SIunits; parameter SIunits.Time delta_t=0.5; constant Real a[:]={4,2,6,-1,3,5,7,4,-3,-6}; Real x; Integer j(start=1); Integer k=size(a, 1); algorithm when {(sample(delta_t, delta_t) and j < k),j == 1} then x := a[pre(j)]; j := pre(j) + 1; end when; end abc; 条件的重点。一开始就是这样,这意味着它不会“变得”真实。由于j==1永远不会递减,我不明白为什么它一旦第一次递增就应该返回值j

请注意,我在1的右侧值附近添加了pre。如果这是在 j部分,我很确定需要equation。由于它是pre部分,因此主要是记录代码的意图。它还使代码可以从algorithm切换到equation部分。

答案 1 :(得分:1)

当然,由sample(0, delta_t) and j<k表达式触发的时间= 0的事件变为真。

但是在旧版本的Dymola中,离散变量的初始化存在一个错误。例如,即使你删除了dymola74中的sample(0.0, delta_t) and j<k,j也会在时间= 0时变为2。问题在于when子句的前置值,其中未初始化正确。据我所知,这至少在版本FD1 2013中得到了纠正。