Buildings.Air.Systems.SingleZone.VAV

VAV system model

Information

VAV system model that serves a single thermal zone.

Extends from Modelica.Icons.Package (Icon for standard packages).

Package Content

Name Description
Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer ChillerDXHeatingEconomizer HVAC system model with a dry cooling coil, air-cooled chiller, electric heating coil, variable speed fan, and mixing box with economizer control.
Buildings.Air.Systems.SingleZone.VAV.Examples Examples Collection of models that illustrate model use and test models
Buildings.Air.Systems.SingleZone.VAV.BaseClasses BaseClasses Package with base classes for Buildings.Air.Systems.SingleZone.VAV

Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer

HVAC system model with a dry cooling coil, air-cooled chiller, electric heating coil, variable speed fan, and mixing box with economizer control.

Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer

Information

This is a conventional single zone VAV HVAC system model. The system contains a variable speed supply fan, electric heating coil, water-based cooling coil, economizer, and air-cooled chiller. The control of the system is that of conventional VAV heating and cooling. During cooling, the supply air temperature is held constant while the supply air flow is modulated from maximum to minimum according to zone load. This is done by modulating the fan speed. During heating, the supply air flow is held at a constant minimum while the heating coil is modulated accoding to zone load. The mass flow of chilled water through the cooling coil is controlled by a three-way valve to maintain the supply air temperature setpoint during cooling. The mixing box maintains the minimum outside airflow fraction unless conditions for economizer are met, in which case the economizer controller adjusts the outside airflow fraction to meet a mixed air temperature setpoint. The economizer is enabled if the outside air drybulb temperature is lower than the return air temperature and the system is not in heating mode.

There are a number of assumptions in the model. Pressure drops through the system are collected into a single component. The mass flow of return air is equal to the mass flow of supply air. The mass flow of outside air and relief air in the mixing box is ideally controlled so that the supply air is composed of the specified outside airflow fraction, rather than having feedback control of damper positions. The cooling coil is a dry coil model.

Parameters

TypeNameDefaultDescription
replaceable package MediumABuildings.Media.AirMedium model for air
replaceable package MediumWBuildings.Media.WaterMedium model for water
DimensionlessRatioCOP_nominal5.5Nominal COP of the chiller [1]
TemperatureTSupChi_nominal Design value for chiller leaving water temperature [K]
Air design
MassFlowRatemAir_flow_nominal Design airflow rate of system [kg/s]
PressureDifferencedp_nominal500Design pressure drop of flow leg with fan [Pa]
Heating design
PowerQHea_flow_nominal Design capacity of heating coil [W]
RealetaHea_nominal Design heating efficiency of the heating coil [1]
Cooling design
PowerQCoo_flow_nominal Design capacity of cooling coil [W]

Connectors

TypeNameDescription
replaceable package MediumAMedium model for air
replaceable package MediumWMedium model for water
input BooleanInputchiOnOn signal for chiller plant
input RealInputuFanFan control signal [1]
input RealInputuHeaControl input for heater [1]
input RealInputuCooValControl signal for cooling valve [1]
input RealInputTSetChiSet point for leaving chilled water temperature [K]
input RealInputuEcoControl signal for economizer
FluidPort_asupplyAirSupply air
FluidPort_breturnAirReturn air
output RealOutputPFanElectrical power consumed by the supply fan [W]
output RealOutputQHea_flowElectrical power consumed by the heating equipment [W]
output RealOutputPCooElectrical power consumed by the cooling equipment [W]
output RealOutputPPumElectrical power consumed by the pumps [W]
output RealOutputTMixMixed air temperature [K]
output RealOutputTSupSupply air temperature after coils [K]
BusweaBusWeather bus
output RealOutputTRetReturn air temperature [K]
output RealOutputy_actualActual supply fan speed

Modelica definition

model ChillerDXHeatingEconomizer "HVAC system model with a dry cooling coil, air-cooled chiller, electric heating coil, variable speed fan, and mixing box with economizer control." replaceable package MediumA = Buildings.Media.Air "Medium model for air"; replaceable package MediumW = Buildings.Media.Water "Medium model for water"; parameter Modelica.Units.SI.DimensionlessRatio COP_nominal=5.5 "Nominal COP of the chiller"; parameter Modelica.Units.SI.Temperature TSupChi_nominal "Design value for chiller leaving water temperature"; parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal "Design airflow rate of system"; parameter Modelica.Units.SI.Power QHea_flow_nominal(min=0) "Design capacity of heating coil"; parameter Real etaHea_nominal(min=0, max=1, unit="1") "Design heating efficiency of the heating coil"; parameter Modelica.Units.SI.Power QCoo_flow_nominal(max=0) "Design capacity of cooling coil"; parameter Modelica.Units.SI.PressureDifference dp_nominal(displayUnit="Pa")= 500 "Design pressure drop of flow leg with fan"; final parameter Modelica.Units.SI.MassFlowRate mChiEva_flow_nominal=- QCoo_flow_nominal/Buildings.Utilities.Psychrometrics.Constants.cpWatLiq/4 "Design chilled water supply flow"; final parameter Modelica.Units.SI.MassFlowRate mChiCon_flow_nominal=- QCoo_flow_nominal*(1 + 1/COP_nominal)/Buildings.Utilities.Psychrometrics.Constants.cpAir /10 "Design condenser air flow"; Modelica.Blocks.Interfaces.BooleanInput chiOn "On signal for chiller plant"; Modelica.Blocks.Interfaces.RealInput uFan( final unit="1") "Fan control signal"; Modelica.Blocks.Interfaces.RealInput uHea( final unit="1") "Control input for heater"; Modelica.Blocks.Interfaces.RealInput uCooVal(final unit="1") "Control signal for cooling valve"; Modelica.Blocks.Interfaces.RealInput TSetChi( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Set point for leaving chilled water temperature"; Modelica.Blocks.Interfaces.RealInput uEco "Control signal for economizer"; Modelica.Fluid.Interfaces.FluidPort_a supplyAir( redeclare final package Medium = MediumA) "Supply air"; Modelica.Fluid.Interfaces.FluidPort_b returnAir( redeclare final package Medium = MediumA) "Return air"; Modelica.Blocks.Interfaces.RealOutput PFan(final unit="W") "Electrical power consumed by the supply fan"; Modelica.Blocks.Interfaces.RealOutput QHea_flow(final unit="W") "Electrical power consumed by the heating equipment"; Modelica.Blocks.Interfaces.RealOutput PCoo(final unit="W") "Electrical power consumed by the cooling equipment"; Modelica.Blocks.Interfaces.RealOutput PPum(final unit="W") "Electrical power consumed by the pumps"; Modelica.Blocks.Interfaces.RealOutput TMix( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Mixed air temperature"; Modelica.Blocks.Interfaces.RealOutput TSup( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Supply air temperature after coils"; Buildings.BoundaryConditions.WeatherData.Bus weaBus "Weather bus"; Buildings.Fluid.Sensors.TemperatureTwoPort senTSup( final m_flow_nominal=mAir_flow_nominal, final allowFlowReversal=false, final tau=0, redeclare package Medium = MediumA) "Supply air temperature sensor"; Buildings.Fluid.HeatExchangers.HeaterCooler_u heaCoi( final m_flow_nominal=mAir_flow_nominal, final Q_flow_nominal=QHea_flow_nominal, final u(start=0), final dp_nominal=0, final allowFlowReversal=false, final tau=90, redeclare package Medium = MediumA, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, final show_T=true) "Air heating coil"; Buildings.Fluid.Movers.FlowControlled_m_flow fanSup( final m_flow_nominal=mAir_flow_nominal, final nominalValuesDefineDefaultPressureCurve=true, final dp_nominal=875, final per( final etaHydMet=Buildings.Fluid.Movers.BaseClasses.Types.HydraulicEfficiencyMethod.NotProvided, final etaMotMet=Buildings.Fluid.Movers.BaseClasses.Types.MotorEfficiencyMethod.NotProvided), final energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, final allowFlowReversal=false, final use_inputFilter=false, redeclare package Medium = MediumA) "Supply fan"; Buildings.Fluid.FixedResistances.PressureDrop totalRes( final m_flow_nominal=mAir_flow_nominal, final dp_nominal=dp_nominal, final allowFlowReversal=false, redeclare package Medium = MediumA) "Total resistance"; Modelica.Blocks.Math.Gain eff(k=1/etaHea_nominal) "Heating efficiency"; Buildings.Fluid.Sources.Outside out( final C=fill(0.0004, 1), final nPorts=3, redeclare package Medium = MediumA) "Boundary conditions for outside air"; Buildings.Fluid.Sensors.TemperatureTwoPort senTMixAir( final m_flow_nominal=mAir_flow_nominal, final allowFlowReversal=false, final tau=0, redeclare package Medium = MediumA) "Mixed air temperature sensor"; Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU cooCoi( redeclare package Medium1 = MediumW, redeclare package Medium2 = MediumA, final dp1_nominal=0, final dp2_nominal=0, final m2_flow_nominal=mAir_flow_nominal, final Q_flow_nominal=QCoo_flow_nominal, final configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, final allowFlowReversal1=false, final allowFlowReversal2=false, final m1_flow_nominal=mChiEva_flow_nominal, final show_T=true, final T_a1_nominal=279.15, final T_a2_nominal=298.15) "Cooling coil"; Buildings.Fluid.Sources.MassFlowSource_T souChiWat( redeclare package Medium = MediumA, final nPorts=1, final use_T_in=true, final m_flow=mChiCon_flow_nominal) "Mass flow source for chiller"; Buildings.Fluid.Movers.FlowControlled_m_flow pumChiWat( final use_inputFilter=false, final allowFlowReversal=false, redeclare package Medium = MediumW, final energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, final m_flow_nominal=mChiEva_flow_nominal, final addPowerToMedium=false, final per( efficiency(eta={1}), motorEfficiency(eta={0.9}), motorCooledByFluid=false), final dp_nominal=12000, final inputType=Buildings.Fluid.Types.InputType.Continuous, final nominalValuesDefineDefaultPressureCurve=true) "Pump for chilled water loop"; Buildings.Fluid.Chillers.ElectricEIR chi( final allowFlowReversal1=false, final allowFlowReversal2=false, redeclare package Medium1 = MediumA, redeclare package Medium2 = MediumW, final m2_flow_nominal=mChiEva_flow_nominal, final dp1_nominal=0, final m1_flow_nominal=mChiCon_flow_nominal, final per( capFunT={1.0433811,0.0407077,0.0004506,-0.0041514,-8.86e-5,-0.0003467}, PLRMax=1.2, EIRFunT={0.5961915,-0.0099496,0.0007888,0.0004506,0.0004875,-0.0007623}, EIRFunPLR={1.6853121,-0.9993443,0.3140322}, COP_nominal=COP_nominal, QEva_flow_nominal=QCoo_flow_nominal, mEva_flow_nominal=mChiEva_flow_nominal, mCon_flow_nominal=mChiCon_flow_nominal, TEvaLvg_nominal=TSupChi_nominal, PLRMinUnl=0.1, PLRMin=0.1, etaMotor=1, TEvaLvgMin=274.15, TEvaLvgMax=293.15, TConEnt_nominal=302.55, TConEntMin=274.15, TConEntMax=323.15), final dp2_nominal=12E3, final energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) "Air cooled chiller"; Buildings.Fluid.Sources.Boundary_pT bouPreChi( redeclare package Medium = MediumW, nPorts=1) "Pressure boundary condition for chilled water loop"; Modelica.Blocks.Math.Gain gaiFan(k=mAir_flow_nominal) "Gain for fan mass flow rate"; IdealValve ideVal( redeclare package Medium = MediumW, final m_flow_nominal = mChiEva_flow_nominal) "Ideal valve"; Modelica.Blocks.Math.BooleanToReal booToInt( final realTrue=mChiEva_flow_nominal) "Boolean to integer conversion"; IdealValve ideEco( redeclare package Medium = MediumA, final m_flow_nominal=mAir_flow_nominal) "Ideal economizer"; Fluid.Sensors.TemperatureTwoPort senTRetAir( final m_flow_nominal=mAir_flow_nominal, final allowFlowReversal=false, final tau=0, redeclare package Medium = MediumA) "Return air temperature sensor"; Modelica.Blocks.Interfaces.RealOutput TRet( final unit="K", displayUnit="degC", final quantity="ThermodynamicTemperature") "Return air temperature"; Fluid.Sensors.TraceSubstancesTwoPort senTraSub( redeclare package Medium=MediumA, final m_flow_nominal=mAir_flow_nominal, final tau=0) "Sensor for trace substance"; Modelica.Blocks.Interfaces.RealOutput y_actual "Actual supply fan speed"; protected model IdealValve extends Modelica.Blocks.Icons.Block; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium in the component"; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal "Design chilled water supply flow"; Modelica.Fluid.Interfaces.FluidPort_a port_1( redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_b port_2( redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_a port_3( redeclare package Medium = Medium); Modelica.Blocks.Interfaces.RealInput y(min=0, max=1); Fluid.Sensors.MassFlowRate senMasFlo( redeclare package Medium = Medium, allowFlowReversal=false) "Mass flow rate sensor"; Fluid.Movers.BaseClasses.IdealSource preMasFlo( redeclare package Medium = Medium, control_m_flow=true, control_dp=false, m_flow_small=m_flow_nominal*1E-5, show_V_flow=false, allowFlowReversal=false) "Prescribed mass flow rate for the bypass"; Modelica.Blocks.Math.Product pro "Product for mass flow rate computation"; Modelica.Blocks.Sources.Constant one(final k=1) "Outputs one"; Modelica.Blocks.Math.Feedback feedback; equation connect(senMasFlo.m_flow, pro.u2); connect(feedback.u1, one.y); connect(y, feedback.u2); connect(preMasFlo.port_a, port_3); connect(feedback.y, pro.u1); connect(pro.y, preMasFlo.m_flow_in); connect(port_1, senMasFlo.port_a); connect(senMasFlo.port_b, port_2); connect(preMasFlo.port_b, senMasFlo.port_a); end IdealValve; equation connect(fanSup.port_b, totalRes.port_a); connect(fanSup.P, PFan); connect(eff.y, QHea_flow); connect(weaBus, out.weaBus); connect(senTMixAir.port_b, fanSup.port_a); connect(heaCoi.Q_flow, eff.u); connect(heaCoi.port_b, cooCoi.port_a2); connect(cooCoi.port_b2, senTSup.port_a); connect(cooCoi.port_b1, ideVal.port_1); connect(chi.port_b2, pumChiWat.port_a); connect(souChiWat.ports[1], chi.port_a1); connect(chi.port_b1, out.ports[1]); connect(weaBus.TDryBul, souChiWat.T_in); connect(pumChiWat.P, PPum); connect(chi.P, PCoo); connect(ideVal.port_2, chi.port_a2); connect(cooCoi.port_a1, pumChiWat.port_b); connect(cooCoi.port_a1, ideVal.port_3); connect(bouPreChi.ports[1], chi.port_a2); connect(totalRes.port_b, heaCoi.port_a); connect(senTSup.port_b, supplyAir); connect(gaiFan.y, fanSup.m_flow_in); connect(booToInt.y, pumChiWat.m_flow_in); connect(booToInt.u, chiOn); connect(chiOn, chi.on); connect(gaiFan.u, uFan); connect(heaCoi.u, uHea); connect(ideVal.y, uCooVal); connect(chi.TSet, TSetChi); connect(senTMixAir.T, TMix); connect(senTSup.T, TSup); connect(out.ports[2], ideEco.port_1); connect(ideEco.port_2, senTMixAir.port_a); connect(uEco, ideEco.y); connect(ideEco.port_3, senTRetAir.port_b); connect(senTRetAir.port_b, out.ports[3]); connect(TRet, senTRetAir.T); connect(senTRetAir.port_a, senTraSub.port_b); connect(senTraSub.port_a, returnAir); connect(fanSup.y_actual, y_actual); end ChillerDXHeatingEconomizer;

Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer.IdealValve Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer.IdealValve


Buildings.Air.Systems.SingleZone.VAV.ChillerDXHeatingEconomizer.IdealValve

Information

Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).

Parameters

TypeNameDefaultDescription
replaceable package MediumModelica.Media.Interfaces.Pa...Medium in the component
MassFlowRatem_flow_nominal Design chilled water supply flow [kg/s]

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
FluidPort_aport_1 
FluidPort_bport_2 
FluidPort_aport_3 
input RealInputy 

Modelica definition

model IdealValve extends Modelica.Blocks.Icons.Block; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium in the component"; parameter Modelica.Units.SI.MassFlowRate m_flow_nominal "Design chilled water supply flow"; Modelica.Fluid.Interfaces.FluidPort_a port_1( redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_b port_2( redeclare package Medium = Medium); Modelica.Fluid.Interfaces.FluidPort_a port_3( redeclare package Medium = Medium); Modelica.Blocks.Interfaces.RealInput y(min=0, max=1); Fluid.Sensors.MassFlowRate senMasFlo( redeclare package Medium = Medium, allowFlowReversal=false) "Mass flow rate sensor"; Fluid.Movers.BaseClasses.IdealSource preMasFlo( redeclare package Medium = Medium, control_m_flow=true, control_dp=false, m_flow_small=m_flow_nominal*1E-5, show_V_flow=false, allowFlowReversal=false) "Prescribed mass flow rate for the bypass"; Modelica.Blocks.Math.Product pro "Product for mass flow rate computation"; Modelica.Blocks.Sources.Constant one(final k=1) "Outputs one"; Modelica.Blocks.Math.Feedback feedback; equation connect(senMasFlo.m_flow, pro.u2); connect(feedback.u1, one.y); connect(y, feedback.u2); connect(preMasFlo.port_a, port_3); connect(feedback.y, pro.u1); connect(pro.y, preMasFlo.m_flow_in); connect(port_1, senMasFlo.port_a); connect(senMasFlo.port_b, port_2); connect(preMasFlo.port_b, senMasFlo.port_a); end IdealValve;