Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.Validation

Collection of validation models

Information

This package contains validation models for the classes in Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.

Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).

Package Content

Name Description
Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.Validation.CollectorDistributor CollectorDistributor Validation of collector distributor model

Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.Validation.CollectorDistributor Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.Validation.CollectorDistributor

Validation of collector distributor model

Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.Validation.CollectorDistributor

Information

This model validates Buildings.Experimental.DHC.EnergyTransferStations.BaseClasses.CollectorDistributor in a configuration where the model is used to connect

  1. 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 times m_flow_nominal, another with a constant mass flow rate, equal to 0.5 times m_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;
  2. 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,
  3. 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

TypeNameDefaultDescription
MassFlowRatem_flow_nominal1Nominal 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.Experimental.DHC.EnergyTransferStations.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.Experimental.DHC.EnergyTransferStations.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.Experimental.DHC.EnergyTransferStations.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;