循环通过modelica阵列失败

时间:2015-01-13 21:31:18

标签: modelica

我正在使用openmodelica,我试图遍历一个数组,以便找到最大值。我能够将代码减少到一个非常简单的测试用例,但仍会出现错误。这是我做错了什么,或者这是openmodelica中的一个错误?这是一个非常简单的案例,它确实给出了错误:

package TestLoop
  model ItemA
    Real p;
  end ItemA;

  model ItemB
    ItemA a[n];
    parameter Integer n = 5;
    Real p;
  equation
    for i in 1:n loop
      a[i].p = time;
    end for;
  algorithm
    for i in 1:n loop
      p := a[i].p;
    end for;
  end ItemB;
end TestLoop;

问题出在我的算法部分。这是我得到的错误:

TestLoop.ItemB.c:155:13: warning: implicit declaration of function '$Pa$lB' is invalid in C99 [-Wimplicit-function-declaration]
      $Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
            ^
TestLoop.ItemB.c:155:20: error: unexpected type name 'modelica_integer': expected expression
      $Pp = $Pa$lB(modelica_integer)$Pi$rB$Pp;
                   ^
1 warning and 1 error generated.

对于为什么会这样,或者我如何解决它的任何建议?如果我用固定值替换赋值,p:= a [1] .p;,代码确实运行(虽然这对我没用)。我最终想在算法部分做的是找到a [n] .p的最大值,其中我有一个方程式部分,可以对项目数组进行有用的计算。

1 个答案:

答案 0 :(得分:2)

是的,代码生成是OpenModelica的错误(它不像未知的数组索引)。您的问题很容易在一行中解决(但下列之一):

p = max(r for r in a.p);
p = max(a.p);