Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints

Output setpoints for terminal unit control

Information

This package contains sequences generating setpoints for terminal units.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow ActiveAirFlow Output the active airflow setpoint for VAV reheat terminal unit
Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow

Output the active airflow setpoint for VAV reheat terminal unit

Buildings.Controls.OBC.ASHRAE.G36_PR1.TerminalUnits.Reheat.SetPoints.ActiveAirFlow

Information

This atomic sequence sets the active maximum and minimum setpoints VActCooMax_flow, VActCooMin_flow, VActMin_flow, VActHeaMin_flow, VActHeaMax_flow for VAV reheat terminal unit according to ASHRAE Guideline 36 (G36), PART5.E.3-5.

1. Information provided by designer

According to G36 PART 3.1.B.2, following VAV box design information should be provided:

2. Occupied minimum airflow VOccDisMin_flow

The VOccDisMin_flow shall be equal to zone minimum airflow setpoint VDisSetMin_flow except as follows:

3. Active maximum and minimum setpoints

The setpoints shall vary depending on the mode of the zone group.

Setpoint OccupiedCool-down SetupWarmupSetbackUnoccupied
Cooling maximum (VActCooMax_flow)VDisCooSetMax_flow VDisCooSetMax_flowVDisCooSetMax_flow 000
Cooling minimum (VActCooMin_flow)VOccDisMin_flow 00000
Minimum (VActMin_flow)VOccDisMin_flow0 0000
Heating minimum (VActHeaMin_flow)VOccDisMin_flow 00VDisHeaSetMax_flowVDisHeaSetMax_flow 0
Heating maximum (VActHeaMax_flow)max(VDisHeaSetMax_flow,VOccDisMin_flow) VDisHeaSetMax_flow0VDisCooSetMax_flowVDisCooSetMax_flow 0

Parameters

TypeNameDefaultDescription
Zone sensors
Booleanhave_occSen Set to true if the zone has occupancy sensor
Booleanhave_winSen Set to true if the zone has window status sensor
Booleanhave_CO2Sen Set to true if the zone has CO2 sensor
Nominal condition
VolumeFlowRateVDisCooSetMax_flow Zone maximum cooling airflow setpoint [m3/s]
VolumeFlowRateVDisSetMin_flow Zone minimum airflow setpoint [m3/s]
VolumeFlowRateVDisHeaSetMax_flow Zone maximum heating airflow setpoint [m3/s]
VolumeFlowRateVDisConMin_flow VAV box controllable minimum [m3/s]
AreaAFlo Area of the zone [m2]
RealVOutPerAre_flow3e-4Outdoor air rate per unit area [m3/(s.m2)]
VolumeFlowRateVOutPerPer_flow2.5e-3Outdoor air rate per person [m3/s]
RealCO2Set894CO2 setpoint in ppm

Connectors

TypeNameDescription
input RealInputnOccNumber of occupants [1]
input RealInputppmCO2Detected CO2 conventration
input BooleanInputuWinWindow status, true if open, false if closed
input IntegerInputuOpeModZone operation mode
output RealOutputVOccDisMin_flowOccupied minimum airflow [m3/s]
output RealOutputVActCooMax_flowActive cooling maximum [m3/s]
output RealOutputVActCooMin_flowActive cooling minimum [m3/s]
output RealOutputVActMin_flowActive minimum [m3/s]
output RealOutputVActHeaMin_flowActive heating minimum [m3/s]
output RealOutputVActHeaMax_flowActive heating maximum [m3/s]

Modelica definition

block ActiveAirFlow "Output the active airflow setpoint for VAV reheat terminal unit" parameter Boolean have_occSen "Set to true if the zone has occupancy sensor"; parameter Boolean have_winSen "Set to true if the zone has window status sensor"; parameter Boolean have_CO2Sen "Set to true if the zone has CO2 sensor"; parameter Modelica.SIunits.VolumeFlowRate VDisCooSetMax_flow "Zone maximum cooling airflow setpoint"; parameter Modelica.SIunits.VolumeFlowRate VDisSetMin_flow "Zone minimum airflow setpoint"; parameter Modelica.SIunits.VolumeFlowRate VDisHeaSetMax_flow "Zone maximum heating airflow setpoint"; parameter Modelica.SIunits.VolumeFlowRate VDisConMin_flow "VAV box controllable minimum"; parameter Modelica.SIunits.Area AFlo "Area of the zone"; parameter Real VOutPerAre_flow(final unit = "m3/(s.m2)")=3e-4 "Outdoor air rate per unit area"; parameter Modelica.SIunits.VolumeFlowRate VOutPerPer_flow=2.5e-3 "Outdoor air rate per person"; parameter Real CO2Set = 894 "CO2 setpoint in ppm"; Buildings.Controls.OBC.CDL.Interfaces.RealInput nOcc(final unit="1") if have_occSen "Number of occupants"; Buildings.Controls.OBC.CDL.Interfaces.RealInput ppmCO2 if have_CO2Sen "Detected CO2 conventration"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWin if have_winSen "Window status, true if open, false if closed"; Buildings.Controls.OBC.CDL.Interfaces.IntegerInput uOpeMod "Zone operation mode"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VOccDisMin_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Occupied minimum airflow "; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActCooMax_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Active cooling maximum"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActCooMin_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Active cooling minimum"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActMin_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Active minimum"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActHeaMin_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Active heating minimum"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput VActHeaMax_flow( min=0, final unit="m3/s", quantity="VolumeFlowRate") "Active heating maximum"; Buildings.Controls.OBC.CDL.Continuous.Gain gai(k=VOutPerPer_flow) if have_occSen "Outdoor air per person"; Buildings.Controls.OBC.CDL.Continuous.Add breZon if have_occSen "Breathing zone airflow"; Buildings.Controls.OBC.CDL.Continuous.Line co2ConLoo if have_CO2Sen "Maintain CO2 concentration at setpoint, reset 0% at (setpoint-200) and 100% at setpoint"; Buildings.Controls.OBC.CDL.Continuous.Line lin1 if have_CO2Sen "Reset occupied minimum airflow setpoint from 0% at VDisSetMin_flow and 100% at VDisCooSetMax_flow"; Buildings.Controls.OBC.CDL.Continuous.Greater gre "Check if zone minimum airflow setpoint Vmin is less than the allowed controllable VDisConMin_flow"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(threshold=0) if have_occSen "Check if the zone becomes unpopulated"; Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr1 "Check if zone minimum airflow setpoint VDisSetMin_flow is non-zero"; Buildings.Controls.OBC.CDL.Logical.Switch swi "Reset occupied minimum airflow according to occupancy"; Buildings.Controls.OBC.CDL.Logical.Switch swi1 "Reset occupied minimum airflow according to window status"; Buildings.Controls.OBC.CDL.Logical.Switch swi2 "Reset occupied minimum airflow setpoint according to minimum controllable airflow"; Buildings.Controls.OBC.CDL.Logical.Switch swi3 if have_CO2Sen "Switch between zero signal and CO2 control loop signal depending on the operation mode"; Buildings.Controls.OBC.CDL.Logical.And and1 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not not1 "Logical not"; Buildings.Controls.OBC.CDL.Logical.Not not2 if have_winSen "Logical not"; protected Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonAir1(final k=VDisSetMin_flow) if not have_CO2Sen "Zone minimum airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant maxZonCooAir(final k=VDisCooSetMax_flow) if have_CO2Sen "Zone maximum cooling airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant breZonAre(final k=VOutPerAre_flow*AFlo) if have_occSen "Area component of the breathing zone outdoor airflow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant conVolMin(final k=VDisConMin_flow) "VAV box controllable minimum"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant minZonAir(final k=VDisSetMin_flow) "Zone minimum airflow setpoint"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setCO1(final k=CO2Set - 200) if have_CO2Sen "CO2 setpoints minus 200"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant setCO2(final k=CO2Set) if have_CO2Sen "CO2 setpoints"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerFlo(final k=0) "Zero airflow when window is open"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=true) if not have_occSen "Constant true"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=true) if not have_winSen "Constant true"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon(final k=0) "Output zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon1(final k=0) if have_CO2Sen "Output zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon2(final k=0) if have_CO2Sen "Output zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon3(final k=0) if not have_occSen "Output zero"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneCon(final k=1) if have_CO2Sen "Output one"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant oneCon1(final k=1) if have_CO2Sen "Output one"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant cooMaxAir(final k=VDisCooSetMax_flow) "Cooling maximum airflow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant heaMaxAir(final k=VDisHeaSetMax_flow) "Heat maximum airflow"; Buildings.Controls.OBC.CDL.Continuous.Sources.Constant zerCon6(final k=0) "Output zero"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.occupied) "Occupied mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt1( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.coolDown) "Cool down mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt2( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setUp) "Setup mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt3( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.warmUp) "Warm up mode"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant conInt4( final k=Buildings.Controls.OBC.ASHRAE.G36_PR1.Types.OperationModes.setBack) "Setback mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu "Check if current operation mode is occupied mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu1 "Check if current operation mode is cool-down mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu2 "Check if current operation mode is setup mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu3 "Check if current operation mode is warmup mode"; Buildings.Controls.OBC.CDL.Integers.Equal intEqu4 "Check if current operation mode is setback mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi4 "Select cooling maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi8 "Select heating maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi9 "Select cooling maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi17 "Select heating minimum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi18 "Select heating maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi22 "Select heating minimum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi23 "Select heating maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi24 "Select cooling maximum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi25 "Select cooling minimum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi26 "Select minimum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi27 "Select heating minimum based on operation mode"; Buildings.Controls.OBC.CDL.Logical.Switch swi28 "Select heating maximum based on operation mode"; Buildings.Controls.OBC.CDL.Continuous.MultiSum actCooMaxAir(nin=3) "Active cooling maximum airflow"; Buildings.Controls.OBC.CDL.Continuous.MultiSum actCooMinAir(nin=1) "Active cooling minimum airflow"; Buildings.Controls.OBC.CDL.Continuous.MultiSum actMinAir(nin=1) "Active minimum airflow"; Buildings.Controls.OBC.CDL.Continuous.MultiSum actHeaMinAir(nin=3) "Active heating minimum airflow"; Buildings.Controls.OBC.CDL.Continuous.MultiSum actHeaMaxAir(nin=4) "Active heating maximum airflow"; Buildings.Controls.OBC.CDL.Continuous.Max maxInp "Find greater input"; equation connect(conVolMin.y, gre.u1); connect(setCO1.y, co2ConLoo.x1); connect(zerCon.y, co2ConLoo.f1); connect(ppmCO2, co2ConLoo.u); connect(setCO2.y, co2ConLoo.x2); connect(oneCon.y, co2ConLoo.f2); connect(zerCon1.y, lin1.x1); connect(oneCon1.y, lin1.x2); connect(maxZonCooAir.y, lin1.f2); connect(minZonAir.y, lin1.f1); connect(intEqu.y, swi3.u2); connect(co2ConLoo.y, swi3.u1); connect(swi3.y, lin1.u); connect(zerCon2.y, swi3.u3); connect(uOpeMod, intEqu.u2); connect(conInt.y, intEqu.u1); connect(nOcc, greThr.u); connect(nOcc, gai.u); connect(breZonAre.y, breZon.u2); connect(gai.y, breZon.u1); connect(breZon.y, swi.u3); connect(greThr.y, swi.u2); connect(lin1.y, swi.u1); connect(minZonAir.y, greThr1.u); connect(minZonAir.y, gre.u2); connect(gre.y,and1. u2); connect(greThr1.y,and1. u1); connect(and1.y, not1.u); connect(not1.y, swi2.u2); connect(conVolMin.y, swi2.u3); connect(swi.y, swi2.u1); connect(uWin, not2.u); connect(not2.y, swi1.u2); connect(zerFlo.y, swi1.u3); connect(swi2.y, swi1.u1); connect(swi1.y, VOccDisMin_flow); connect(con.y, swi.u2); connect(minZonAir1.y, swi.u1); connect(con1.y, swi1.u2); connect(zerCon3.y, swi.u3); connect(intEqu.y, swi24.u2); connect(intEqu.y, swi25.u2); connect(intEqu.y, swi26.u2); connect(intEqu.y, swi27.u2); connect(intEqu.y, swi28.u2); connect(cooMaxAir.y, swi24.u1); connect(heaMaxAir.y, maxInp.u2); connect(maxInp.y, swi28.u1); connect(zerCon6.y, swi24.u3); connect(zerCon6.y, swi25.u3); connect(zerCon6.y, swi26.u3); connect(zerCon6.y, swi27.u3); connect(zerCon6.y, swi28.u3); connect(uOpeMod, intEqu1.u2); connect(uOpeMod, intEqu2.u2); connect(uOpeMod, intEqu4.u2); connect(uOpeMod, intEqu3.u2); connect(conInt1.y, intEqu1.u1); connect(conInt2.y, intEqu2.u1); connect(conInt4.y, intEqu4.u1); connect(conInt3.y, intEqu3.u1); connect(cooMaxAir.y, swi4.u1); connect(heaMaxAir.y, swi8.u1); connect(intEqu1.y, swi4.u2); connect(intEqu1.y, swi8.u2); connect(zerCon6.y, swi4.u3); connect(zerCon6.y, swi8.u3); connect(cooMaxAir.y, swi9.u1); connect(intEqu2.y, swi9.u2); connect(zerCon6.y, swi9.u3); connect(intEqu3.y, swi17.u2); connect(intEqu3.y, swi18.u2); connect(intEqu4.y, swi22.u2); connect(intEqu4.y, swi23.u2); connect(heaMaxAir.y, swi17.u1); connect(cooMaxAir.y, swi18.u1); connect(zerCon6.y, swi17.u3); connect(zerCon6.y, swi18.u3); connect(zerCon6.y, swi22.u3); connect(zerCon6.y, swi23.u3); connect(heaMaxAir.y, swi22.u1); connect(cooMaxAir.y, swi23.u1); connect(swi24.y, actCooMaxAir.u[1]); connect(swi25.y, actCooMinAir.u[1]); connect(swi26.y, actMinAir.u[1]); connect(swi27.y, actHeaMinAir.u[1]); connect(swi28.y, actHeaMaxAir.u[1]); connect(swi4.y, actCooMaxAir.u[2]); connect(swi8.y, actHeaMaxAir.u[2]); connect(swi9.y, actCooMaxAir.u[3]); connect(swi17.y, actHeaMinAir.u[2]); connect(swi18.y, actHeaMaxAir.u[3]); connect(swi22.y, actHeaMinAir.u[3]); connect(swi23.y, actHeaMaxAir.u[4]); connect(swi1.y, swi25.u1); connect(swi1.y, swi26.u1); connect(swi1.y, swi27.u1); connect(swi1.y, maxInp.u1); connect(actCooMaxAir.y, VActCooMax_flow); connect(actCooMinAir.y, VActCooMin_flow); connect(actMinAir.y, VActMin_flow); connect(actHeaMinAir.y, VActHeaMin_flow); connect(actHeaMaxAir.y, VActHeaMax_flow); end ActiveAirFlow;