modelica - Modelica 编码标准/新的 OpenModelica 编译器前端
问题描述
看起来像是新的 OpenModelica 编译器前端的问题。我在 windows-7 64 位操作系统上使用 openmodelica 1.14 的官方版本。
package Test1_14
model M1
parameter Integer size = 2 "matrix size";
parameter Real A[size] = {1.0, 1.0};
Real B[size];
Real T = 1;
Real P = 2;
equation
B = A * (T/P);
end M1;
model M1_Extn
Real C[size];
Real D[size];
equation
for J in 1:size loop
C[J] = Func1(T);
D[J] = C[J] / P;
end for;
end M1_Extn;
function Func1
input Real a;
output Real b;
algorithm
b := a*a;
end Func1;
model M1_Combined
parameter Integer size = 2 "matrix size";
Real B[size];
Real T = 1;
Real P = 2;
extends M1_Extn;
equation
B = D;
end M1_Combined;
end Test1_14;
当我编译模型“<code>M1_Combined”时,代码生成失败,新的 OpenModelica 编译器前端。导出 FMU 也会失败并出现相同的错误。
我的代码是否符合 Modelica 编程标准?
如何在模型 M1_Extn 中声明变量 - size、T、P 并在 '<code>M1_Combined' 中仍然使用关键字 '<code>extends' ?
解决方案
这是因为根据 Modelica 规范,旧的前端没有正确处理“扩展”。新的前端正确地做到了。
需要明确的是,您不能在此类中定义变量,然后以任何其他方式在扩展中使用它,而不是通过修改(以及通过内部/外部,通过重新声明为元素)。下面是一个示例,您不能使用a
inside M1
。
package TestExtends
model M1
parameter Real b = a;
end M1;
model M2
parameter Real a = 1;
extends M1;
end M2;
end TestExtends;
要修复您的模型,使其符合 Modelica 标准,您可以执行以下操作:
package Test1_14
model M1
parameter Integer size = 2 "matrix size";
parameter Real A[size] = {1.0, 1.0};
Real B[size];
Real T = 1;
Real P = 2;
equation
B = A * (T/P);
end M1;
model M1_Extn
parameter Integer size = 2;
Real T = 1;
Real P = 2;
Real C[size];
Real D[size];
equation
for J in 1:size loop
C[J] = Func1(T);
D[J] = C[J] / P;
end for;
end M1_Extn;
function Func1
input Real a;
output Real b;
algorithm
b := a*a;
end Func1;
model M1_Combined
extends M1_Extn(size=2, T = 1, P = 2);
Real B[size]; // this one works as you can use things defined in extends.
equation
B = D;
end M1_Combined;
end Test1_14;
推荐阅读
- node.js - azure web 应用程序中的服务器发送事件延迟
- r - 由于 Latex 方程错误,无法将 RMarkdown 文档编织为 pdf
- here-api - 用于自动完成的 HERE API 6.2 与 7.0
- java - 如何在java中计算销售佣金
- python - 旋转相机小部件的正确方法是什么?
- osmnx - 由于包含“自然”和“土地使用”标签,osmnx 框被放大
- c++ - 如何找到并打印孪生素数?
- google-api - Google Insights API 在版本 5 中不返回 ruleImpact 分数。如何获得此分数?
- mysql-workbench - 当我尝试更改表以添加外键时,出现错误代码 1170
- python - 图像处理的多处理(已编辑)