Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE
Package of sequences for control tower fan speed when waterside economizer is enabled
Information
This package contains sequences for cooling tower fan speed control when the waterside economizer is enabled. The implementation is based on section 5.20.12.2, item c in ASHRAE Guideline 36-2021.
Package Content
| Name | Description |
|---|---|
| Tower fan speed control when waterside economizer is enabled | |
| Package of subsequences for tower fan speed control with waterside economizer being enabled | |
| Collection of validation models |
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Controller
Tower fan speed control when waterside economizer is enabled
Information
Block that outputs cooling tower fan speed ySpeSet when waterside
economizer is enabled. This is implemented according to ASHRAE Guideline 36-2021,
section 5.20.12.2, item c. It includes two subsequences:
- When the waterside economizer is enabled and chillers are running, see Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Subsequences.IntegratedOperation for a description.
- When the waterside economizer is running alone, see Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Subsequences.WSEOperation for a description.
Parameters
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nChi | 2 | Total number of chillers |
| Real | fanSpeMin | 0.1 | Minimum tower fan speed [1] |
| Integrated operation | |||
| Real | chiMinCap[nChi] | {1e4,1e4} | Minimum cyclining load below which chiller will begin cycling [W] |
| Controller | |||
| SimpleController | intOpeCon | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | kIntOpe | 1 | Gain of controller |
| Real | TiIntOpe | 0.5 | Time constant of integrator block [s] |
| Real | TdIntOpe | 0.1 | Time constant of derivative block [s] |
| WSE-only | |||
| Real | fanSpeChe | 0.005 | Lower threshold value to check fan speed |
| Controller | |||
| SimpleController | chiWatCon | Buildings.Controls.OBC.CDL.T... | Type of controller |
| Real | kWSE | 1 | Gain of controller |
| Real | TiWSE | 0.5 | Time constant of integrator block [s] |
| Real | TdWSE | 0.1 | Time constant of derivative block [s] |
Connectors
| Type | Name | Description |
|---|---|---|
| input RealInput | uChiLoa | Current cooling load [W] |
| input BooleanInput | uChi[nChi] | Chiller enabling status: true=ON |
| input BooleanInput | uWse | Waterside economizer enabling status: true=ON |
| input RealInput | TChiWatSup | Chilled water supply temperature [K] |
| input RealInput | TChiWatSupSet | Chilled water supply temperature setpoint [K] |
| output RealOutput | ySpeSet | Tower fan speed setpoint when WSE is enabled and there is any chiller running [1] |
Modelica definition
block Controller "Tower fan speed control when waterside economizer is enabled"
parameter Integer nChi=2 "Total number of chillers";
parameter Real fanSpeMin(
final unit="1")=0.1 "Minimum tower fan speed";
parameter Real chiMinCap[nChi](
each final unit="W",
final quantity=fill("HeatFlowRate", nChi))={1e4,1e4}
"Minimum cyclining load below which chiller will begin cycling";
parameter Buildings.Controls.OBC.CDL.Types.SimpleController intOpeCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI
"Type of controller";
parameter Real kIntOpe=1 "Gain of controller";
parameter Real TiIntOpe(final quantity="Time", final unit="s")=0.5
"Time constant of integrator block";
parameter Real TdIntOpe(final quantity="Time", final unit="s")=0.1
"Time constant of derivative block";
parameter Real fanSpeChe=0.005 "Lower threshold value to check fan speed";
parameter Buildings.Controls.OBC.CDL.Types.SimpleController chiWatCon=Buildings.Controls.OBC.CDL.Types.SimpleController.PI
"Type of controller";
parameter Real kWSE=1 "Gain of controller";
parameter Real TiWSE(final quantity="Time", final unit="s")=0.5
"Time constant of integrator block";
parameter Real TdWSE(final quantity="Time", final unit="s")=0.1
"Time constant of derivative block";
Buildings.Controls.OBC.CDL.Interfaces.RealInput uChiLoa(
final unit="W",
final quantity="HeatFlowRate")
"Current cooling load";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uChi[nChi]
"Chiller enabling status: true=ON";
Buildings.Controls.OBC.CDL.Interfaces.BooleanInput uWse
"Waterside economizer enabling status: true=ON";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSup(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")
"Chilled water supply temperature";
Buildings.Controls.OBC.CDL.Interfaces.RealInput TChiWatSupSet(
final unit="K",
displayUnit="degC",
final quantity="ThermodynamicTemperature")
"Chilled water supply temperature setpoint";
Buildings.Controls.OBC.CDL.Interfaces.RealOutput ySpeSet(
final min=0,
final max=1,
final unit="1")
"Tower fan speed setpoint when WSE is enabled and there is any chiller running";
protected
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Subsequences.IntegratedOperation
intOpe(
final nChi=nChi,
final chiMinCap=chiMinCap,
final fanSpeMin=fanSpeMin,
final conTyp=intOpeCon,
final k=kIntOpe,
final Ti=TiIntOpe,
final Td=TdIntOpe)
"Tower fan speed when the waterside economizer is enabled and the chillers are running";
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.EnabledWSE.Subsequences.WSEOperation
wseOpe(
final nChi=nChi,
final fanSpeMin=fanSpeMin,
final fanSpeChe=fanSpeChe,
final chiWatCon=chiWatCon,
final k=kWSE,
final Ti=TiWSE,
final Td=TdWSE)
"Tower fan speed when the waterside economizer is running alone";
Buildings.Controls.OBC.CDL.Logical.MultiOr mulOr(final nin=nChi) "Logical or";
Buildings.Controls.OBC.CDL.Reals.Switch swi "Logical switch";
Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch";
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(final k=0)
"Zero constant";
equation
connect(intOpe.uChi, uChi);
connect(intOpe.uChiLoa, uChiLoa);
connect(wseOpe.TChiWatSup, TChiWatSup);
connect(wseOpe.TChiWatSupSet, TChiWatSupSet);
connect(mulOr.y, swi.u2);
connect(intOpe.ySpeSet, swi.u1);
connect(wseOpe.ySpeSet, swi.u3);
connect(uWse, swi1.u2);
connect(swi.y, swi1.u1);
connect(zer.y, swi1.u3);
connect(swi1.y,ySpeSet);
connect(uChi, mulOr.u);
connect(uWse, intOpe.uWse);
connect(swi1.y, wseOpe.uFanSpe);
connect(uChi, wseOpe.uChi);
connect(uWse, wseOpe.uWse);
end Controller;