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.
| Name |
Description |
Controller
|
Validation sequence of controlling tower fan speed |
It shows the calculations of the fan speed setpoint for the three different plants,
including the close coupled plants that have waterside economizer (cloCouWitWse),
the less coupled plants that have waterside economizer (lesCouWitWse),
and the close coupled plants that have no waterside economizer (cloCouNoWse).
model Controller
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller
cloCouWitWse
;
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller
lesCouWitWse(
final closeCoupledPlant=false)
;
Buildings.Controls.OBC.ASHRAE.G36.Plants.Chillers.Towers.FanSpeed.Controller
cloCouNoWse(
final have_WSE=false)
;
protected
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse wseSta(
final width=0.2,
final period=3600,
shift=-3000)
;
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 add1 ;
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 add3 ;
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.2,
final period=3600) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant chiSta2(
final k=false)
;
Buildings.Controls.OBC.CDL.Logical.Or or3 ;
Buildings.Controls.OBC.CDL.Logical.Or or4 ;
Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(
final nout=4) ;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant zer(
final k=0) ;
Buildings.Controls.OBC.CDL.Reals.Switch swi1 ;
Buildings.Controls.OBC.CDL.Reals.Switch swi2 ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant con1(
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 + 7.1) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp ram1(
final height=3,
final duration=3600,
final startTime=1500) ;
Buildings.Controls.OBC.CDL.Reals.Add add2 ;
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,add1. u2);
connect(conSup.y,add1. u1);
connect(conRet2.y, add3.u1);
connect(ram3.y, add3.u2);
connect(or3.y, booRep.u);
connect(chiSta1.y, not1.u);
connect(not1.y, swi1.u2);
connect(hpTowSpe1.y, swi1.u1);
connect(zer.y, swi1.u3);
connect(con1.y,swi2. u3);
connect(sin.y,swi2. u1);
connect(not1.y, swi2.u2);
connect(not1.y, cloCouWitWse.uChi[1]);
connect(chiSta2.y, cloCouWitWse.uChi[2]);
connect(wseSta.y, cloCouWitWse.uWse);
connect(chiSup.y,add2. u1);
connect(ram1.y,add2. u2);
connect(add2.y, cloCouWitWse.TChiWatSup);
connect(chiWatSupSet.y, cloCouWitWse.TChiWatSupSet);
connect(plaCap.y, cloCouWitWse.reqPlaCap);
connect(swi1.y, cloCouWitWse.uMaxSpeSet[1]);
connect(hpTowSpe2.y, cloCouWitWse.uMaxSpeSet[2]);
connect(booRep.y, cloCouWitWse.uTow);
connect(or3.y, cloCouWitWse.uPla);
connect(add3.y, cloCouWitWse.TConWatRet);
connect(not1.y, lesCouWitWse.uChi[1]);
connect(chiSta2.y, lesCouWitWse.uChi[2]);
connect(wseSta.y, lesCouWitWse.uWse);
connect(add2.y, lesCouWitWse.TChiWatSup);
connect(chiWatSupSet.y, lesCouWitWse.TChiWatSupSet);
connect(plaCap.y, lesCouWitWse.reqPlaCap);
connect(swi1.y, lesCouWitWse.uMaxSpeSet[1]);
connect(hpTowSpe2.y, lesCouWitWse.uMaxSpeSet[2]);
connect(booRep.y, lesCouWitWse.uTow);
connect(or3.y, lesCouWitWse.uPla);
connect(add3.y, lesCouWitWse.TConWatRet);
connect(add1.y, lesCouWitWse.TConWatSup);
connect(not1.y, cloCouNoWse.uChi[1]);
connect(chiSta2.y, cloCouNoWse.uChi[2]);
connect(chiWatSupSet.y, cloCouNoWse.TChiWatSupSet);
connect(plaCap.y, cloCouNoWse.reqPlaCap);
connect(swi1.y, cloCouNoWse.uMaxSpeSet[1]);
connect(hpTowSpe2.y, cloCouNoWse.uMaxSpeSet[2]);
connect(booRep.y, cloCouNoWse.uTow);
connect(or3.y, cloCouNoWse.uPla);
connect(add3.y, cloCouNoWse.TConWatRet);
connect(not1.y, or4.u1);
connect(chiSta2.y, or4.u2);
connect(wseSta.y, or3.u2);
connect(or4.y, or3.u1);
connect(swi2.y, cloCouWitWse.uChiLoa);
connect(swi2.y, lesCouWitWse.uChiLoa);
connect(conWatPum.y, not2.u);
connect(not2.y, cloCouWitWse.uConWatPum);
connect(not2.y, lesCouWitWse.uConWatPum);
connect(not2.y, cloCouNoWse.uConWatPum);
end Controller;