Modelica编码标准/新OpenModelica编译器前端
新OpenModelica编译器前端似乎存在问题。我正在windows-7 64位操作系统上使用openmodelica 1.14的官方发行版Modelica编码标准/新OpenModelica编译器前端,modelica,openmodelica,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
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;
当我编译模型“M1\u composed
”时,新OpenModelica编译器前端的代码生成失败。导出FMU也会失败,并出现相同的错误
我的代码是否符合Modelica编程标准
如何声明变量?在模型M1_Extn中的size、T、p,在“
M1_Combined
”中仍然使用关键字“extends
”?这是因为根据Modelica规范,旧前端没有正确处理“extends”。新的前端可以正确地执行此操作
需要明确的是,您不能在这个类中定义一个变量,然后通过修改(以及通过内部/外部、通过重新声明为元素)以外的任何方式在扩展中使用它。下面是一个示例,您不能在M1
中使用a
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;