Collection of validation models
Information
This package contains validation models for the classes in
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.
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 |
ActiveAirFlow
|
Validate the model for calculating active airflow setpoint for dual-duct terminal unit |
Alarms
|
Validation of model that generates alarms |
DampersDualSensors
|
Validate model for controlling damper position of dual-duct unit |
DampersSingleSensors
|
Validate model for controlling damper position of dual-duct unit |
Overrides
|
Validation of model that overrides control |
SystemRequests
|
Validation of model that generates system requests |
Validate the model for calculating active airflow setpoint for dual-duct terminal unit
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.ActiveAirFlow
for calculating active minimum and maximum airflow setpoint used in dual-duct terminal unit.
Modelica definition
Validation of model that generates alarms
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.Alarms
for generating system alarms.
Modelica definition
model Alarms
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.Alarms
ala(
final have_duaSen=true,
final staPreMul=1,
final VCooMax_flow=1,
final VHeaMax_flow=0.9,
final floHys=0.01,
final damPosHys=0.01) ;
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.Alarms
ala1(
final have_duaSen=false,
final staPreMul=1,
final VCooMax_flow=1,
final VHeaMax_flow=0.9,
final floHys=0.01,
final damPosHys=0.01) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet(
final height=0.9,
final duration=7200,
final offset=0.1) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDisAir(
final duration=7200,
final offset=0.1,
final height=0.3) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos(
final duration=7200,
final height=0.7,
final offset=0.3) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse supCooFan(
final width=0.75,
final period=7500) ;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse colDammSta(
final width=0.5,
final period=7500) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp damPos1(
final duration=7200,
final height=0.7,
final offset=0.3) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse supHeaFan(
final width=0.75,
final period=7500)
;
Buildings.Controls.OBC.CDL.Conversions.BooleanToReal booToRea1
;
Buildings.Controls.OBC.CDL.Reals.Multiply mul1
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaDammSta(
final width=0.5,
final period=7500)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDisAir(
final duration=7200,
final offset=0.1,
final height=0.3) ;
Buildings.Controls.OBC.CDL.Integers.Sources.Pulse intPul(
amplitude=6,
width=0.1,
period=8500,
offset=1)
;
equation
connect(disAirSet.y, ala.VActSet_flow);
connect(booToRea.y, mul.u1);
connect(damPos.y, mul.u2);
connect(colDammSta.y, booToRea.u);
connect(booToRea1.y, mul1.u1);
connect(damPos1.y, mul1.u2);
connect(heaDammSta.y, booToRea1.u);
connect(supCooFan.y, ala.u1CooFan);
connect(mul.y, ala.uCooDam);
connect(supHeaFan.y, ala.u1HeaFan);
connect(mul1.y, ala.uHeaDam);
connect(cooDisAir.y, ala.VColDucDis_flow);
connect(heaDisAir.y, ala.VHotDucDis_flow);
connect(supCooFan.y, ala1.u1CooFan);
connect(mul.y, ala1.uCooDam);
connect(supHeaFan.y, ala1.u1HeaFan);
connect(mul1.y, ala1.uHeaDam);
connect(disAirSet.y, ala1.VActSet_flow);
connect(cooDisAir.y, ala1.VDis_flow);
connect(intPul.y, ala.uOpeMod);
connect(intPul.y, ala1.uOpeMod);
end Alarms;
Validate model for controlling damper position of dual-duct unit
Information
This example validates
BBuildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.DampersDualSensors
for damper control of dual-duct unit.
Modelica definition
model DampersDualSensors
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.DampersDualSensors
dam1(
final VCooMax_flow=0.08,
final VHeaMax_flow=0.06,
final kDam=1,
final samplePeriod=120) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo(
final height=-1,
final duration=3600,
final offset=1,
final startTime=900) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TZon(
final k=273.15 + 22)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TCooSup(
final k=273.15 + 13)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow(
final k=0.01)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow(
final k=0.075)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin VColDuc(
final offset=0.015,
final amplitude=0.002,
final freqHz=1/3600)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse cooAhu(
final width=0.75,
final period=7200)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant THeaSup(
final k=273.15 + 25)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea(
final height=1,
final duration=3600,
final offset=0,
final startTime=5500)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow(
final k=0.07)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaAhu(
final width=0.75,
final period=7200,
final shift=5000)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin VHotDuc(
final offset=0.015,
final amplitude=0.002,
final freqHz=1/3600)
;
equation
connect(VActMin_flow.y, dam1.VActMin_flow);
connect(TZon.y, dam1.TZon);
connect(VActCooMax_flow.y, dam1.VActCooMax_flow);
connect(uCoo.y, dam1.uCoo);
connect(TCooSup.y, dam1.TColSup);
connect(cooAhu.y, dam1.u1CooAHU);
connect(THeaSup.y, dam1.THotSup);
connect(uHea.y, dam1.uHea);
connect(VActHeaMax_flow.y, dam1.VActHeaMax_flow);
connect(heaAhu.y, dam1.u1HeaAHU);
connect(VColDuc.y, dam1.VColDucDis_flow);
connect(VHotDuc.y, dam1.VHotDucDis_flow);
end DampersDualSensors;
Validate model for controlling damper position of dual-duct unit
Information
This example validates
BBuildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.DampersSingleSensors
for damper control of dual-duct unit.
Modelica definition
model DampersSingleSensors
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.DampersSingleSensors
dam1(
final VCooMax_flow=0.08,
final VHeaMax_flow=0.06,
final kDam=1,
final samplePeriod=120) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo(
final height=-1,
final duration=3600,
final offset=1,
final startTime=900) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActMin_flow(
final k=0.01)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActCooMax_flow(
final k=0.075)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin VDis(
final offset=0.015,
final amplitude=0.002,
final freqHz=1/3600) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse cooAhu(
final width=0.75,
final period=7200)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea(
final height=1,
final duration=3600,
final offset=0,
final startTime=5500)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant VActHeaMax_flow(
final k=0.07)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse heaAhu(
final width=0.75,
final period=7200,
final shift=5000)
;
equation
connect(VActMin_flow.y, dam1.VActMin_flow);
connect(VActCooMax_flow.y, dam1.VActCooMax_flow);
connect(uCoo.y, dam1.uCoo);
connect(cooAhu.y, dam1.u1CooAHU);
connect(uHea.y, dam1.uHea);
connect(VActHeaMax_flow.y, dam1.VActHeaMax_flow);
connect(heaAhu.y, dam1.u1HeaAHU);
connect(VDis.y, dam1.VDis_flow);
end DampersSingleSensors;
Validation of model that overrides control
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.Overrides
for overrideing controls.
Modelica definition
model Overrides
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.Overrides
ove(
final VMin_flow=0.1,
final VCooMax_flow=0.9,
final VHeaMax_flow=0.8) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp disAirSet(
final height=0.9,
final duration=7200,
final offset=0.1) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp cooDamPos(
final duration=3600,
final height=0.5,
final offset=0.5) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveFlo(
final height=3,
final duration=2000,
startTime=1000) ;
Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt2
;
Buildings.Controls.OBC.CDL.Reals.Round round2(
final n=0)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam(
final height=2,
final duration=2000,
startTime=1000) ;
Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt1
;
Buildings.Controls.OBC.CDL.Reals.Round round1(
final n=0)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp heaDamPos(
final duration=3600,
final height=0.5,
final offset=0.5) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp oveDam1(
final height=2,
final duration=2000,
startTime=1000) ;
Buildings.Controls.OBC.CDL.Conversions.RealToInteger reaToInt3
;
Buildings.Controls.OBC.CDL.Reals.Round round3(
final n=0)
;
equation
connect(oveDam.y, round1.u);
connect(round1.y, reaToInt1.u);
connect(oveFlo.y, round2.u);
connect(round2.y, reaToInt2.u);
connect(reaToInt2.y, ove.oveFloSet);
connect(disAirSet.y, ove.VActSet_flow);
connect(reaToInt1.y, ove.oveCooDamPos);
connect(cooDamPos.y, ove.uCooDam);
connect(oveDam1.y, round3.u);
connect(round3.y,reaToInt3. u);
connect(reaToInt3.y, ove.oveHeaDamPos);
connect(heaDamPos.y, ove.uHeaDam);
end Overrides;
Validation of model that generates system requests
Information
This example validates
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.SystemRequests
for generating system requests.
Modelica definition
model SystemRequests
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.DualDuctSnapActing.Subsequences.SystemRequests
sysReq(
final have_duaSen=false,
final floHys=0.01,
final looHys=0.01,
final damPosHys=0.01) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine(
final freqHz=1/7200,
final offset=296.15)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonCooSet(
final samplePeriod=1800) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin TZon(
final freqHz=1/7200,
final amplitude=2,
final offset=299.15)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uCoo(
final height=-1,
final duration=2000,
final offset=1,
final startTime=1000)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirSet(
final height=0.9,
final duration=7200,
final offset=0.1) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDucAirRate(
final duration=7200,
final offset=0.1,
final height=0.3) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp colDamPos(
final duration=3000,
final height=-0.7,
final offset=0.7) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul(
final width=0.1,
final period=7200)
;
Buildings.Controls.OBC.CDL.Logical.Not not1 ;
Buildings.Controls.OBC.CDL.Reals.Sources.Sin sine1(
final freqHz=1/7200,
final offset=293.15)
;
Buildings.Controls.OBC.CDL.Discrete.UnitDelay TZonHeaSet(
final samplePeriod=1800)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Pulse booPul1(
final width=0.1,
final period=7200)
;
Buildings.Controls.OBC.CDL.Logical.Not not2 ;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp uHea(
final height=0.9,
final duration=3600,
final startTime=3600)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirSet(
final height=0.9,
final duration=7200,
final offset=0.1)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDucAirRate(
final duration=7200,
final offset=0.1,
final height=0.3)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Ramp hotDamPos(
final duration=3600,
final height=0.7,
startTime=3600)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr(
final t=0.01)
;
Buildings.Controls.OBC.CDL.Reals.GreaterThreshold greThr1(
final t=0.01)
;
equation
connect(sine.y, TZonCooSet.u);
connect(TZonCooSet.y, sysReq.TCooSet);
connect(TZon.y, sysReq.TZon);
connect(uCoo.y, sysReq.uCoo);
connect(booPul.y, not1.u);
connect(not1.y, sysReq.uAftSupCoo);
connect(colDucAirSet.y, sysReq.VColDuc_flow_Set);
connect(colDucAirRate.y, sysReq.VColDucDis_flow);
connect(colDamPos.y, sysReq.uCooDam);
connect(sine1.y, TZonHeaSet.u);
connect(booPul1.y, not2.u);
connect(not2.y, sysReq.uAftSupHea);
connect(TZonHeaSet.y, sysReq.THeaSet);
connect(uHea.y, sysReq.uHea);
connect(hotDucAirSet.y, sysReq.VHotDuc_flow_Set);
connect(hotDucAirRate.y, sysReq.VHotDucDis_flow);
connect(hotDamPos.y, sysReq.uHeaDam);
connect(colDamPos.y, greThr.u);
connect(greThr.y, sysReq.u1CooDam);
connect(hotDamPos.y, greThr1.u);
connect(greThr1.y, sysReq.u1HeaDam);
end SystemRequests;