【发布时间】:2017-04-24 09:22:53
【问题描述】:
我正在尝试使用 Modelica 解决我认为应该是简单的稳态组件分段问题,但我正在努力寻找解决方案。
我准备了一个示例案例,其中两个并联泵必须向系统提供目标总流量 (vTotal)。一个泵是变频泵,其流量 (v1) 与指令频率 (fPump1) 成正比,可在 0 和 fMax 之间变化。另一台泵为定速泵,运行时输出固定流量(v2IfRunning),不运行时输出零流量。
目标是求解正在运行的泵的数量和变速泵的频率。变速泵始终在运行,而定速泵仅在变速泵需要以大于 fMax 的频率运行时使用。我的示例代码如下:
model TwoPumpCode
// Pump 1
Modelica.SIunits.Frequency fPump1 "pump 1 frequency";
Modelica.SIunits.Frequency fMax = 50 "maximum frequency";
Modelica.SIunits.VolumeFlowRate v1;
// Pump 2
// Boolean runPump2(start=false) "true if pump 2 should run";
Modelica.SIunits.VolumeFlowRate v2IfRunning = 30;
Modelica.SIunits.VolumeFlowRate v2
"actual flow through pump 2";
Integer nPumpsRunning(start = 1) "number of pumps running";
// Total flow
Modelica.SIunits.VolumeFlowRate vTotal = 70;
equation
// Calculate the flow through pump 1 as a function of frequency
v1 = fPump1;
// Calculate the flow through pump 2 based upon running state
if fPump1 > fMax then
nPumpsRunning = 2;
v2 = v2IfRunning;
else
nPumpsRunning = 1;
v2 = 0;
end if;
// Calculate the total flow
vTotal = v1 + v2;
end TwoPumpCode;
同样,这是一个稳态模型。我尝试过使用 if、when、reinit、用于 pumpRunning 状态的布尔变量、用于运行泵数量的整数变量等,但我仍然无法解决稳态解决方案。
任何建议将不胜感激。
谢谢, 贾斯汀
【问题讨论】:
-
您可以将控制逻辑从泵模型中分离出来,例如在 MSL 模型中。然后你有一个泵模型,它有一个开/关开关和一个控制器。在控制器中,使用滞后来避免抖动。
-
感谢您的反馈。系统的其余部分是纯稳态的,所以如果可能的话,我宁愿避免控制器的动态。您能推荐一个 MSL 中的特定示例供我查看吗?
-
像
Modelica.Blocks.Logical.OnOffController这样的控制器不添加动态,因为没有存储/集成等,它使用if条件,就像您的代码一样。也许我不应该称它为控制器,最好称它为逻辑块!?您可能会在 github 上找到用法示例:git.io/v9IGP
标签: modelica dymola openmodelica