我正在嘗試解決我認爲應該使用Modelica的簡單穩態組件分段問題,但我正在努力尋求解決方案。在穩態Modelica模型中解決組件暫存問題
我準備了一個帶有兩臺並聯泵的實例,它必須向系統提供目標總流量(vTotal)。一臺泵是變頻泵,並提供與指令頻率(fPump1)成比例的流量(v1),該值可以在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模型中。然後你有一個有開/關開關的泵型號和一個控制器。在控制器中,使用滯後來避免抖動。 – matth
感謝您的反饋數據。系統的其餘部分是純粹的穩態,所以如果可能的話,我寧願避免控制器的動態。你能推薦一個MSL的特定例子嗎? –
像「Modelica.Blocks.Logical.OnOffController」這樣的控制器不會增加動態,因爲沒有存儲/集成等,它就像你的代碼一樣使用'if'條件。也許我不應該稱之爲控制器,更好地稱它爲邏輯塊!?你可能會在github上找到使用示例:https://git.io/v9IGP – matth