Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation

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
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WaterLevel WaterLevel Validation sequence of cooling tower make-up water control
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithWSE WithWSE Validation sequence of controlling tower of a plant with waterside economizer
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithoutWSE WithoutWSE Validation sequence of controlling tower of a plant without waterside economizer

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WaterLevel Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WaterLevel

Validation sequence of cooling tower make-up water control

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WaterLevel

Information

This example validates Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.WaterLevel.

Modelica definition

model WaterLevel "Validation sequence of cooling tower make-up water control" Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.WaterLevel makUpWat( final watLevMin=0.7, final watLevMax=1.2) "Makeup water level control"; protected Buildings.Controls.OBC.CDL.Reals.Sources.Sin watLev( final amplitude=1, final freqHz=1/7200, final offset=0.3) "Measured water level"; equation connect(watLev.y, makUpWat.watLev); end WaterLevel;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithWSE Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithWSE

Validation sequence of controlling tower of a plant with waterside economizer

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithWSE

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.

Modelica definition

model WithWSE "Validation sequence of controlling tower of a plant with waterside economizer" Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Controller towCon( nChi=2, nTowCel=2, nConWatPum=2, have_WSE=true, kWSE=0.5, TiWSE=10) "Cooling tower controller"; protected Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta( final width=0.15, final period=3600) "Waterside economizer enabling status"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( final height=8e5, final duration=3600, final offset=1e5) "Real operating chiller plant capacity"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( final amplitude=2, final freqHz=1/1800, final offset=273.15 + 29) "Condenser water supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( final height=3, final duration=3600, final startTime=1500) "Ramp"; Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem "Condenser water supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( final height=3, final duration=3600, final startTime=1500) "Ramp"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( final amplitude=2, final freqHz=1/1800, final offset=273.15 + 28) "Condenser water return temperature"; Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem "Condenser water return temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(final k=0.5) "Head pressure control maximum tower speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe2(final k=0) "Head pressure control maximum tower speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( final k=273.15 + 6.5) "Chilled water supply setpoint"; Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1( final width=0.4, final period=3600) "Chiller one enabling status"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiTwoSta(final k=false) "Chiller two enabling status"; Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or"; Buildings.Controls.OBC.CDL.Logical.Or or4 "Logical or"; Buildings.Controls.OBC.CDL.Logical.Not chiOneSta "Chiller one status"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Switch swi1 "Logical switch"; Buildings.Controls.OBC.CDL.Reals.Switch chiOneLoa "Chiller one load"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiTwoLoa(final k=0) "Chiller two load"; 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) "Chiller load"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin chiSup( final amplitude=0.5, final freqHz=1/1800, final offset=273.15 + 6.7) "Chilled water supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1( final height=0, final duration=3600, final startTime=1500) "Ramp"; Buildings.Controls.OBC.CDL.Reals.Add chiWatSupTem "Chilled water supply temperature"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta "Chiller stage "; Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp( final delayTime=30) "Cooling tower stage up"; Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Break algebraic"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev( final height=1.2, final duration=3600, final offset=0.5) "Water level in cooling tower"; Buildings.Controls.OBC.CDL.Integers.Sources.Constant chiStaSet( final k=1) "Chiller stage setpoint"; Buildings.Controls.OBC.CDL.Logical.Not wseSta1 "Water side economizer status"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) "Constant false"; Buildings.Controls.OBC.CDL.Logical.Sources.Pulse conWatPum[2]( final width=fill(0.1, 2), final period=fill(3600, 2)) "Condenser water pump status"; Buildings.Controls.OBC.CDL.Logical.Not not2[2] "Logical not"; 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;

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithoutWSE Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithoutWSE

Validation sequence of controlling tower of a plant without waterside economizer

Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.Validation.WithoutWSE

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.

Modelica definition

model WithoutWSE "Validation sequence of controlling tower of a plant without waterside economizer" 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}) "Cooling tower controller"; protected Buildings.Controls.OBC.CDL.Reals.Sources.Ramp plaCap( final height=8e5, final duration=3600, final offset=1e5) "Real operating chiller plant capacity"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin conSup( final amplitude=2, final freqHz=1/1800, final offset=273.15 + 29) "Condenser water supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram2( final height=3, final duration=3600, final startTime=1500) "Ramp"; Buildings.Controls.OBC.CDL.Reals.Add conWatSupTem "Condenser water supply temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram3( final height=3, final duration=3600, final startTime=1500) "Ramp"; Buildings.Controls.OBC.CDL.Reals.Sources.Sin conRet2( final amplitude=2, final freqHz=1/1800, final offset=273.15 + 28) "Condenser water return temperature"; Buildings.Controls.OBC.CDL.Reals.Add conWatRetTem "Condenser water return temperature"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant hpTowSpe1(final k=0.5) "Head pressure control maximum tower speed"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant chiWatSupSet( final k=273.15 + 6.5) "Chilled water supply setpoint"; Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta1(final width=0.1, final period=3600) "Chiller one enabling status"; Buildings.Controls.OBC.CDL.Logical.Or or3 "Logical or"; Buildings.Controls.OBC.CDL.Logical.Not chiOneSta "Chiller one status"; Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer( final k=0) "Constant zero"; Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe1 "Max tower speed from chiller 1 head pressure control"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta "Chiller stage "; Buildings.Controls.OBC.CDL.Logical.TrueDelay towStaUp( final delayTime=30) "Cooling tower stage up"; Buildings.Controls.OBC.CDL.Logical.Pre pre1[2] "Break algebraic"; Buildings.Controls.OBC.CDL.Reals.Sources.Ramp watLev( final height=1.2, final duration=3600, final offset=0.5) "Water level in cooling tower"; Buildings.Controls.OBC.CDL.Logical.Sources.Constant con3(final k=false) "Constant false"; Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator conWatPumSta( final nout=2) "Condenser water pump status"; Buildings.Controls.OBC.CDL.Logical.Sources.Pulse chiSta2( final width=0.7, final period=3600) "Chiller one enabling status"; Buildings.Controls.OBC.CDL.Logical.Not chiTwoSta1 "Chiller two status"; Buildings.Controls.OBC.CDL.Conversions.BooleanToInteger chiSta3 "Chiller stage "; Buildings.Controls.OBC.CDL.Reals.Switch maxTowSpe2 "Max tower speed from chiller 2 head pressure control"; Buildings.Controls.OBC.CDL.Integers.Add addInt "Chiller stage"; Buildings.Controls.OBC.CDL.Integers.Sources.TimeTable intTimTab( table=[0,0; 360,1; 1560,2; 3600,2], period=3600) "Chiller stage setpoint"; Buildings.Controls.OBC.CDL.Logical.Sources.Pulse conWatPum( final width=0.1, final period=3600) "Condenser water pump status"; Buildings.Controls.OBC.CDL.Logical.Not not2 "Logical not"; Buildings.Controls.OBC.CDL.Logical.And and2 "Logical and"; 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;