blockReliefFanGroup
Sequence for controlling relief fan group
Information
Sequence for controlling group of relief fans and their dampers for AHUs using actuated relief dampers with relief fan(s). It is developed based on Section 5.16.9 of ASHRAE Guideline 36, May 2020.
- All operating relief fans that serve a common or shared air volume shall be grouped and controlled as if they were one system, running at the same speed and using the same control loop, even if they are associated with different AHUs.
-
A relief fan shall be enabled when its associated supply fan is proven ON
(
u1SupFan=true), and shall be disabled otherwise. -
Building static pressure (
dpBui) shall be time averaged with a sliding 5-minute window and 15 second sampling rate (to dampen fluctuations). The average value shall be that displayed and used for control. -
A P-only control loop maintains the building pressure at a set point (
dpBuiSet) of 12 Pa (0.05 in. of water) with an output ranging from 0% to 100%. The loop is disabled and output set to zero when all fans in the relief system group are disabled. -
Fan speed signal to all operating fans in the relief system group shall be the same
and shall be equal to the PID signal but no less than the minimum speed. Except for
Stage 0, discharge dampers of all relief fans shall be open only when fan is commanded
ON.
- Stage 0 (barometric relief). When relief system is enabled, and the control loop output is above 5%, open the motorized dampers to all relief fans serving the relief system group that are enabled; close the dampers when the loop output drops to 0% for 5 minutes.
-
Stage Up. When control loop output is above minimum speed (
relFanSpe_min) plus 15%, start stage-up timer. Each time the timer reaches 7 minutes, start the next relief fan (and open the associated damper) in the relief system group, per staging order, and reset the timer to 0. The timer is reset to 0 and frozen if control loop is below minimum speed plus 15%. Note, when staging from Stage 0 (no relief fans) to Stage 1 (one relief fan), the discharge dampers of all nonoperating relief fans must be closed. -
Stage Down. When PID loop is below minimum speed (
relFanSpe_min), start stage-down timer. Each time the timer reaches 5 minutes, shut off lag fan per staging order and reset the timer to 0. The timer is reset to 0 and frozen if PID loop rises above minimum speed or all fans are OFF. If all fans are OFF, go to Stage 0 (all dampers open and all fans OFF).
- For fans in a Level 2 alarm and status is OFF, discharge damper shall be closed when is above Stage 0.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nSupFan | 2 | Total number of AHU supply fans that are serving the same common space |
| Integer | nRelFan | 4 | Total number of relief fans that are serving the same common space |
| Real | relFanSpe_min | 0.1 | Relief fan minimum speed |
| Integer[nRelFan] | staVec | {2, 3, 1, 4} | Vector of the order for staging up relief fan, i.e. the 1st element means the 1st relief fan and its value showing its sequence when staging up |
| Integer[nRelFan,nSupFan] | relFanMat | {{1, 0}, {1, 0}, {0, 1}, {0, 1}} | Relief fan matrix with relief fan as row index and AHU supply fan as column index. It flags which relief fan is associated with which supply fan |
| Real | dpBuiSet | 12 | Building static pressure difference relative to ambient (positive to pressurize the building) |
| Pressure controller | |||
| Real | k | 1 | Gain, normalized using dpBuiSet |
| Advanced | |||
| Real | hys | 0.005 | Hysteresis for checking the controller output value |
Components
| Type | Name | Default | Description |
|---|---|---|---|
| Buildings.Controls.OBC.CDL.Interfaces.BooleanInput[nSupFan] | u1SupFan | AHU supply fan proven on status | |
| Buildings.Controls.OBC.CDL.Interfaces.RealInput | dpBui | Building static pressure difference, relative to ambient (positive if pressurized) | |
| Buildings.Controls.OBC.CDL.Interfaces.IntegerInput[nRelFan] | uRelFanAla | Relief fan current alarm index | |
| Buildings.Controls.OBC.CDL.Interfaces.BooleanInput[nRelFan] | u1RelFan | Relief fan proven on status | |
| Buildings.Controls.OBC.CDL.Interfaces.RealOutput | yDpBui | Building static pressure difference, relative to ambient (positive if pressurized) | |
| Buildings.Controls.OBC.CDL.Interfaces.RealOutput[nRelFan] | yRelFan | Relief fan commanded speed | |
| Buildings.Controls.OBC.CDL.Interfaces.RealOutput[nRelFan] | yDam | Damper commanded position | |
| Buildings.Controls.OBC.CDL.Reals.MatrixGain | enaRel | Vector of relief fans with the enabled one denoted by 1 | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal[nSupFan] | booToRea | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter[nRelFan] | gai | Vector of enabling fan, along with its staging order | |
| Buildings.Controls.OBC.CDL.Reals.MovingAverage | movMea | Average building static pressure measurement | |
| Buildings.Controls.OBC.CDL.Reals.Divide | div1 | Normalized the control error | |
| Buildings.Controls.OBC.CDL.Reals.PID | conP | Building static pressure controller | |
| Buildings.Controls.OBC.CDL.Logical.MultiOr | enaRelGro | Relief group enabling status | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal | booToRea1 | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Reals.Multiply | pro | Set controller output to zero when the relief system is disabled | |
| Buildings.Controls.OBC.CDL.Reals.GreaterThreshold | greThr | Check if the controller output is greater than threshold | |
| Buildings.Controls.OBC.CDL.Logical.And | and2 | Check if the controller output is greater than threshold and the relief system has been enabled | |
| Buildings.Controls.OBC.CDL.Logical.Latch | lat | Enable damper | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold | lesThr | Check if the controller output is near zero | |
| Buildings.Controls.OBC.CDL.Logical.Timer | tim | Check if the controller output has been near zero for threshold time | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | booRep | Boolean replicator | |
| Buildings.Controls.OBC.CDL.Reals.GreaterThreshold[nRelFan] | greThr1 | Check if a relief fan should be enabled | |
| Buildings.Controls.OBC.CDL.Logical.And[nRelFan] | enaDam | Enable damper | |
| Buildings.Controls.OBC.CDL.Reals.GreaterThreshold | greThr2 | Check if the controller output is greater than minimum speed plus threshold | |
| Buildings.Controls.OBC.CDL.Logical.Timer | upTim | Check if the controller output has been greater than threshold for sufficient long time | |
| Buildings.Controls.OBC.CDL.Logical.Pre | pre | Break algebraic loop | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal[nRelFan] | booToRea2 | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Reals.Subtract[nRelFan] | sub2 | Identify relief fans that have been enabled but not yet operating | |
| Buildings.Controls.OBC.CDL.Reals.Multiply[nRelFan] | pro1 | List of standby fans, along with their staging order | |
| Buildings.Controls.OBC.CDL.Reals.MultiMin | mulMin | Identify current order of staging | |
| Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator | reaRep | Replicate real number | |
| Buildings.Controls.OBC.CDL.Reals.Subtract[nRelFan] | sub1 | Identify next operating fan | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold[nRelFan] | lesThr1 | Check if the input is less than threshold | |
| Buildings.Controls.OBC.CDL.Reals.AddParameter[nRelFan] | addPar | Add value to the input | |
| Buildings.Controls.OBC.CDL.Reals.Switch[nRelFan] | swi | Switch input values | |
| Buildings.Controls.OBC.CDL.Reals.Abs[nRelFan] | abs1 | Find absolute value | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold[nRelFan] | lesThr2 | Identify next operating fan | |
| Buildings.Controls.OBC.CDL.Logical.Or[nRelFan] | or2 | Targeted vector of operating relief fan after one new fan being turned on | |
| Buildings.Controls.OBC.CDL.Logical.Latch | lat2 | Stage up next relief fan | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold | lesThr3 | Check if the controller output is less than minimum speed | |
| Buildings.Controls.OBC.CDL.Logical.Timer | dowTim | Check if the controller output has been less than threshold for sufficient long time | |
| Buildings.Controls.OBC.CDL.Logical.Pre | pre1 | Break algebraic loop | |
| Buildings.Controls.OBC.CDL.Reals.Multiply[nRelFan] | pro2 | List of operating fans, along with their staging order | |
| Buildings.Controls.OBC.CDL.Reals.AddParameter[nRelFan] | addPar1 | Add value to the input | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold[nRelFan] | lesThr4 | Check if the input is less than threshold | |
| Buildings.Controls.OBC.CDL.Reals.Switch[nRelFan] | swi1 | Switch input values | |
| Buildings.Controls.OBC.CDL.Reals.MultiMin | mulMin1 | Minimum staging order of the running relief fans | |
| Buildings.Controls.OBC.CDL.Reals.Subtract[nRelFan] | sub3 | Identify next operating fan | |
| Buildings.Controls.OBC.CDL.Reals.Abs[nRelFan] | abs2 | Find absolute value | |
| Buildings.Controls.OBC.CDL.Reals.LessThreshold[nRelFan] | lesThr5 | Identify next fan to be off | |
| Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator | reaRep1 | Replicate real number | |
| Buildings.Controls.OBC.CDL.Logical.Xor[nRelFan] | xor | Vector of relief fan after one fan being turned off | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger[nRelFan] | booToInt | Convert boolean to integer | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger[nRelFan] | booToInt1 | Convert boolean to integer | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger[nRelFan] | booToInt2 | Convert boolean to integer | |
| Buildings.Controls.OBC.CDL.Integers.Equal[nRelFan] | intEqu | Check if newly started fan has become proven on | |
| Buildings.Controls.OBC.CDL.Logical.MultiAnd | mulAnd | Check if newly started fan has become proven on | |
| Buildings.Controls.OBC.CDL.Integers.Equal[nRelFan] | intEqu1 | Check if newly turned off fan has become off | |
| Buildings.Controls.OBC.CDL.Logical.MultiAnd | mulAnd2 | Check if newly turned off fan has become off | |
| Buildings.Controls.OBC.CDL.Logical.Latch | lat1 | Stage down lag fan | |
| Buildings.Controls.OBC.CDL.Logical.Switch[nRelFan] | logSwi | Vector of relief fan status after staging up | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | booRep1 | Replicate boolean input | |
| Buildings.Controls.OBC.CDL.Logical.Switch[nRelFan] | logSwi1 | Vector of relief fan status after staging down | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | booRep2 | Replicate boolean input | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal[nRelFan] | booToRea3 | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Reals.Limiter | lim | Limit the controller output | |
| Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator | reaRep2 | Replicate real input | |
| Buildings.Controls.OBC.CDL.Reals.Multiply[nRelFan] | pro3 | Relief fan speed | |
| Buildings.Controls.OBC.CDL.Logical.Switch[nRelFan] | logSwi2 | Vector of relief fan status after staging up | |
| Buildings.Controls.OBC.CDL.Reals.Sources.Constant | dpBuiSetPoi | Building pressure setpoint | |
| Buildings.Controls.OBC.CDL.Reals.Sources.Constant | conOne | Constant one | |
| Buildings.Controls.OBC.CDL.Reals.Sources.Constant | con | Zero fan speed when it is in stage 0 | |
| Buildings.Controls.OBC.CDL.Reals.Switch | swi2 | Switch input values | |
| Buildings.Controls.OBC.CDL.Logical.MultiOr | mulOr | Check if there is any relief fan enabled, but may not be running | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal[nRelFan] | booToRea4 | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Logical.Not | not1 | Logical not | |
| Buildings.Controls.OBC.CDL.Logical.And | and1 | Start timer, and reset to zero if the threshold time has passed | |
| Buildings.Controls.OBC.CDL.Logical.And | and3 | Start timer, and reset to zero if the threshold time has passed | |
| Buildings.Controls.OBC.CDL.Logical.Not | not2 | Logical not | |
| Buildings.Controls.OBC.CDL.Integers.Equal[nRelFan] | intEqu2 | Check if the relief fan is in level 2 alarm | |
| Buildings.Controls.OBC.CDL.Integers.Sources.Constant[nRelFan] | conInt | Constant | |
| Buildings.Controls.OBC.CDL.Logical.Not[nRelFan] | not3 | Logical not | |
| Buildings.Controls.OBC.CDL.Logical.And[nRelFan] | and4 | Check if the relief fan is in level 2 alarm and it is proven off | |
| Buildings.Controls.OBC.CDL.Conversions.BooleanToReal[nRelFan] | booToRea5 | Convert boolean to real | |
| Buildings.Controls.OBC.CDL.Reals.Multiply[nRelFan] | mul | Product of inputs | |
| Buildings.Controls.OBC.CDL.Reals.GreaterThreshold[nRelFan] | greThr3 | Check if the relief fan is enabled | |
| Buildings.Controls.OBC.CDL.Logical.MultiAnd | mulAnd1 | Check if all the fans are proven off | |
| Buildings.Controls.OBC.CDL.Reals.Switch[nRelFan] | swi3 | Switch input values | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | booRep4 | Replicate boolean input | |
| Buildings.Controls.OBC.CDL.Logical.Switch[nRelFan] | logSwi3 | Vector of relief fan status after staging down | |
| Buildings.Controls.OBC.CDL.Logical.TrueDelay[nRelFan] | truDel | Delay true input | |
| Buildings.Controls.OBC.CDL.Logical.MultiOr | mulOr1 | Check if there is any fan is proven on | |
| Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator | booRep5 | Replicate boolean input | |
| Buildings.Controls.OBC.CDL.Logical.Not[nRelFan] | not5 | Logical not | |
| Buildings.Controls.OBC.CDL.Logical.Not[nRelFan] | not6 | Logical not | |
| Buildings.Controls.OBC.CDL.Logical.TrueDelay[nRelFan] | truDel1 | Delay true input |
Revisions
-
March 4, 2024, by Michael Wetter:
Corrected wrong use ofdisplayUnit. -
July 15, 2021, by Jianjun Hu:
First implementation.