Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences

Chilled water pump control sequences

Information

This package contains subsequences for chilled water pumps control for plants with parallel chillers.

Package Content

Name Description
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP EnableLag_primary_dP Sequences for enabling and disabling lag pumps for primary-only plants using differential pressure pump speed control
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_dedicated EnableLead_dedicated Sequence to enable or disable the lead pump of plants with dedicated primary chilled water pumps
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_headered EnableLead_headered Sequence to enable or disable the lead pump of plants with headered primary chilled water pumps
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.LocalDp_setpoint LocalDp_setpoint Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_localDp Speed_primary_localDp Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp Speed_primary_remoteDp Pump speed control for primary-only plants where the remote DP sensor(s) is hardwired to the plant controller
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Validation Validation Collection of validation models

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP

Sequences for enabling and disabling lag pumps for primary-only plants using differential pressure pump speed control

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLag_primary_dP

Information

Block that enables and disables lag primary chilled water pump, for plants with headered primary chilled water pumps, according to ASHRAE Guideline 36-2021, section 5.20.6 Primary chilled water pumps, part 5.20.6.6.

Chilled water pump shall be staged as a function of chilled water flow ratio (CHWFR), i.e., the ratio of current chilled water flow VChiWat_flow to design flow VChiWat_flow_nominal, and the number of pumps num_nominal that operate at design conditions. Pumps are assumed to be equally sized.

                  VChiWat_flow
     CHWFR = ----------------------
              VChiWat_flow_nominal

1. Start the next lag pump yNexLagPum whenever the following is true for 10 minutes:

              Number_of_operating_pumps
     CHWFR > ---------------------------  - 0.03
                       num_nominal

2. Shut off the last lag pump whenever the following is true for 10 minutes:

              Number_of_operating_pumps - 1
     CHWFR ≤ -------------------------------  - 0.03
                       num_nominal

Parameters

TypeNameDefaultDescription
IntegernPum2Total number of pumps
RealtimPer600Delay time period for enabling and disabling lag pumps [s]
Nominal conditions
IntegernPum_nominalnPumTotal number of pumps that operate at design conditions
RealVChiWat_flow_nominal0.5Total plant design chilled water flow rate [m3/s]
Advanced
RealstaCon-0.03Constant used in the staging equation
RealrelFloHys0.01Constant value used in hysteresis for checking relative flow rate

Connectors

TypeNameDescription
input RealInputVChiWat_flowChilled water flow [m3/s]
input BooleanInputuChiWatPum[nPum]Chilled water pump status
output BooleanOutputyUpNext lag pump status, a rising edge indicates that next lag pump should be enabled
output BooleanOutputyDownLast lag pump status, an edge indicates that last lag pump should be disabled

Modelica definition

block EnableLag_primary_dP "Sequences for enabling and disabling lag pumps for primary-only plants using differential pressure pump speed control" parameter Integer nPum = 2 "Total number of pumps"; parameter Real timPer( final unit="s", final quantity="Time")=600 "Delay time period for enabling and disabling lag pumps"; parameter Real staCon = -0.03 "Constant used in the staging equation"; parameter Real relFloHys = 0.01 "Constant value used in hysteresis for checking relative flow rate"; parameter Integer nPum_nominal( final max = nPum, final min = 1) = nPum "Total number of pumps that operate at design conditions"; parameter Real VChiWat_flow_nominal( final unit="m3/s", final quantity="VolumeFlowRate", final min=1e-6)=0.5 "Total plant design chilled water flow rate"; Buildings.Controls.OBC.CDL.Interfaces.RealInput VChiWat_flow( final unit="m3/s", final quantity="VolumeFlowRate") "Chilled water flow"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] "Chilled water pump status"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yUp "Next lag pump status, a rising edge indicates that next lag pump should be enabled"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yDown "Last lag pump status, an edge indicates that last lag pump should be disabled"; Buildings.Controls.OBC.CDL.Reals.Hysteresis enaPum( final uLow=(-1)*relFloHys, final uHigh=relFloHys) "Check if the condition for enabling next lag pump is satisfied"; Buildings.Controls.OBC.CDL.Reals.Hysteresis disPum( final uLow=(-1)*relFloHys, final uHigh=relFloHys) "Check if the condition for disabling last lag pump is satisfied"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter chiWatFloRat( final k=1/VChiWat_flow_nominal) "Chiller water flow ratio"; Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Generic.TimerWithReset tim( final t=timPer) "Check if it has passed the threhold time"; Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Generic.TimerWithReset tim1( final t=timPer) "Check if it has passed the threhold time"; protected Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger booToInt[nPum] "Convert boolean input to integer number"; Buildings.Controls.OBC.CDL.Integers.MultiSum numOpePum(final nin=nPum) "Total number of operating pumps"; Buildings.Controls.OBC.CDL.Conversions.IntegerToReal intToRea "Convert integer to real"; Buildings.Controls.OBC.CDL.Reals.AddParameter addPar1( final p=-1) "Add real inputs"; Buildings.Controls.OBC.CDL.Reals.Subtract sub2 "Find inputs difference"; Buildings.Controls.OBC.CDL.Reals.Subtract sub1 "Find inputs difference"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter nomPum( final k=1/nPum_nominal) "Pump number ratio"; Buildings.Controls.OBC.CDL.Reals.MultiplyByParameter nomPum1( final k=1/nPum_nominal) "Pump number ratio"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant con2( final k=0.03) "Constant"; Buildings.Controls.OBC.CDL.Reals.Subtract sub "Input difference"; Buildings.Controls.OBC.CDL.Reals.Subtract sub3 "Input difference"; Buildings.Controls.OBC.CDL.Integers.GreaterThreshold intGreThr(final t=0) "Check if the lead pump has been enabled"; Buildings.Controls.OBC.CDL.Logical.And enaPum1 "Enable pump"; Buildings.Controls.OBC.CDL.Logical.And disPum1 "Disable pump"; Buildings.Controls.OBC.CDL.Integers.Change cha "Check if there is change in the number of enabled pumps"; equation connect(VChiWat_flow,chiWatFloRat. u); connect(uChiWatPum,booToInt. u); connect(booToInt.y,numOpePum. u); connect(numOpePum.y,intToRea. u); connect(sub2.y, enaPum.u); connect(sub1.y, disPum.u); connect(intToRea.y, addPar1.u); connect(chiWatFloRat.y, sub2.u1); connect(chiWatFloRat.y, sub1.u2); connect(intToRea.y, nomPum.u); connect(addPar1.y, nomPum1.u); connect(nomPum.y, sub3.u1); connect(nomPum1.y, sub.u1); connect(con2.y, sub3.u2); connect(con2.y, sub.u2); connect(sub3.y, sub2.u2); connect(sub.y, sub1.u1); connect(numOpePum.y, intGreThr.u); connect(enaPum.y, enaPum1.u1); connect(disPum.y, disPum1.u1); connect(intGreThr.y, enaPum1.u2); connect(intGreThr.y, disPum1.u2); connect(numOpePum.y, cha.u); connect(cha.up, tim.reset); connect(enaPum1.y, tim.u); connect(tim.passed, yUp); connect(disPum1.y, tim1.u); connect(cha.down, tim1.reset); connect(tim1.passed, yDown); end EnableLag_primary_dP;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_dedicated Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_dedicated

Sequence to enable or disable the lead pump of plants with dedicated primary chilled water pumps

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_dedicated

Information

Block that enables and disables the leading primary chilled water pump, for plants with dedicated primary chilled water pumps and parallel chillers, according to ASHRAE Guideline 36-2021, section 5.20.6.6.

The lead primary chilled water pump should be enabled when the plant is enabled (uPla = true). It should be disabled when the lead chiller is disabled (uLeaChiEna = false) and either the lead chiller has been proven off (uLeaChiSta = false) for 3 minutes or is not requesting chilled water flow (uLeaChiWatReq = false).

Connectors

TypeNameDescription
input BooleanInputuPlaTrue: plant is enabled
input BooleanInputuLeaChiEnaTrue: lead chiller is enabled
input BooleanInputuLeaChiStaTrue: lead chiller is proven on
input BooleanInputuLeaChiWatReqTrue: lead chiller is requesting chilled water
output BooleanOutputyLeaLead pump status setpoint

Modelica definition

block EnableLead_dedicated "Sequence to enable or disable the lead pump of plants with dedicated primary chilled water pumps" final parameter Real offTimThr( final unit="s", final quantity="Time")=180 "Threshold to check lead chiller off time"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uPla "True: plant is enabled"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiEna "True: lead chiller is enabled"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiSta "True: lead chiller is proven on"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uLeaChiWatReq "True: lead chiller is requesting chilled water"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea "Lead pump status setpoint"; Buildings.Controls.OBC.CDL.Logical.Latch leaPumSta "Lead pump status"; protected Buildings.Controls.OBC.CDL.Logical.Or or2 "Logical or"; Buildings.Controls.OBC.CDL.Logical.Not noChiWatReq "No chilled water request"; Buildings.Controls.OBC.CDL.Logical.Not proOff "Lead chiller proven off"; Buildings.Controls.OBC.CDL.Logical.Timer tim( final t=offTimThr) "Check if the chiller has been OFF for more than 3 minutes"; Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and"; Buildings.Controls.OBC.CDL.Logical.Not disLeaChi "Disabled lead chiller"; Buildings.Controls.OBC.CDL.Logical.Edge disLeaPum "Disable lead pump when the input has rising edge"; equation connect(uLeaChiWatReq, noChiWatReq.u); connect(uLeaChiSta, proOff.u); connect(proOff.y, tim.u); connect(noChiWatReq.y, or2.u2); connect(uLeaChiEna, disLeaChi.u); connect(disLeaChi.y, and2.u1); connect(or2.y, and2.u2); connect(uPla, leaPumSta.u); connect(and2.y, disLeaPum.u); connect(disLeaPum.y, leaPumSta.clr); connect(tim.passed, or2.u1); connect(leaPumSta.y, yLea); end EnableLead_dedicated;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_headered Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_headered

Sequence to enable or disable the lead pump of plants with headered primary chilled water pumps

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.EnableLead_headered

Information

Block that enables and disables the leading primary chilled water pump, for plants with headered primary chilled water pumps and parallel chillers, according to ASHRAE Guideline 36-2021, section 5.20.6 Primary chilled water pumps, part 1, 2, and 3.

  1. Primary chilled water pumps shall be lead-lag. Note that the lead-lag control is implemented in a separate sequence.
  2. Enable lead primary chilled water pump when any chiller CHW isolation valve uChiIsoVal is commanded open. Disable the lead primary chilled water pump when all chiller CHW isolation valves are commanded closed.
  3. Or if the plant has the waterside economizer, enable lead primary CHW pump when any chiller CHW isolation valve is commanded open or waterside economizer is enabled. Disable the lead primary CHW pump when all chiller CHW isolation valves are commanded closed and WSE is disabled.

Parameters

TypeNameDefaultDescription
IntegernChi2Total number of chiller CHW isolation valves
Booleanhave_WSE True: the plant has waterside economizer

Connectors

TypeNameDescription
input BooleanInputu1ChiWatIsoVal[nChi]Chilled water isolation valve commanded position
input BooleanInputuWseWaterside economizer proven on status: true=ON
output BooleanOutputyLeaLead pump status setpoint

Modelica definition

block EnableLead_headered "Sequence to enable or disable the lead pump of plants with headered primary chilled water pumps" parameter Integer nChi=2 "Total number of chiller CHW isolation valves"; parameter Boolean have_WSE "True: the plant has waterside economizer"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput u1ChiWatIsoVal[nChi] "Chilled water isolation valve commanded position"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse if have_WSE "Waterside economizer proven on status: true=ON"; Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput yLea "Lead pump status setpoint"; protected Buildings.Controls.OBC.CDL.Logical.Switch leaPumSta "Lead pump status"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con(final k=true) "Logical true"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con1(final k=false) "Logical false"; Buildings.Controls.OBC.CDL.Logical.MultiOr anyIsoVal(nin=nChi) "Check if any chilled water isolation valve is commanded on"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con2( final k=false) if not have_WSE "Logical false"; Buildings.Controls.OBC.CDL.Logical.Or or2 "Check if the chilled water pump should be enabled"; equation connect(con.y,leaPumSta. u1); connect(con1.y,leaPumSta. u3); connect(leaPumSta.y, yLea); connect(anyIsoVal.y, or2.u1); connect(uWse, or2.u2); connect(or2.y, leaPumSta.u2); connect(con2.y, or2.u2); connect(u1ChiWatIsoVal, anyIsoVal.u); end EnableLead_headered;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.LocalDp_setpoint Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.LocalDp_setpoint

Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.LocalDp_setpoint

Information

Block that calculates the local DP setpoint for the local primary loop DP sensor hardwired to the plant controller. It is applicable for the primary-only plants where the remote pressure differential (DP) sensor(s) are not hardwired to the plant controller, but a local DP sensor is hardwired to the plant controller, according to ASHRAE Guideline 36-2021, section 5.20.6 Primary chilled water pumps, part 5.20.6.10.

  1. Remote DP shall be maintained at setpoint dpChiWatSet by a reverse-acting PID loop running in the controller to which the remote sensor is wired. The loop output shall be a DP setpoint for the local primary loop DP sensor hardwired to the plant controller. Reset local DP from minLocDp, e.g., 5 psi (34473.8 Pa), at 0% loop output to maxLocDp at 100% loop output.

Parameters

TypeNameDefaultDescription
IntegernSen2Total number of remote differential pressure sensors
IntegernPum2Total number of chilled water pumps
RealminLocDp5*6894.75Minimum chilled water loop local differential pressure setpoint [Pa]
RealmaxLocDp15*6894.75Maximum chilled water loop local differential pressure setpoint [Pa]
Pressure controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller
RealTi0.5Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]

Connectors

TypeNameDescription
input BooleanInputuChiWatPum[nPum]Chilled water pump status
input RealInputdpChiWat_remote[nSen]Chilled water differential static pressure from remote sensor [Pa]
input RealInputdpChiWatSet_remote[nSen]Chilled water differential static pressure setpoint [Pa]
output RealOutputdpChiWatSet_localLocal differential pressure setpoint [Pa]

Modelica definition

block LocalDp_setpoint "Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired" parameter Integer nSen = 2 "Total number of remote differential pressure sensors"; parameter Integer nPum = 2 "Total number of chilled water pumps"; parameter Real minLocDp( final unit="Pa", displayUnit="Pa", final quantity="PressureDifference", final min=0)=5*6894.75 "Minimum chilled water loop local differential pressure setpoint"; parameter Real maxLocDp( final unit="Pa", displayUnit="Pa", final quantity="PressureDifference", final min=minLocDp) = 15*6894.75 "Maximum chilled water loop local differential pressure setpoint"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k=1 "Gain of controller"; parameter Real Ti( final unit="s", final quantity="Time")=0.5 "Time constant of integrator block"; parameter Real Td( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] "Chilled water pump status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSen]( final unit=fill("Pa", nSen), final quantity=fill("PressureDifference", nSen)) "Chilled water differential static pressure from remote sensor"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_remote[nSen]( final unit=fill("Pa", nSen), final quantity=fill("PressureDifference",nSen)) "Chilled water differential static pressure setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput dpChiWatSet_local( final quantity="PressureDifference", final unit="Pa", displayUnit="Pa") "Local differential pressure setpoint"; Buildings.Controls.OBC.CDL.Reals.MultiMax maxRemDP( final nin=nSen) "Highest output from differential pressure control loops"; Buildings.Controls.OBC.CDL.Reals.Line locDpSet "Local differential pressure setpoint"; Buildings.Controls.OBC.Utilities.PIDWithEnable conPID[nSen]( final controllerType=fill(controllerType, nSen), final k=fill(k, nSen), final Ti=fill(Ti, nSen), final Td=fill(Td, nSen), final yMax=fill(1, nSen), final yMin=fill(0, nSen), final y_reset=fill(0, nSen)) "Differential pressure controller"; protected Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( final nout=nSen) "Replicate boolean input"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant locDp_min( final k=minLocDp) "Minimum local differential pressure"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant locDp_max( final k=maxLocDp) "Maximum local differential pressure "; Buildings.Controls.OBC.CDL.Reals.Divide div[nSen] "Normalized pressure difference"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep1( final nout=nSen) "Replicate real input"; Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nPum) "Check if there is any pump enabled"; equation connect(conPID.y, maxRemDP.u); connect(maxRemDP.y, locDpSet.u); connect(zer.y, locDpSet.x1); connect(locDp_min.y, locDpSet.f1); connect(one.y, locDpSet.x2); connect(locDp_max.y, locDpSet.f2); connect(dpChiWat_remote, div.u1); connect(one.y, reaRep1.u); connect(reaRep1.y, conPID.u_s); connect(div.y, conPID.u_m); connect(mulOr.y, booRep.u); connect(uChiWatPum, mulOr.u); connect(dpChiWatSet_remote, div.u2); connect(locDpSet.y, dpChiWatSet_local); connect(booRep.y, conPID.uEna); end LocalDp_setpoint;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_localDp Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_localDp

Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_localDp

Information

Block that controls speed of enabled chilled water pumps for primary-only plants where the remote pressure differential (DP) sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired to the plant controller, according to ASHRAE Guideline 36-2021, section 5.20.6 Primary chilled water pumps, part 5.20.6.10, 5.20.6.11, and 5.20.6.12.

  1. Remote DP shall be maintained at setpoint dpChiWatSet by a reverse-acting PID loop running in the controller to which the remote sensor is wired. The loop output shall be a DP setpoint for the local primary loop DP sensor hardwired to the plant controller. Reset local DP from minLocDp, e.g., 5 psi (34473.8 Pa), at 0% loop output to maxLocDp at 100% loop output.
  2. When any pump is proven on, pump speed shall be controlled by a reverse-acting PID loop, maintaining the local primary DP signal at the DP setpoint output from the remote sensor control loop. All pumps receive the same speed signal. PID loop output shall be mapped from the minimum pump speed (minPumSpe) at 0% to the maximum pump speed (maxPumSpe) at 100%.
  3. Where multiple remote DP sensors exist, a PID loop shall run for each sensor. The DP setpoint for the local DP sensor shall be the highest DP setpoint output from each of the remote loops.

Parameters

TypeNameDefaultDescription
IntegernPum2Total number of chilled water pumps
RealminPumSpe0.1Minimum pump speed
RealmaxPumSpe1Maximum pump speed
Speed controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller
RealTi0.5Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]

Connectors

TypeNameDescription
input RealInputdpChiWat_localChilled water differential static pressure from local sensor [Pa]
input RealInputdpChiWatSet_localLocal differential pressure setpoint [Pa]
input BooleanInputuChiWatPum[nPum]Chilled water pump status
output RealOutputyChiWatPumSpeChilled water pump speed [1]

Modelica definition

block Speed_primary_localDp "Pump speed control for primary-only plants where the remote DP sensor(s) is not hardwired to the plant controller, but a local DP sensor is hardwired" parameter Integer nPum = 2 "Total number of chilled water pumps"; parameter Real minPumSpe = 0.1 "Minimum pump speed"; parameter Real maxPumSpe = 1 "Maximum pump speed"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k=1 "Gain of controller"; parameter Real Ti( final unit="s", final quantity="Time")=0.5 "Time constant of integrator block"; parameter Real Td( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_local( final unit="Pa", final quantity="PressureDifference") "Chilled water differential static pressure from local sensor"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_local( final quantity="PressureDifference", final unit="Pa", displayUnit="Pa") "Local differential pressure setpoint"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] "Chilled water pump status"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPumSpe( final min=minPumSpe, final max=maxPumSpe, final unit="1") "Chilled water pump speed"; Buildings.Controls.OBC.Utilities.PIDWithEnable conPID( final controllerType=controllerType, final k=k, final Ti=Ti, final Td=Td, final yMax=1, final yMin=0, final y_reset=0) "Pump speed controller"; Buildings.Controls.OBC.CDL.Reals.Line pumSpe "Pump speed"; protected Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_min( final k=minPumSpe) "Minimum pump speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_max( final k=maxPumSpe) "Maximum pump speed"; Buildings.Controls.OBC.CDL.Reals.Divide div "Normalized pressure difference"; Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch"; Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nPum) "Check if there is any pump enabled"; equation connect(zer.y, pumSpe.x1); connect(pumSpe_min.y, pumSpe.f1); connect(conPID.y, pumSpe.u); connect(one.y, pumSpe.x2); connect(pumSpe_max.y, pumSpe.f2); connect(dpChiWat_local, div.u1); connect(one.y, conPID.u_s); connect(div.y, conPID.u_m); connect(pumSpe.y, swi.u1); connect(zer.y, swi.u3); connect(swi.y, yChiWatPumSpe); connect(mulOr.y, swi.u2); connect(uChiWatPum, mulOr.u); connect(mulOr.y, conPID.uEna); connect(dpChiWatSet_local, div.u2); end Speed_primary_localDp;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp

Pump speed control for primary-only plants where the remote DP sensor(s) is hardwired to the plant controller

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Pumps.ChilledWater.Subsequences.Speed_primary_remoteDp

Information

Block that outputs chilled water pump speed setpoint for primary-only plants where the remote pressure differential sensor is hardwired to the plant controller, according to ASHRAE Guideline 36-2021, section 5.20.6 Primary chilled water pumps, part 5.20.6.7 and 5.20.6.8.

  1. When any chilled water pump is proven on, uChiWatPum = true, the pump speed will be controlled by a reverse-acting PID loop, maintaining the differential pressure signal at a setpoint dpChiWatSet. All pumps receive the same speed signal. PID loop output shall be mapped from the minimum pump speed (minPumSpe) at 0% to the maximum pump speed (maxPumSpe) at 100%.
  2. Where multiple differential pressure sensors exist, a PID loop shall run for each sensor. Chilled water pumps shall be controlled to the maximum signal output of all DP sensor loops.

Parameters

TypeNameDefaultDescription
IntegernSen2Total number of remote differential pressure sensors
IntegernPum2Total number of chilled water pumps
RealminPumSpe0.1Minimum pump speed
RealmaxPumSpe1Maximum pump speed
Speed controller
SimpleControllercontrollerTypeBuildings.Controls.OBC.CDL.T...Type of controller
Realk1Gain of controller
RealTi0.5Time constant of integrator block [s]
RealTd0.1Time constant of derivative block [s]

Connectors

TypeNameDescription
input BooleanInputuChiWatPum[nPum]Chilled water pump status
input RealInputdpChiWat_remote[nSen]Chilled water differential static pressure [Pa]
input RealInputdpChiWatSet_remote[nSen]Chilled water differential static pressure setpoint [Pa]
output RealOutputyChiWatPumSpeChilled water pump speed [1]

Modelica definition

block Speed_primary_remoteDp "Pump speed control for primary-only plants where the remote DP sensor(s) is hardwired to the plant controller" parameter Integer nSen = 2 "Total number of remote differential pressure sensors"; parameter Integer nPum = 2 "Total number of chilled water pumps"; parameter Real minPumSpe = 0.1 "Minimum pump speed"; parameter Real maxPumSpe = 1 "Maximum pump speed"; parameter Buildings.Controls.OBC.CDL.Types.SimpleController controllerType= Buildings.Controls.OBC.CDL.Types.SimpleController.PI "Type of controller"; parameter Real k=1 "Gain of controller"; parameter Real Ti( final unit="s", final quantity="Time")=0.5 "Time constant of integrator block"; parameter Real Td( final unit="s", final quantity="Time")=0.1 "Time constant of derivative block"; Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChiWatPum[nPum] "Chilled water pump status"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWat_remote[nSen]( final unit=fill("Pa", nSen), final quantity=fill("PressureDifference", nSen)) "Chilled water differential static pressure"; Buildings.Controls.OBC.CDL.Interfaces.RealInput dpChiWatSet_remote[nSen]( final unit=fill("Pa", nSen), final quantity=fill("PressureDifference",nSen)) "Chilled water differential static pressure setpoint"; Buildings.Controls.OBC.CDL.Interfaces.RealOutput yChiWatPumSpe( final min=minPumSpe, final max=maxPumSpe, final unit="1") "Chilled water pump speed"; Buildings.Controls.OBC.CDL.Reals.MultiMax maxLoo( final nin=nSen) "Maximum DP loop output"; Buildings.Controls.OBC.CDL.Reals.Line pumSpe "Pump speed"; Buildings.Controls.OBC.Utilities.PIDWithEnable conPID[nSen]( final controllerType=fill(controllerType, nSen), final k=fill(k, nSen), final Ti=fill(Ti, nSen), final Td=fill(Td, nSen), final yMax=fill(1, nSen), final yMin=fill(0, nSen), final y_reset=fill(0, nSen)) "Pump speed controller"; protected Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep( final nout=nSen) "Replicate boolean input"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_min( final k=minPumSpe) "Minimum pump speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant pumSpe_max( final k=maxPumSpe) "Maximum pump speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant one(final k=1) "Constant one"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Divide div[nSen] "Normalized pressure difference"; Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep1( final nout=nSen) "Replicate real input"; Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch"; Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nPum) "Check if there is any pump enabled"; equation connect(conPID.y, maxLoo.u); connect(zer.y, pumSpe.x1); connect(pumSpe_min.y, pumSpe.f1); connect(one.y, pumSpe.x2); connect(pumSpe_max.y, pumSpe.f2); connect(maxLoo.y, pumSpe.u); connect(dpChiWat_remote, div.u1); connect(div.y, conPID.u_m); connect(one.y, reaRep1.u); connect(reaRep1.y, conPID.u_s); connect(pumSpe.y, swi.u1); connect(zer.y, swi.u3); connect(swi.y, yChiWatPumSpe); connect(mulOr.y, booRep.u); connect(mulOr.y, swi.u2); connect(uChiWatPum, mulOr.u); connect(dpChiWatSet_remote, div.u2); connect(booRep.y, conPID.uEna); end Speed_primary_remoteDp;