在派生模型中设置枚举索引向量
Setting enumeration-indexed vector in derived model
我定义
type Enum = enumeration(A, B, C);
和
partial model PM
parameter Real[Enum] a;
...
end PM;
和
model M
extends PM(a = {1, 2, 3});
...
end M;
这给出了一个错误。我最好的猜测是 a = {1, 2, 3}
是罪魁祸首。这确实是非法的,如果是这样,我如何在 M
中设置 a
?
更新
经过进一步检查,我发现以上内容确实是合法的。让我全力以赴:
type Enum = enumeration(A, B, C);
connector Conn
Real[Enum] a;
flow Real[Enum] f;
end Conn;
model M1
Conn conn;
equation
conn.f = -conn.a;
end M1;
model M2
Conn conn;
initial equation
conn.a = {1, 2, 3};
equation
der(conn.a) = conn.f;
end M2;
model M3
M1 m1;
M2 m2;
equation
connect(m1.conn, m2.conn);
end M3;
构建失败。但是,如果我只是将连接器 class 中的每个 Enum
更改为 3
,那么它就可以工作了。
这个例子(据我所知)是合法的,并且一些工具已经处理它(假设没有其他隐藏的东西)。
由于您需要特定于工具的解决方法,因此您需要指定使用哪个工具。
合法性将在后续版本的 Modelica 规范中进一步阐明,因为它不清楚 - https://trac.modelica.org/Modelica/ticket/2212#comment:3
我定义
type Enum = enumeration(A, B, C);
和
partial model PM
parameter Real[Enum] a;
...
end PM;
和
model M
extends PM(a = {1, 2, 3});
...
end M;
这给出了一个错误。我最好的猜测是 a = {1, 2, 3}
是罪魁祸首。这确实是非法的,如果是这样,我如何在 M
中设置 a
?
更新
经过进一步检查,我发现以上内容确实是合法的。让我全力以赴:
type Enum = enumeration(A, B, C);
connector Conn
Real[Enum] a;
flow Real[Enum] f;
end Conn;
model M1
Conn conn;
equation
conn.f = -conn.a;
end M1;
model M2
Conn conn;
initial equation
conn.a = {1, 2, 3};
equation
der(conn.a) = conn.f;
end M2;
model M3
M1 m1;
M2 m2;
equation
connect(m1.conn, m2.conn);
end M3;
构建失败。但是,如果我只是将连接器 class 中的每个 Enum
更改为 3
,那么它就可以工作了。
这个例子(据我所知)是合法的,并且一些工具已经处理它(假设没有其他隐藏的东西)。
由于您需要特定于工具的解决方法,因此您需要指定使用哪个工具。
合法性将在后续版本的 Modelica 规范中进一步阐明,因为它不清楚 - https://trac.modelica.org/Modelica/ticket/2212#comment:3