Modelica:分层模型中的方程平衡



我有以下简单的分层模型,包括腔室内的反应。反应模型只需将质量速率设置为质量,然后连接到包围它的腔室。

connector Conn
Real mass;
flow Real massRate;
end Conn;
model Reaction
Conn conn;
equation
conn.massRate = conn.mass;
end Reaction;
model Chamber
Real mass(start = 1);
Reaction reaction;
Conn conn;
equation
conn.mass = mass;
der(mass) = conn.massRate;
connect(reaction.conn, conn);
end Chamber;

现在在我看来,总共有五个变量:massreaction.conn.massreaction.conn.massRateconn.massconn.massRate。有五个方程:方程部分有两个,即。

conn.mass = mass
der(mass) = conn.massRate

一个来自反应

reaction.conn.massRate = reaction.conn.mass

连接方程中的两个:

reaction.conn.mass = conn.mass
reaction.conn.massRate = conn.massRate

所以我们在五个变量中有五个方程。求解器逻辑可以简单地将这些方程组合在一起,如下所示

der(mass) = conn.massRate = reaction.conn.massRate = reaction.conn.mass
= conn.mass = mass

由于质量被赋予了起始值,鲍勃就是你的叔叔。mass应该随着时间的推移而增加。但是我的模拟环境(Wolfram|一(说

Error: Simulation model is not globally balanced, having 1 variable and 2 equations.

有人可以解释一下发生了什么吗?请注意,如果我将反应器带到腔室外(反转反应中的符号以给出conn.massRate = -conn.mass(,它会按预期工作。

这在Modelica规范的"4.7平衡模型"一节中有描述。

问题在于腔室有一个顶级连接器conn并且还有一个与此相关的方程; 例如conn.massRate=0;对应于分层模型中默认连接的连接器。它不仅是一个等式太多 - 它也是错误的。

此外,如果您使用腔室作为子模型,并希望添加进出腔室的外部流,您可以连接到conn- 但方程没有意义。

当您将反应器移出腔室时,您可以避免悬垂的连接器。 另一种可能更清楚的替代方案是有两个模型,例如:

model Chamber
Reaction reaction;
MassPart source;
equation 
connect(reaction.conn, source.conn);
end Chamber;
model MassPart
Conn conn;
Real mass(start=1);
equation 
conn.mass = mass;
der(mass) = -conn.massRate;
end MassPart;

(假设我把符号部分弄对了(。在这里,您可以看到,当您为连接器的流动变量添加一个方程时,MassPart 和 Reaction 本身都具有相同数量的方程和变量。

最新更新