gpt4 book ai didi

modelica - 如何在Modelica中实现嵌套的if语句?

转载 作者:行者123 更新时间:2023-12-03 09:05:49 26 4
gpt4 key购买 nike

我正在尝试实现 HVAC 系统的故障包含模型。故障在用户定义的时间开始,在本例中 faultTime = 1000。然而,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;

当我模拟时,它运行没有错误,但它直接进入 faultMode == 1 下的方程,而不模拟前 1000 秒的无故障状态。

最佳答案

我通过引入一些变量并更改一些参数来修改您的模型,使其直接运行。结果是:

model FCU

Modelica.Blocks.Continuous.LimPID PI(k = 0.1, Ti = 1, yMax = 1, yMin = 1e-4);

parameter Real faultTime = 1000;
parameter Integer faultMode = 1;

Real val;
Real fs;

equation
PI.u_s = 21; // set-point for zone temperature
PI.u_m = 20.9999; // no feedback as no system available

if time<faultTime then
PI.y = val;
PI.y = fs;
else
if faultMode == 0 then
PI.y = val;
PI.y = fs;
elseif faultMode == 1 then
PI.y = val;
fs = 1e-4;
else
assert(false,"Unknown faultMode");
end if;
end if;
annotation (experiment(StopTime=2000), uses(Modelica(version="3.2.2")));
end FCU;

下面的结果(在 Dymola 中模拟)似乎是我所期望的。 Result

希望这有帮助...

关于modelica - 如何在Modelica中实现嵌套的if语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47517033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com