遍历 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);
我正在使用 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);