Buildings.DHC.ETS.BaseClasses.Validation
Collection of validation models
Information
This package contains validation models for the classes in Buildings.DHC.ETS.BaseClasses.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Package Content
Name | Description |
---|---|
CollectorDistributor | Validation of collector distributor model |
Buildings.DHC.ETS.BaseClasses.Validation.CollectorDistributor
Validation of collector distributor model
Information
This model validates Buildings.DHC.ETS.BaseClasses.CollectorDistributor in a configuration where the model is used to connect
-
an active primary circuit which mass flow rate varies from 0 to 1.1 times
m_flow_nominal
and two active secondary circuits, one with a mass flow rate varying from 0.5 to 1 timesm_flow_nominal
, another with a constant mass flow rate, equal to 0.5 timesm_flow_nominal
: this case illustrates a typical supply-through loop and the supply temperature drop in one secondary circuit resulting from flow recirculation when the sum of the secondary mass flow rates exceeds the primary mass flow rate; -
an active primary circuit which mass flow rate varies from 0 to 1.1 times
m_flow_nominal
(similar to the previous case) and two passive secondary circuits, with no recirculation loop at the end of the distribution line, - a passive primary circuit and two active secondary circuits, both with a varying mass flow rate, with no recirculation loop at the end of the distribution line.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Parameters
Type | Name | Default | Description |
---|---|---|---|
MassFlowRate | m_flow_nominal | 1 | Nominal mass flow rate [kg/s] |
Modelica definition
model CollectorDistributor
"Validation of collector distributor model"
extends Modelica.Icons.Example;
package Medium=Buildings.Media.Water
"Source side medium";
parameter Modelica.Units.SI.MassFlowRate m_flow_nominal=1
"Nominal mass flow rate";
Fluid.Movers.FlowControlled_m_flow sou1(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+40,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true)
"Primary supply";
Fluid.Movers.FlowControlled_m_flow sou2_1(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+30,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true)
"Secondary pump";
Fluid.Sources.Boundary_pT bou1(
redeclare package Medium=Medium,
use_T_in=true,
nPorts=2)
"Boundary pressure";
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m1(
height=1.1,
duration=1000,
startTime=0)
"Primary flow";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T1(
k=40+273.15)
"Primary supply temperature";
Fluid.Sensors.TemperatureTwoPort senT2_1Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_1Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_1Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary return temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_1Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo1_1(
redeclare final package Medium=Medium)
"Primary mass flow rate (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_1(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol2_1(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret(
k=30+273.15)
"First secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat1(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_1(
height=0.5,
duration=1000,
offset=0.5,
startTime=2000)
"First secondary flow signal";
Fluid.Movers.FlowControlled_m_flow sou2_2(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+30,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true)
"Secondary pump";
Fluid.Sensors.TemperatureTwoPort senT2_2Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_2Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_2(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol2(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo1(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret(
k=35+273.15)
"Second secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat2(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_2(
k=0.5)
"Second secondary mass flow rate signal";
Buildings.DHC.ETS.BaseClasses.CollectorDistributor colDis(
redeclare final package Medium=Medium,
mCon_flow_nominal=fill(
m_flow_nominal,
2),
nCon=2)
"Collector/distributor";
Fluid.Movers.FlowControlled_m_flow sou2(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+40,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true,
dp_nominal=50E3)
"Primary supply";
Fluid.Sources.Boundary_pT bou2(
redeclare package Medium=Medium,
use_T_in=true,
nPorts=2)
"Boundary pressure";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2(
k=40+273.15)
"Primary supply temperature";
Fluid.Sensors.TemperatureTwoPort senT2_3Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_2Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_2Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary return temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_3Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo1_2(
redeclare final package Medium=Medium)
"Primary mass flow rate (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_3(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol2_2(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo2(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret1(
k=30+273.15)
"First secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat3(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_3(
height=0.5,
duration=1000,
offset=0.5,
startTime=2000)
"First secondary flow signal";
Fluid.Sensors.TemperatureTwoPort senT2_4Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_4Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_4(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol1(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo3(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret1(
k=35+273.15)
"Second secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat4(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_4(
k=0.5)
"Second secondary mass flow rate signal";
Buildings.DHC.ETS.BaseClasses.CollectorDistributor colDis1(
redeclare final package Medium=Medium,
mCon_flow_nominal=fill(
m_flow_nominal,
2),
nCon=2)
"Collector/distributor";
Fluid.Actuators.Valves.TwoWayEqualPercentage val2_1(
redeclare package Medium=Medium,
m_flow_nominal=m_flow_nominal,
dpValve_nominal=3000,
dpFixed_nominal=7000)
"Secondary control valve";
Fluid.Actuators.Valves.TwoWayEqualPercentage val2_2(
redeclare package Medium=Medium,
m_flow_nominal=m_flow_nominal,
dpValve_nominal=3000,
dpFixed_nominal=7000)
"Secondary control valve";
Fluid.Movers.FlowControlled_m_flow sou2_3(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+30,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true)
"Secondary pump";
Fluid.Sources.Boundary_pT bou3(
redeclare package Medium=Medium,
use_T_in=true,
nPorts=2)
"Boundary pressure";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T3(
k=40+273.15)
"Primary supply temperature";
Fluid.Sensors.TemperatureTwoPort senT2_5Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_3Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT1_3Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Primary return temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_5Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo1_3(
redeclare final package Medium=Medium)
"Primary mass flow rate (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_5(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol2_3(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo4(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_1Ret2(
k=30+273.15)
"First secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat5(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp m2_5(
height=0.5,
duration=1000,
offset=0.5,
startTime=2000)
"First secondary flow signal";
Fluid.Movers.FlowControlled_m_flow sou2_4(
redeclare package Medium=Medium,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
T_start=273.15+30,
m_flow_nominal=m_flow_nominal,
addPowerToMedium=false,
nominalValuesDefineDefaultPressureCurve=true)
"Secondary pump";
Fluid.Sensors.TemperatureTwoPort senT2_6Sup(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary supply temperature (measured)";
Fluid.Sensors.TemperatureTwoPort senT2_6Ret(
redeclare final package Medium=Medium,
m_flow_nominal=m_flow_nominal)
"Secondary return temperature (measured)";
Fluid.Sensors.MassFlowRate senMasFlo2_6(
redeclare final package Medium=Medium)
"Secondary mass flow rate (measured)";
Fluid.MixingVolumes.MixingVolume vol3(
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
T_start=273.15+30,
final prescribedHeatFlowRate=true,
redeclare final package Medium=Medium,
V=1,
final mSenFac=1,
final m_flow_nominal=m_flow_nominal,
nPorts=2)
"Volume for fluid stream";
Fluid.HeatExchangers.HeaterCooler_u coo5(
redeclare final package Medium=Medium,
dp_nominal=1,
m_flow_nominal=m_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
Q_flow_nominal=-1E5)
"Heat exchange with water stream";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant T2_2Ret2(
k=35+273.15)
"Second secondary return temperature";
Buildings.Controls.OBC.CDL.Reals.PID conTChiWat6(
k=0.1,
Ti=10,
yMax=1,
controllerType=Buildings.Controls.OBC.CDL.Types.SimpleController.PI,
yMin=0,
reverseActing=false)
"PI controller for chilled water supply";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant m2_6(
k=0.5)
"Second secondary mass flow rate signal";
Buildings.DHC.ETS.BaseClasses.CollectorDistributor colDis2(
redeclare final package Medium=Medium,
mCon_flow_nominal=fill(
m_flow_nominal,
2),
nCon=2)
"Collector/distributor";
equation
connect(m1.y,sou1.m_flow_in);
connect(senMasFlo1_1.port_b,senT1_1Sup.port_a);
connect(senT2_1Sup.port_b,senMasFlo2_1.port_a);
connect(sou1.port_b,senMasFlo1_1.port_a);
connect(coo.port_b,senT2_1Ret.port_a);
connect(T2_1Ret.y,conTChiWat1.u_s);
connect(conTChiWat1.y,coo.u);
connect(senT2_1Ret.T,conTChiWat1.u_m);
connect(vol2_1.ports[1],sou2_1.port_a);
connect(senMasFlo2_1.port_b,vol2_1.ports[2]);
connect(m2_1.y,sou2_1.m_flow_in);
connect(bou1.ports[1],sou1.port_a);
connect(T1.y,bou1.T_in);
connect(senT2_2Sup.port_b,senMasFlo2_2.port_a);
connect(coo1.port_b,senT2_2Ret.port_a);
connect(T2_2Ret.y,conTChiWat2.u_s);
connect(conTChiWat2.y,coo1.u);
connect(senT2_2Ret.T,conTChiWat2.u_m);
connect(vol2.ports[1],sou2_2.port_a);
connect(senMasFlo2_2.port_b,vol2.ports[2]);
connect(sou2_2.port_b,coo1.port_a);
connect(senT1_1Ret.port_b,bou1.ports[2]);
connect(sou2_1.port_b,coo.port_a);
connect(m2_2.y,sou2_2.m_flow_in);
connect(senT1_1Sup.port_b,colDis.port_aDisSup);
connect(senT1_1Ret.port_a,colDis.port_bDisRet);
connect(colDis.ports_bCon[1],senT2_1Sup.port_a);
connect(colDis.ports_bCon[2],senT2_2Sup.port_a);
connect(senT2_1Ret.port_b,colDis.ports_aCon[1]);
connect(senT2_2Ret.port_b,colDis.ports_aCon[2]);
connect(colDis.port_bDisSup,colDis.port_aDisRet);
connect(senMasFlo1_2.port_b,senT1_2Sup.port_a);
connect(senT2_3Sup.port_b,senMasFlo2_3.port_a);
connect(sou2.port_b,senMasFlo1_2.port_a);
connect(coo2.port_b,senT2_3Ret.port_a);
connect(T2_1Ret1.y,conTChiWat3.u_s);
connect(conTChiWat3.y,coo2.u);
connect(senT2_3Ret.T,conTChiWat3.u_m);
connect(senMasFlo2_3.port_b,vol2_2.ports[1]);
connect(bou2.ports[1],sou2.port_a);
connect(T2.y,bou2.T_in);
connect(senT2_4Sup.port_b,senMasFlo2_4.port_a);
connect(coo3.port_b,senT2_4Ret.port_a);
connect(T2_2Ret1.y,conTChiWat4.u_s);
connect(conTChiWat4.y,coo3.u);
connect(senT2_4Ret.T,conTChiWat4.u_m);
connect(senMasFlo2_4.port_b,vol1.ports[1]);
connect(senT1_2Ret.port_b,bou2.ports[2]);
connect(senT1_2Sup.port_b,colDis1.port_aDisSup);
connect(senT1_2Ret.port_a,colDis1.port_bDisRet);
connect(colDis1.ports_bCon[1],senT2_3Sup.port_a);
connect(colDis1.ports_bCon[2],senT2_4Sup.port_a);
connect(senT2_3Ret.port_b,colDis1.ports_aCon[1]);
connect(senT2_4Ret.port_b,colDis1.ports_aCon[2]);
connect(vol2_2.ports[2],val2_1.port_a);
connect(val2_1.port_b,coo2.port_a);
connect(m2_3.y,val2_1.y);
connect(vol1.ports[2],val2_2.port_a);
connect(val2_2.port_b,coo3.port_a);
connect(m2_4.y,val2_2.y);
connect(senMasFlo1_3.port_b,senT1_3Sup.port_a);
connect(senT2_5Sup.port_b,senMasFlo2_5.port_a);
connect(coo4.port_b,senT2_5Ret.port_a);
connect(T2_1Ret2.y,conTChiWat5.u_s);
connect(conTChiWat5.y,coo4.u);
connect(senT2_5Ret.T,conTChiWat5.u_m);
connect(vol2_3.ports[1],sou2_3.port_a);
connect(senMasFlo2_5.port_b,vol2_3.ports[2]);
connect(m2_5.y,sou2_3.m_flow_in);
connect(T3.y,bou3.T_in);
connect(senT2_6Sup.port_b,senMasFlo2_6.port_a);
connect(coo5.port_b,senT2_6Ret.port_a);
connect(T2_2Ret2.y,conTChiWat6.u_s);
connect(conTChiWat6.y,coo5.u);
connect(senT2_6Ret.T,conTChiWat6.u_m);
connect(vol3.ports[1],sou2_4.port_a);
connect(senMasFlo2_6.port_b,vol3.ports[2]);
connect(sou2_4.port_b,coo5.port_a);
connect(sou2_3.port_b,coo4.port_a);
connect(m2_6.y,sou2_4.m_flow_in);
connect(colDis2.ports_bCon[1],senT2_5Sup.port_a);
connect(colDis2.ports_bCon[2],senT2_6Sup.port_a);
connect(senT2_5Ret.port_b,colDis2.ports_aCon[1]);
connect(senT2_6Ret.port_b,colDis2.ports_aCon[2]);
connect(bou3.ports[1],senMasFlo1_3.port_a);
connect(senT1_3Sup.port_b,colDis2.port_aDisSup);
connect(senT1_3Ret.port_a,colDis2.port_bDisRet);
connect(m1.y,sou2.m_flow_in);
connect(bou3.ports[2],senT1_3Ret.port_b);
end CollectorDistributor;