0
私はHVACシステムのフォールト・インクルーシブ・モデルを実装しようとしています。フォールトは、ユーザ定義時刻(この場合はfaultTime = 1000
)で開始されます。しかし、if文の最初の部分はまったく実装されていません。質問Modelicaにネストされたif文を実装する方法は?
fcuModel FCU;
Modelica.Blocks.Continuous.LimPID PI(k = 300, Ti = 1, yMax = 1, yMin = 1e-4);
parameter Real faultTime = 1000;
// fault modes: 0-normal, 1-fan failed, 2-valve stuck shut...
parameter Integer faultMode = 1;
equation
connect(PI.u_m,FCU.Ts_zon); // connects zone temperature to PID measurement
PI.u_s = 21; // set-point for zone temperature
if time<faultTime then
PI.y = FCU.val;
PI.y = FCU.fs;
else
if faultMode == 0 then
PI.y = FCU.val;
PI.y = FCU.fs;
elseif faultMode == 1 then
PI.y = FCU.val;
FCU.fs = 1e-4;
end if;
end if;
私はシミュレーションに関連するコードのスニペットを以下に示し、それはエラーなしで実行されますが、それは、直接最初の1000のために、障害のない状態をシミュレートすることなく、faultMode == 1
下の式に行きます秒。
が見えるのに役立ちます。 – tbeu
faultModeは整数パラメータなので、else-caseは必要ありませんが、 "faultMode == 1 then then ... else"がきれいになると私は同意します。 –
Modelica 3.4仕様書のセクション8.3.4:方程式セクションのIf方程式は、排他的にパラメータ式を切り替え条件として持たないが、各分岐で同じ数の方程式を持ちます。 – matth