遍历 modelica 数组失败

Loop through modelica array fails

我正在使用 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 的最大值,其中我有一个方程部分,可以对项目数组进行有用的计算。

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

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