如何在Modelica中实现嵌套的if语句?
我正在尝试实现HVAC系统的故障包容模型。故障在用户定义的时间开始,在这种情况下如何在Modelica中实现嵌套的if语句?,modelica,openmodelica,jmodelica,Modelica,Openmodelica,Jmodelica,我正在尝试实现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 faile
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;
fcuModel-FCU;
Modelica.Blocks.Continuous.limbid PI(k=300,Ti=1,yMax=1,yMin=1e-4);
参数Real faultTime=1000;
//故障模式:0-正常,1-风扇故障,2-阀门卡在关闭位置。。。
参数整数faultMode=1;
方程式
连接(PI.u_m,FCU.Ts_zon);//将区域温度连接到PID测量
PI.u_s=21;//区域温度设定点
如果时间我修改了你的模型,通过引入一些变量和改变一些参数使它直接工作。结果是:
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;
型号FCU
Modelica.Blocks.Continuous.limbid PI(k=0.1,Ti=1,yMax=1,yMin=1e-4);
参数Real faultTime=1000;
参数整数faultMode=1;
真实值;
真实财政司司长;
方程式
PI.u_s=21;//区域温度设定点
PI.u_m=20.9999;//没有反馈,因为没有可用的系统
如果timeLooks像它错过了else的情况。因为faultMode是一个整数参数,所以不需要else的情况,但是我同意“如果faultMode==1那么…else”会更干净。根据Modelica 3.4规范,第8.3.4节:如果方程式部分中的方程式没有专用参数表达式作为切换条件,则每个分支中的方程式数量应相同。