Modelica:层次模型中的方程平衡
我有下面这个简单的层次模型,它包含了一个反应室内的反应。反应模型简单地将质量速率设置为质量,并连接到包围它的腔室Modelica:层次模型中的方程平衡,modelica,systemmodeler,Modelica,Systemmodeler,我有下面这个简单的层次模型,它包含了一个反应室内的反应。反应模型简单地将质量速率设置为质量,并连接到包围它的腔室 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 re
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;
现在在我看来,总共有五个变量:mass
,reaction.conn.mass
,reaction.conn.massRate
,conn.massRate
,以及conn.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
因为质量有一个起始值,鲍勃是你叔叔。质量应随时间增加。但是我的模拟环境(Wolfram | One)说
有人能解释一下发生了什么事吗?请注意,如果我将反应器带出反应室(将反应中的符号颠倒,以给出conn.massRate=-conn.mass
),它将按预期工作。这在Modelica规范的“4.7平衡模型”部分中进行了描述
问题是腔室有一个顶级连接器conn
,还有一个与之相关的等式;e、 g.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;
(假设我的标志部分正确)。在这里,当你为连接器的流量变量添加一个方程时,你可以看到质量部分和反应本身都有相同数量的方程和变量。非常感谢,这很有意义。事实上,你的建议正是我所做的,将反应移出会议厅。
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;