Collection of validation models
Information
This package contains validation models for the classes in
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.
Note that most validation models contain simple input data
which may not be realistic, but for which the correct
output can be obtained through an analytic solution.
The examples plot various outputs, which have been verified against these
solutions. These model outputs are stored as reference data and
used for continuous validation whenever models in the library change.
Package Content
| Name |
Description |
WaterLevel
|
Validation sequence of cooling tower make-up water control |
WithWSE
|
Validation sequence of controlling tower of a plant with waterside economizer |
WithoutWSE
|
Validation sequence of controlling tower of a plant without waterside economizer |
Validation sequence of cooling tower make-up water control
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.WaterLevel.
Modelica definition
Validation sequence of controlling tower of a plant with waterside economizer
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Controller.
It demonstrates the cooling tower control of a less coupled chiller plant that has
two chillers with waterside economizer.
-
At beginning, the water level is lower than the minimum thus the tower starts to
adding water (
yMakUp). When the water level becomes greater than the
maximum, it stops adding water at 1500 seconds.
-
The plant is enabled to waterside economizer mode at 540 seconds. The lead tower
cell becomes enabled when there is any condenser water pump enabled.
-
After 300 seconds (
chaTowCelIsoTim) at 840 seconds, it turns on the
leading cell.
-
The tower fan speed is controlled under the waterside economizer only mode. The
direct-acting PID controls the chilled water supply temperature at setpoint.
-
At 1440 seconds, the chiller 1 becomes enabled. Thus, the tower fan speed is then
controlled under the integrated operation mode. However, before switching to the
integrated operation mode, the fan hold its speed at the maximum. According to
the vector
towCelOnSet, which specifies number of cells at each plant
stage (staVec), two tower cell should be enabled. Thus, after chiller
1 being enabled at 1440 seconds, when the 300 seconds is passed
(chaTowCelIsoTim), the cell 2 become enabled at 1740 seconds.
-
Both cells run at the maximum speed till 2040 seconds, the fan speed is then
controlled under integrated mode.
Modelica definition
model WithWSE
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Controller
towCon(
nChi=2,
nTowCel=2,
nConWatPum=2,
have_WSE=true,
kWSE=0.5,
TiWSE=10)
;
protected
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta(
final width=0.15,
final period=3600)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap(
final height=8e5,
final duration=3600,
final offset=1e5) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup(
final amplitude=2,
final freqHz=1/1800,
final offset=273.15 + 29) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2(
final height=3,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3(
final height=3,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2(
final amplitude=2,
final freqHz=1/1800,
final offset=273.15 + 28) ;
Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(
final k=0.5)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2(
final k=0)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet(
final k=273.15 + 6.5)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1(
final width=0.4,
final period=3600) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiTwoSta(
final k=false)
;
Buildings.Controls.OBC.CDL.Logical.Or or3 ;
Buildings.Controls.OBC.CDL.Logical.Or or4 ;
Buildings.Controls.OBC.CDL.Logical.Not chiOneSta ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(
final k=0) ;
Buildings.Controls.OBC.CDL.Reals.Switch swi1 ;
Buildings.Controls.OBC.CDL.Reals.Switch chiOneLoa ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiTwoLoa(
final k=0)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin sin(
final amplitude=0.2*1e4,
final freqHz=1/1200,
final offset=1.1*1e4,
final startTime=180) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiSup(
final amplitude=0.5,
final freqHz=1/1800,
final offset=273.15 + 6.7) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1(
final height=0,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Add chiWatSupTem
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta ;
Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp(
final delayTime=30) ;
Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev(
final height=1.2,
final duration=3600,
final offset=0.5) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaSet(
final k=1) ;
Buildings.Controls.OBC.CDL.Logical.Not wseSta1 ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(
final k=false)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse conWatPum[2](
final width=
fill(0.1, 2),
final period=
fill(3600, 2))
;
Buildings.Controls.OBC.CDL.Logical.Not not2[2]
;
equation
connect(ram2.y, conWatSupTem.u2);
connect(conSup.y, conWatSupTem.u1);
connect(conRet2.y, conWatRetTem.u1);
connect(ram3.y, conWatRetTem.u2);
connect(chiSta1.y, chiOneSta.u);
connect(chiOneSta.y, swi1.u2);
connect(hpTowSpe1.y, swi1.u1);
connect(zer.y, swi1.u3);
connect(chiTwoLoa.y, chiOneLoa.u3);
connect(sin.y, chiOneLoa.u1);
connect(chiOneSta.y, chiOneLoa.u2);
connect(chiSup.y, chiWatSupTem.u1);
connect(ram1.y, chiWatSupTem.u2);
connect(chiOneSta.y, towCon.uChi[1]);
connect(chiTwoSta.y, towCon.uChi[2]);
connect(chiWatSupTem.y, towCon.TChiWatSup);
connect(chiWatSupSet.y, towCon.TChiWatSupSet);
connect(plaCap.y, towCon.reqPlaCap);
connect(swi1.y, towCon.uMaxSpeSet[1]);
connect(hpTowSpe2.y, towCon.uMaxSpeSet[2]);
connect(or3.y, towCon.uPla);
connect(conWatRetTem.y, towCon.TConWatRet);
connect(conWatSupTem.y, towCon.TConWatSup);
connect(chiOneSta.y, chiSta.u);
connect(chiSta.y, towCon.uChiSta);
connect(chiOneSta.y, towStaUp.u);
connect(watLev.y, towCon.watLev);
connect(towCon.yTowSta, pre1.u);
connect(pre1.y, towCon.uTowSta);
connect(towStaUp.y, towCon.uTowStaCha);
connect(chiStaSet.y, towCon.uChiStaSet);
connect(wseSta.y, wseSta1.u);
connect(wseSta1.y, towCon.uWse);
connect(con3.y, towCon.uEnaPla);
connect(chiOneSta.y, or4.u1);
connect(chiTwoSta.y, or4.u2);
connect(wseSta1.y, or3.u2);
connect(or4.y, or3.u1);
connect(chiOneLoa.y, towCon.uChiLoa);
connect(conWatPum.y, not2.u);
connect(not2.y, towCon.uConWatPum);
end WithWSE;
Validation sequence of controlling tower of a plant without waterside economizer
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Controller.
It demonstrates the cooling tower control of a less coupled chiller plant that has
two chillers without waterside economizer.
-
At beginning, the water level is lower than the minimum thus the tower starts
adding water (
yMakUp). When the water level becomes greater than the
maximum, it stops adding water at 1500 seconds.
-
The plant is enabled in chiller mode at 360 seconds. The chiller 1 becomes enabled
and the lead cooling tower cell becomes enabled at 372 seconds.
-
After 300 seconds (
chaTowCelIsoTim) at 660 seconds, it turns on the
leading cell.
-
The tower fan speed is controlled based on the control of condenser water return
temperature
(
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.ReturnWaterTemperature.Controller).
-
At 1560 seconds, the plant state setpoint changes from 1 to 2. According to
the vector
towCelOnSet, which specifies number of cells at each plant
stage (staVec), two tower cell should be enabled. After 300 seconds
(chaTowCelIsoTim) at 1860 seconds, it turns on the cell two.
Modelica definition
model WithoutWSE
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Controller
towCon(
nChi=2,
nPlaSta=3,
nTowCel=2,
nConWatPum=2,
have_WSE=false,
kWSE=0.5,
TiWSE=10,
staVec={0,1,2},
towCelOnSet={0,1,2})
;
protected
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap(
final height=8e5,
final duration=3600,
final offset=1e5) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup(
final amplitude=2,
final freqHz=1/1800,
final offset=273.15 + 29) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2(
final height=3,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3(
final height=3,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2(
final amplitude=2,
final freqHz=1/1800,
final offset=273.15 + 28) ;
Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(
final k=0.5)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet(
final k=273.15 + 6.5)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1(
final width=0.1,
final period=3600) ;
Buildings.Controls.OBC.CDL.Logical.Or or3 ;
Buildings.Controls.OBC.CDL.Logical.Not chiOneSta ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(
final k=0) ;
Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe1
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta ;
Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp(
final delayTime=30) ;
Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev(
final height=1.2,
final duration=3600,
final offset=0.5) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(
final k=false)
;
Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator conWatPumSta(
final nout=2) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta2(
final width=0.7,
final period=3600)
;
Buildings.Controls.OBC.CDL.Logical.Not chiTwoSta1
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta3
;
Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe2
;
Buildings.Controls.OBC.CDL.Integers.Add addInt ;
Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab(
table=[0,0; 360,1; 1560,2; 3600,2],
period=3600) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse conWatPum(
final width=0.1,
final period=3600) ;
Buildings.Controls.OBC.CDL.Logical.Not not2 ;
Buildings.Controls.OBC.CDL.Logical.And and2
;
equation
connect(ram2.y, conWatSupTem.u2);
connect(conSup.y, conWatSupTem.u1);
connect(conRet2.y, conWatRetTem.u1);
connect(ram3.y, conWatRetTem.u2);
connect(chiSta1.y, chiOneSta.u);
connect(chiOneSta.y, maxTowSpe1.u2);
connect(hpTowSpe1.y, maxTowSpe1.u1);
connect(zer.y, maxTowSpe1.u3);
connect(chiOneSta.y, towCon.uChi[1]);
connect(chiWatSupSet.y, towCon.TChiWatSupSet);
connect(plaCap.y, towCon.reqPlaCap);
connect(maxTowSpe1.y, towCon.uMaxSpeSet[1]);
connect(or3.y, towCon.uPla);
connect(conWatRetTem.y, towCon.TConWatRet);
connect(conWatSupTem.y, towCon.TConWatSup);
connect(chiOneSta.y, chiSta.u);
connect(chiOneSta.y, towStaUp.u);
connect(watLev.y, towCon.watLev);
connect(towCon.yTowSta, pre1.u);
connect(pre1.y, towCon.uTowSta);
connect(towStaUp.y, towCon.uTowStaCha);
connect(con3.y, towCon.uEnaPla);
connect(chiOneSta.y, or3.u1);
connect(chiSta2.y, chiTwoSta1.u);
connect(chiTwoSta1.y, towCon.uChi[2]);
connect(chiTwoSta1.y, or3.u2);
connect(chiTwoSta1.y, chiSta3.u);
connect(chiSta.y, addInt.u1);
connect(chiSta3.y, addInt.u2);
connect(addInt.y, towCon.uChiSta);
connect(intTimTab.y[1], towCon.uChiStaSet);
connect(chiTwoSta1.y, maxTowSpe2.u2);
connect(hpTowSpe1.y, maxTowSpe2.u1);
connect(zer.y, maxTowSpe2.u3);
connect(maxTowSpe2.y, towCon.uMaxSpeSet[2]);
connect(conWatPum.y, not2.u);
connect(not2.y, and2.u1);
connect(or3.y, and2.u2);
connect(and2.y, conWatPumSta.u);
connect(conWatPumSta.y, towCon.uConWatPum);
end WithoutWSE;