Package with base classes for Buildings.Examples.VAVReheat
Information
This package contains base classes that are used to construct the models in
Buildings.Examples.VAVReheat.
Extends from Modelica.Icons.BasesPackage (Icon for packages containing base classes).
Package Content
Name |
Description |
Floor
|
Model of a floor of the building |
FreezeStat
|
Freeze thermostat with timed lockout |
PartialFloor
|
Interface for a model of a floor of a building |
PartialOpenLoop
|
Partial model of variable air volume flow system with terminal reheat and five thermal zones |
RoomLeakage
|
Room leakage model |
VAVReheatBox
|
Supply box of a VAV system with a hot water reheat coil |
Model of a floor of the building
Information
Model of a floor that consists
of five thermal zones that are representative of one floor of the
new construction medium office building for Chicago, IL,
as described in the set of DOE Commercial Building Benchmarks.
There are four perimeter zones and one core zone.
The envelope thermal properties meet ASHRAE Standard 90.1-2004.
Extends from Buildings.Examples.VAVReheat.BaseClasses.PartialFloor (Interface for a model of a floor of a building).
Parameters
Type | Name | Default | Description |
replaceable package Medium | PartialMedium | Medium model for air |
Boolean | use_windPressure | true | Set to true to enable wind pressure |
Real | kIntNor | 1 | Gain factor to scale internal heat gain in north zone |
Volume | VRooCor | cor.AFlo*hRoo | Room volume corridor [m3] |
Volume | VRooSou | sou.AFlo*hRoo | Room volume south [m3] |
Volume | VRooNor | nor.AFlo*hRoo | Room volume north [m3] |
Volume | VRooEas | eas.AFlo*hRoo | Room volume east [m3] |
Volume | VRooWes | wes.AFlo*hRoo | Room volume west [m3] |
Area | AFloCor | 2698/hRoo | Floor area corridor [m2] |
Area | AFloSou | 568.77/hRoo | Floor area south [m2] |
Area | AFloNor | 568.77/hRoo | Floor area north [m2] |
Area | AFloEas | 360.0785/hRoo | Floor area east [m2] |
Area | AFloWes | 360.0785/hRoo | Floor area west [m2] |
InteriorConvection | intConMod | Buildings.HeatTransfer.Types... | Convective heat transfer model for room-facing surfaces of opaque constructions |
Angle | lat | | Latitude [rad] |
Real | winWalRat | 0.33 | Window to wall ratio for exterior walls |
Length | hWin | 1.5 | Height of windows [m] |
Plywood | matFur | matFur(x=0.15, nStaRef=5) | Material for furniture |
Carpet | matCar | | Carpet |
Concrete | matCon | matCon(x=0.1, k=1.311, c=836... | Concrete |
Plywood | matWoo | matWoo(x=0.01, k=0.11, d=544... | Wood for exterior construction |
Generic | matIns | matIns(x=0.087, k=0.049, c=8... | Steelframe construction with insulation |
GypsumBoard | matGyp | matGyp(x=0.0127, k=0.16, c=8... | Gypsum board |
GypsumBoard | matGyp2 | matGyp2(x=0.025, k=0.16, c=8... | Gypsum board |
Generic | conExtWal | conExtWal(final nLay=3, mate... | Exterior construction |
Generic | conIntWal | conIntWal(final nLay=1, mate... | Interior wall construction |
Generic | conFlo | conFlo(final nLay=1, materia... | Floor construction (opa_a is carpet) |
Generic | conFur | conFur(final nLay=1, materia... | Construction for internal mass of furniture |
Plywood | matCarTra | matCarTra(k=0.11, d=544, nSt... | Wood for floor |
DoubleClearAir13Clear | glaSys | glaSys(UFra=2, shade=Buildin... | Data record for the glazing system |
Experimental (may be changed in future releases) |
Boolean | sampleModel | false | Set to true to time-sample the model, which can give shorter simulation time if there is already time sampling in the system model |
Connectors
Modelica definition
model Floor
extends Buildings.Examples.VAVReheat.BaseClasses.PartialFloor(
final VRooCor=cor.AFlo * hRoo,
final VRooSou=sou.AFlo * hRoo,
final VRooNor=nor.AFlo * hRoo,
final VRooEas=eas.AFlo * hRoo,
final VRooWes=wes.AFlo * hRoo,
AFloCor = 2698/hRoo,
AFloSou = 568.77/hRoo,
AFloNor = 568.77/hRoo,
AFloEas = 360.0785/hRoo,
AFloWes = 360.0785/hRoo);
parameter HeatTransfer.Types.InteriorConvection intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature
;
parameter Modelica.SIunits.Angle lat ;
parameter Real winWalRat(
min=0.01,
max=0.99) = 0.33 ;
parameter Modelica.SIunits.Length hWin = 1.5 ;
parameter HeatTransfer.Data.Solids.Plywood matFur(x=0.15, nStaRef=5)
;
parameter HeatTransfer.Data.Resistances.Carpet matCar ;
parameter HeatTransfer.Data.Solids.Concrete matCon(
x=0.1,
k=1.311,
c=836,
nStaRef=5) ;
parameter HeatTransfer.Data.Solids.Plywood matWoo(
x=0.01,
k=0.11,
d=544,
nStaRef=1) ;
parameter HeatTransfer.Data.Solids.Generic matIns(
x=0.087,
k=0.049,
c=836.8,
d=265,
nStaRef=5) ;
parameter HeatTransfer.Data.Solids.GypsumBoard matGyp(
x=0.0127,
k=0.16,
c=830,
d=784,
nStaRef=2) ;
parameter HeatTransfer.Data.Solids.GypsumBoard matGyp2(
x=0.025,
k=0.16,
c=830,
d=784,
nStaRef=2) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conExtWal(
final nLay=3,
material={matWoo,matIns,matGyp}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conIntWal(
final nLay=1,
material={matGyp2}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conFlo(
final nLay=1, material={
matCon}) ;
parameter HeatTransfer.Data.OpaqueConstructions.Generic conFur(
final nLay=1, material={
matFur}) ;
parameter HeatTransfer.Data.Solids.Plywood matCarTra(
k=0.11,
d=544,
nStaRef=1,
x=0.215/0.11) ;
parameter HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys(
UFra=2,
shade=
Buildings.HeatTransfer.Data.Shades.Gray(),
haveInteriorShade=false,
haveExteriorShade=false) ;
constant Modelica.SIunits.Height hRoo=2.74 ;
parameter Boolean sampleModel = false
;
Buildings.ThermalZones.Detailed.MixedAir sou(
redeclare package Medium =
Medium,
lat=lat,
AFlo=AFloSou,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={49.91*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*49.91*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.S}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={AFloSou,414.68},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=3,
datConBou(
layers={conIntWal,conIntWal,conIntWal},
A={6.47,40.76,6.47}*hRoo,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nSurBou=0,
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir eas(
redeclare package Medium =
Medium,
lat=lat,
AFlo=AFloEas,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={33.27*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*33.27*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.E}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={AFloEas,262.52},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=1,
datConBou(
layers={conIntWal},
A={24.13}*hRoo,
til={Buildings.Types.Tilt.Wall}),
nSurBou=2,
surBou(
each A=6.47*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir nor(
redeclare package Medium =
Medium,
lat=lat,
AFlo=AFloNor,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={49.91*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*49.91*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.N}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={AFloNor,414.68},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=3,
datConBou(
layers={conIntWal,conIntWal,conIntWal},
A={6.47,40.76,6.47}*hRoo,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nSurBou=0,
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir wes(
redeclare package Medium =
Medium,
lat=lat,
AFlo=AFloWes,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={33.27*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*33.27*hRoo},
each hWin=hWin,
fFra={0.1},
til={Buildings.Types.Tilt.Wall},
azi={Buildings.Types.Azimuth.W}),
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={AFloWes,262.52},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=1,
datConBou(
layers={conIntWal},
A={24.13}*hRoo,
til={Buildings.Types.Tilt.Wall}),
nSurBou=2,
surBou(
each A=6.47*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=5,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Buildings.ThermalZones.Detailed.MixedAir cor(
redeclare package Medium =
Medium,
lat=lat,
AFlo=AFloCor,
hRoo=hRoo,
nConExt=0,
nConExtWin=0,
nConPar=2,
datConPar(
layers={conFlo,conFur},
A={AFloCor,1967.01},
til={Buildings.Types.Tilt.Floor,Buildings.Types.Tilt.Wall}),
nConBou=0,
nSurBou=4,
surBou(
A={40.76,24.13,40.76,24.13}*hRoo,
each absIR=0.9,
each absSol=0.9,
til={Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall, Buildings.Types.Tilt.Wall}),
nPorts=11,
intConMod=intConMod,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
final sampleModel=sampleModel) ;
Modelica.Blocks.Math.MatrixGain gai(K=20*[0.4; 0.4; 0.2])
;
Modelica.Blocks.Sources.CombiTimeTable intGaiFra(
table=[0,0.05; 8,0.05; 9,0.9; 12,0.9; 12,0.8; 13,0.8; 13,1; 17,1; 19,0.1;
24,0.05],
timeScale=3600,
extrapolation=Modelica.Blocks.Types.Extrapolation.Periodic)
;
Modelica.Blocks.Math.Gain gaiIntNor[3](
each k=kIntNor)
;
Modelica.Blocks.Math.Gain gaiIntSou[3](
each k=2 - kIntNor)
;
Modelica.Blocks.Sources.Constant uSha(k=0)
;
Modelica.Blocks.Routing.Replicator replicator(nout=1);
equation
connect(sou.surf_conBou[1], wes.surf_surBou[2]);
connect(sou.surf_conBou[2], cor.surf_surBou[1]);
connect(sou.surf_conBou[3], eas.surf_surBou[1]);
connect(eas.surf_conBou[1], cor.surf_surBou[2]);
connect(eas.surf_surBou[2], nor.surf_conBou[1]);
connect(nor.surf_conBou[2], cor.surf_surBou[3]);
connect(nor.surf_conBou[3], wes.surf_surBou[1]);
connect(wes.surf_conBou[1], cor.surf_surBou[4]);
connect(replicator.y, nor.uSha);
connect(replicator.y, wes.uSha);
connect(replicator.y, eas.uSha);
connect(replicator.y, sou.uSha);
connect(replicator.y, cor.uSha);
connect(gai.y, cor.qGai_flow);
connect(gai.y, eas.qGai_flow);
connect(gai.y, wes.qGai_flow);
connect(sou.weaBus, weaBus);
connect(eas.weaBus, weaBus);
connect(nor.weaBus, weaBus);
connect(wes.weaBus, weaBus);
connect(cor.weaBus, weaBus);
connect(multiplex5_1.y, TRooAir);
connect(temAirSou.T, multiplex5_1.u1[1]);
connect(temAirEas.T, multiplex5_1.u2[1]);
connect(temAirNor.T, multiplex5_1.u3[1]);
connect(temAirWes.T, multiplex5_1.u4[1]);
connect(temAirCor.T, multiplex5_1.u5[1]);
connect(sou.heaPorAir, temAirSou.port);
connect(eas.heaPorAir, temAirEas.port);
connect(nor.heaPorAir, temAirNor.port);
connect(wes.heaPorAir, temAirWes.port);
connect(cor.heaPorAir, temAirCor.port);
connect(sou.ports[1], portsSou[1]);
connect(sou.ports[2], portsSou[2]);
connect(eas.ports[1], portsEas[1]);
connect(eas.ports[2], portsEas[2]);
connect(nor.ports[1], portsNor[1]);
connect(nor.ports[2], portsNor[2]);
connect(wes.ports[1], portsWes[1]);
connect(wes.ports[2], portsWes[2]);
connect(cor.ports[1], portsCor[1]);
connect(cor.ports[2], portsCor[2]);
connect(leaSou.port_b, sou.ports[3]);
connect(leaEas.port_b, eas.ports[3]);
connect(leaNor.port_b, nor.ports[3]);
connect(leaWes.port_b, wes.ports[3]);
connect(opeSouCor.port_b1, cor.ports[3]);
connect(opeSouCor.port_a2, cor.ports[4]);
connect(opeSouCor.port_a1, sou.ports[4]);
connect(opeSouCor.port_b2, sou.ports[5]);
connect(opeEasCor.port_b1, eas.ports[4]);
connect(opeEasCor.port_a2, eas.ports[5]);
connect(opeEasCor.port_a1, cor.ports[5]);
connect(opeEasCor.port_b2, cor.ports[6]);
connect(opeNorCor.port_b1, nor.ports[4]);
connect(opeNorCor.port_a2, nor.ports[5]);
connect(opeNorCor.port_a1, cor.ports[7]);
connect(opeNorCor.port_b2, cor.ports[8]);
connect(opeWesCor.port_b1, cor.ports[9]);
connect(opeWesCor.port_a2, cor.ports[10]);
connect(opeWesCor.port_a1, wes.ports[4]);
connect(opeWesCor.port_b2, wes.ports[5]);
connect(cor.ports[11], senRelPre.port_a);
connect(senRelPre.p_rel, p_rel);
connect(gaiIntNor.y, nor.qGai_flow);
connect(gaiIntSou.y, sou.qGai_flow);
connect(gai.y,gaiIntSou. u);
connect(gai.y,gaiIntNor. u);
connect(intGaiFra.y,gai. u);
connect(uSha.y,replicator. u);
end Floor;
Freeze thermostat with timed lockout
Information
Freeze stat that outputs true
if freeze protection should be engaged.
The freeze stat regulates around a set point. When it triggers freeze protection,
then the freeze protection stays engaged for at least delayTime
.
It only becomes disengaged after this time period if the measured temperature is above
the set point.
Parameters
Type | Name | Default | Description |
Real | lockoutTime | 900 | Delay time [s] |
Real | TSet | 276.15 | Temperature below which the freeze protection starts [K] |
Connectors
Type | Name | Description |
input RealInput | u | Connector of Real input signal used as measurement signal [K] |
output BooleanOutput | y | Connector of Real output signal used as actuator signal |
Modelica definition
model FreezeStat
parameter Real lockoutTime(
final quantity="Time",
final unit="s",
displayUnit="min",
min=60) = 900
;
parameter Real TSet(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC") = 276.15 ;
Buildings.Controls.OBC.CDL.Interfaces.RealInput u(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC")
;
Buildings.Controls.OBC.CDL.Interfaces.BooleanOutput y
;
Buildings.Controls.OBC.CDL.Logical.TrueDelay locOut(
final delayTime=
lockoutTime) ;
Buildings.Controls.OBC.CDL.Logical.Not freStaSig ;
Buildings.Controls.OBC.CDL.Continuous.GreaterThreshold greThr(
final t=TSet,
final h=0) ;
equation
connect(locOut.y, freStaSig.u);
connect(freStaSig.y, y);
connect(greThr.y, locOut.u);
connect(greThr.u, u);
end FreezeStat;
Interface for a model of a floor of a building
Information
This is a partial model for one floor of the DOE reference office building.
Parameters
Type | Name | Default | Description |
replaceable package Medium | Modelica.Media.Interfaces.Pa... | Medium model for air |
Boolean | use_windPressure | true | Set to true to enable wind pressure |
Real | kIntNor | 1 | Gain factor to scale internal heat gain in north zone |
Volume | VRooCor | | Room volume corridor [m3] |
Volume | VRooSou | | Room volume south [m3] |
Volume | VRooNor | | Room volume north [m3] |
Volume | VRooEas | | Room volume east [m3] |
Volume | VRooWes | | Room volume west [m3] |
Area | AFloCor | | Floor area corridor [m2] |
Area | AFloSou | | Floor area south [m2] |
Area | AFloNor | | Floor area north [m2] |
Area | AFloEas | | Floor area east [m2] |
Area | AFloWes | | Floor area west [m2] |
Connectors
Modelica definition
partial model PartialFloor
replaceable package Medium =
Modelica.Media.Interfaces.PartialMedium
;
parameter Boolean use_windPressure=true
;
parameter Real kIntNor(min=0, max=1) = 1
;
parameter Modelica.SIunits.Volume VRooCor ;
parameter Modelica.SIunits.Volume VRooSou ;
parameter Modelica.SIunits.Volume VRooNor ;
parameter Modelica.SIunits.Volume VRooEas ;
parameter Modelica.SIunits.Volume VRooWes ;
parameter Modelica.SIunits.Area AFloCor ;
parameter Modelica.SIunits.Area AFloSou ;
parameter Modelica.SIunits.Area AFloNor ;
parameter Modelica.SIunits.Area AFloEas ;
parameter Modelica.SIunits.Area AFloWes ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsSou[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsEas[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsNor[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsWes[2](
redeclare package Medium =
Medium) ;
Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsCor[2](
redeclare package Medium =
Medium) ;
Modelica.Blocks.Interfaces.RealOutput TRooAir[5](
each unit="K",
each displayUnit="degC") ;
Modelica.Blocks.Interfaces.RealOutput p_rel
;
BoundaryConditions.WeatherData.Bus weaBus ;
Buildings.Examples.VAVReheat.BaseClasses.RoomLeakage leaSou(
redeclare package Medium =
Medium,
VRoo=VRooSou,
s=49.91/33.27,
azi=Buildings.Types.Azimuth.S,
final use_windPressure=use_windPressure)
;
Buildings.Examples.VAVReheat.BaseClasses.RoomLeakage leaEas(
redeclare package Medium =
Medium,
VRoo=VRooEas,
s=33.27/49.91,
azi=Buildings.Types.Azimuth.E,
final use_windPressure=use_windPressure)
;
Buildings.Examples.VAVReheat.BaseClasses.RoomLeakage leaNor(
redeclare package Medium =
Medium,
VRoo=VRooNor,
s=49.91/33.27,
azi=Buildings.Types.Azimuth.N,
final use_windPressure=use_windPressure)
;
Buildings.Examples.VAVReheat.BaseClasses.RoomLeakage leaWes(
redeclare package Medium =
Medium,
VRoo=VRooWes,
s=33.27/49.91,
azi=Buildings.Types.Azimuth.W,
final use_windPressure=use_windPressure)
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirSou
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirEas
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirNor
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirWes
;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirCor
;
Modelica.Blocks.Routing.Multiplex5 multiplex5_1;
Airflow.Multizone.DoorOpen opeSouCor(
redeclare package Medium =
Medium,
wOpe=10)
;
Airflow.Multizone.DoorOpen opeEasCor(
redeclare package Medium =
Medium,
wOpe=10)
;
Airflow.Multizone.DoorOpen opeNorCor(
redeclare package Medium =
Medium,
wOpe=10)
;
Airflow.Multizone.DoorOpen opeWesCor(
redeclare package Medium =
Medium, wOpe=10)
;
Buildings.Fluid.Sensors.RelativePressure senRelPre(
redeclare package Medium =
Medium)
;
Buildings.Fluid.Sources.Outside out(nPorts=1,
redeclare package Medium =
Medium);
equation
connect(weaBus, leaSou.weaBus);
connect(weaBus, leaEas.weaBus);
connect(weaBus, leaNor.weaBus);
connect(weaBus, leaWes.weaBus);
connect(out.weaBus, weaBus);
connect(multiplex5_1.y, TRooAir);
connect(temAirSou.T, multiplex5_1.u1[1]);
connect(temAirEas.T, multiplex5_1.u2[1]);
connect(temAirNor.T, multiplex5_1.u3[1]);
connect(temAirWes.T, multiplex5_1.u4[1]);
connect(temAirCor.T, multiplex5_1.u5[1]);
connect(senRelPre.p_rel, p_rel);
connect(out.ports[1], senRelPre.port_b);
end PartialFloor;
Partial model of variable air volume flow system with terminal reheat and five thermal zones
Information
This model consist of an HVAC system, a building envelope model and a model
for air flow through building leakage and through open doors.
The HVAC system is a variable air volume (VAV) flow system with economizer
and a heating and cooling coil in the air handler unit. There is also a
reheat coil and an air damper in each of the five zone inlet branches.
The figure below shows the schematic diagram of the HVAC system
Most of the HVAC control in this model is open loop.
Two models that extend this model, namely
Buildings.Examples.VAVReheat.ASHRAE2006
and
Buildings.Examples.VAVReheat.Guideline36
add closed loop control. See these models for a description of
the control sequence.
To model the heat transfer through the building envelope,
a model of five interconnected rooms is used.
The five room model is representative of one floor of the
new construction medium office building for Chicago, IL,
as described in the set of DOE Commercial Building Benchmarks
(Deru et al, 2009). There are four perimeter zones and one core zone.
The envelope thermal properties meet ASHRAE Standard 90.1-2004.
The thermal room model computes transient heat conduction through
walls, floors and ceilings and long-wave radiative heat exchange between
surfaces. The convective heat transfer coefficient is computed based
on the temperature difference between the surface and the room air.
There is also a layer-by-layer short-wave radiation,
long-wave radiation, convection and conduction heat transfer model for the
windows. The model is similar to the
Window 5 model and described in TARCOG 2006.
Each thermal zone can have air flow from the HVAC system, through leakages of the building envelope (except for the core zone) and through bi-directional air exchange through open doors that connect adjacent zones. The bi-directional air exchange is modeled based on the differences in static pressure between adjacent rooms at a reference height plus the difference in static pressure across the door height as a function of the difference in air density.
Infiltration is a function of the
flow imbalance of the HVAC system.
References
Deru M., K. Field, D. Studer, K. Benne, B. Griffith, P. Torcellini,
M. Halverson, D. Winiarski, B. Liu, M. Rosenberg, J. Huang, M. Yazdanian, and D. Crawley.
DOE commercial building research benchmarks for commercial buildings.
Technical report, U.S. Department of Energy, Energy Efficiency and
Renewable Energy, Office of Building Technologies, Washington, DC, 2009.
TARCOG 2006: Carli, Inc., TARCOG: Mathematical models for calculation
of thermal performance of glazing systems with our without
shading devices, Technical Report, Oct. 17, 2006.
Parameters
Type | Name | Default | Description |
Volume | VRooCor | flo.VRooCor | Room volume corridor [m3] |
Volume | VRooSou | flo.VRooSou | Room volume south [m3] |
Volume | VRooNor | flo.VRooNor | Room volume north [m3] |
Volume | VRooEas | flo.VRooEas | Room volume east [m3] |
Volume | VRooWes | flo.VRooWes | Room volume west [m3] |
Area | AFloCor | flo.AFloCor | Floor area corridor [m2] |
Area | AFloSou | flo.AFloSou | Floor area south [m2] |
Area | AFloNor | flo.AFloNor | Floor area north [m2] |
Area | AFloEas | flo.AFloEas | Floor area east [m2] |
Area | AFloWes | flo.AFloWes | Floor area west [m2] |
Area | AFlo[numZon] | {flo.AFloCor,flo.AFloSou,flo... | Floor area of each zone [m2] |
Real | ACHCor | 6 | Design air change per hour core [1/h] |
Real | ACHSou | 6 | Design air change per hour south [1/h] |
Real | ACHEas | 9 | Design air change per hour east [1/h] |
Real | ACHNor | 6 | Design air change per hour north [1/h] |
Real | ACHWes | 7 | Design air change per hour west [1/h] |
MassFlowRate | mCor_flow_nominal | ACHCor*VRooCor*conv | Design mass flow rate core [kg/s] |
MassFlowRate | mSou_flow_nominal | ACHSou*VRooSou*conv | Design mass flow rate south [kg/s] |
MassFlowRate | mEas_flow_nominal | ACHEas*VRooEas*conv | Design mass flow rate east [kg/s] |
MassFlowRate | mNor_flow_nominal | ACHNor*VRooNor*conv | Design mass flow rate north [kg/s] |
MassFlowRate | mWes_flow_nominal | ACHWes*VRooWes*conv | Design mass flow rate west [kg/s] |
MassFlowRate | m_flow_nominal | 0.7*(mCor_flow_nominal + mSo... | Nominal mass flow rate [kg/s] |
Real | ratVFloHea | 0.3 | VAV box maximum air flow rate ratio in heating mode [1] |
Angle | lat | 41.98*3.14159/180 | Latitude [rad] |
Real | ratOAFlo_A | 0.3e-3 | Outdoor airflow rate required per unit area [m3/(s.m2)] |
Real | ratOAFlo_P | 2.5e-3 | Outdoor airflow rate required per person |
Real | ratP_A | 5e-2 | Occupant density |
Real | effZ | 0.8 | Zone air distribution effectiveness (limiting value) [1] |
Real | divP | 0.7 | Occupant diversity ratio [1] |
VolumeFlowRate | VCorOA_flow_nominal | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate [m3/s] |
VolumeFlowRate | VSouOA_flow_nominal | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate [m3/s] |
VolumeFlowRate | VEasOA_flow_nominal | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate [m3/s] |
VolumeFlowRate | VNorOA_flow_nominal | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate [m3/s] |
VolumeFlowRate | VWesOA_flow_nominal | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate [m3/s] |
VolumeFlowRate | Vou_flow_nominal | (divP*ratOAFlo_P*ratP_A + ra... | System uncorrected outdoor air flow rate [m3/s] |
Real | effVen | if divP < 0.6 then 0.88*divP... | System ventilation efficiency [1] |
VolumeFlowRate | Vot_flow_nominal | Vou_flow_nominal/effVen | System design outdoor air flow rate [m3/s] |
Temperature | THeaOn | 293.15 | Heating setpoint during on [K] |
Temperature | THeaOff | 285.15 | Heating setpoint during off [K] |
Temperature | TCooOn | 297.15 | Cooling setpoint during on [K] |
Temperature | TCooOff | 303.15 | Cooling setpoint during off [K] |
PressureDifference | dpBuiStaSet | 12 | Building static pressure [Pa] |
Real | yFanMin | 0.1 | Minimum fan speed |
Temperature | THotWatInl_nominal | 55 + 273.15 | Reheat coil nominal inlet water temperature [K] |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Boolean | use_windPressure | true | Set to true to enable wind pressure |
PartialFloor | flo | redeclare Buildings.Examples... | Model of a floor of the building that is served by this VAV system |
Experimental (may be changed in future releases) |
Boolean | sampleModel | true | Set to true to time-sample the model, which can give shorter simulation time if there is already time sampling in the system model |
Connectors
Type | Name | Description |
Bus | weaBus | Weather Data Bus |
Modelica definition
partial model PartialOpenLoop
package MediumA =
Buildings.Media.Air ;
package MediumW =
Buildings.Media.Water ;
constant Integer numZon=5 ;
parameter Modelica.SIunits.Volume VRooCor=flo.VRooCor
;
parameter Modelica.SIunits.Volume VRooSou=flo.VRooSou
;
parameter Modelica.SIunits.Volume VRooNor=flo.VRooNor
;
parameter Modelica.SIunits.Volume VRooEas=flo.VRooEas
;
parameter Modelica.SIunits.Volume VRooWes=flo.VRooWes
;
parameter Modelica.SIunits.Area AFloCor=flo.AFloCor ;
parameter Modelica.SIunits.Area AFloSou=flo.AFloSou ;
parameter Modelica.SIunits.Area AFloNor=flo.AFloNor ;
parameter Modelica.SIunits.Area AFloEas=flo.AFloEas ;
parameter Modelica.SIunits.Area AFloWes=flo.AFloWes ;
parameter Modelica.SIunits.Area AFlo[numZon]={flo.AFloCor,flo.AFloSou,flo.AFloEas,
flo.AFloNor,flo.AFloWes} ;
final parameter Modelica.SIunits.Area ATot=
sum(AFlo) ;
constant Real conv=1.2/3600 ;
parameter Real ACHCor(
final unit="1/h")=6
;
parameter Real ACHSou(
final unit="1/h")=6
;
parameter Real ACHEas(
final unit="1/h")=9
;
parameter Real ACHNor(
final unit="1/h")=6
;
parameter Real ACHWes(
final unit="1/h")=7
;
parameter Modelica.SIunits.MassFlowRate mCor_flow_nominal=ACHCor*VRooCor*conv
;
parameter Modelica.SIunits.MassFlowRate mSou_flow_nominal=ACHSou*VRooSou*conv
;
parameter Modelica.SIunits.MassFlowRate mEas_flow_nominal=ACHEas*VRooEas*conv
;
parameter Modelica.SIunits.MassFlowRate mNor_flow_nominal=ACHNor*VRooNor*conv
;
parameter Modelica.SIunits.MassFlowRate mWes_flow_nominal=ACHWes*VRooWes*conv
;
parameter Modelica.SIunits.MassFlowRate m_flow_nominal=0.7*(mCor_flow_nominal
+ mSou_flow_nominal + mEas_flow_nominal + mNor_flow_nominal +
mWes_flow_nominal) ;
parameter Real ratVFloHea(
final unit="1") = 0.3
;
parameter Modelica.SIunits.Angle lat=41.98*3.14159/180 ;
parameter Real ratOAFlo_A(
final unit="m3/(s.m2)") = 0.3e-3
;
parameter Real ratOAFlo_P = 2.5e-3
;
parameter Real ratP_A = 5e-2
;
parameter Real effZ(
final unit="1") = 0.8
;
parameter Real divP(
final unit="1") = 0.7
;
parameter Modelica.SIunits.VolumeFlowRate VCorOA_flow_nominal=
(ratOAFlo_P * ratP_A + ratOAFlo_A) * AFloCor / effZ
;
parameter Modelica.SIunits.VolumeFlowRate VSouOA_flow_nominal=
(ratOAFlo_P * ratP_A + ratOAFlo_A) * AFloSou / effZ
;
parameter Modelica.SIunits.VolumeFlowRate VEasOA_flow_nominal=
(ratOAFlo_P * ratP_A + ratOAFlo_A) * AFloEas / effZ
;
parameter Modelica.SIunits.VolumeFlowRate VNorOA_flow_nominal=
(ratOAFlo_P * ratP_A + ratOAFlo_A) * AFloNor / effZ
;
parameter Modelica.SIunits.VolumeFlowRate VWesOA_flow_nominal=
(ratOAFlo_P * ratP_A + ratOAFlo_A) * AFloWes / effZ
;
parameter Modelica.SIunits.VolumeFlowRate Vou_flow_nominal=
(divP * ratOAFlo_P * ratP_A + ratOAFlo_A) *
sum(
{AFloCor, AFloSou, AFloNor, AFloEas, AFloWes})
;
parameter Real effVen(
final unit="1") =
if divP < 0.6
then
0.88 * divP + 0.22
else 0.75
;
parameter Modelica.SIunits.VolumeFlowRate Vot_flow_nominal=
Vou_flow_nominal / effVen
;
parameter Modelica.SIunits.Temperature THeaOn=293.15
;
parameter Modelica.SIunits.Temperature THeaOff=285.15
;
parameter Modelica.SIunits.Temperature TCooOn=297.15
;
parameter Modelica.SIunits.Temperature TCooOff=303.15
;
parameter Modelica.SIunits.PressureDifference dpBuiStaSet(min=0) = 12
;
parameter Real yFanMin = 0.1 ;
parameter Modelica.SIunits.Temperature THotWatInl_nominal(
displayUnit="degC")=55 + 273.15
;
parameter Boolean allowFlowReversal=true
;
parameter Boolean use_windPressure=true ;
parameter Boolean sampleModel=true
;
Buildings.Fluid.Sources.Outside amb(
redeclare package Medium = MediumA,
nPorts=2) ;
replaceable Buildings.Examples.VAVReheat.BaseClasses.PartialFloor flo
constrainedby Buildings.Examples.VAVReheat.BaseClasses.PartialFloor(
redeclare final package Medium = MediumA,
final use_windPressure=use_windPressure)
;
Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU heaCoi(
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumA,
m1_flow_nominal=m_flow_nominal*1000*(10 - (-20))/4200/10,
m2_flow_nominal=m_flow_nominal,
show_T=true,
configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow,
Q_flow_nominal=m_flow_nominal*1006*(16.7 - 4),
dp1_nominal=0,
dp2_nominal=200 + 200 + 100 + 40,
allowFlowReversal1=false,
allowFlowReversal2=allowFlowReversal,
T_a1_nominal=THotWatInl_nominal,
T_a2_nominal=4 + 273.15)
;
Buildings.Fluid.HeatExchangers.WetCoilCounterFlow cooCoi(
show_T=true,
UA_nominal=3*m_flow_nominal*1000*15/
Buildings.Fluid.HeatExchangers.BaseClasses.lmtd(
T_a1=26.2,
T_b1=12.8,
T_a2=6,
T_b2=16),
redeclare package Medium1 = MediumW,
redeclare package Medium2 = MediumA,
m1_flow_nominal=m_flow_nominal*1000*15/4200/10,
m2_flow_nominal=m_flow_nominal,
dp2_nominal=0,
dp1_nominal=0,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
allowFlowReversal1=false,
allowFlowReversal2=allowFlowReversal)
;
Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc(
m_flow_nominal=m_flow_nominal,
redeclare package Medium = MediumA,
allowFlowReversal=allowFlowReversal,
dp_nominal=40) ;
Buildings.Fluid.Movers.SpeedControlled_y fanSup(
redeclare package Medium = MediumA,
per(pressure(V_flow={0,m_flow_nominal/1.2*2}, dp=2*{780 + 10 + dpBuiStaSet,
0})),
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) ;
Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(
redeclare package Medium =
MediumA, m_flow_nominal=m_flow_nominal)
;
Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(
redeclare package Medium =
MediumA, m_flow_nominal=m_flow_nominal)
;
Buildings.Fluid.Sources.Boundary_pT sinHea(
redeclare package Medium = MediumW,
p=300000,
T=318.15,
nPorts=6) ;
Buildings.Fluid.Sources.Boundary_pT sinCoo(
redeclare package Medium = MediumW,
p=300000,
T=285.15,
nPorts=1) ;
Modelica.Blocks.Routing.RealPassThrough TOut(y(
final quantity="ThermodynamicTemperature",
final unit="K",
displayUnit="degC",
min=0));
Buildings.Fluid.Sensors.TemperatureTwoPort TSup(
redeclare package Medium = MediumA,
m_flow_nominal=m_flow_nominal,
allowFlowReversal=allowFlowReversal);
Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(
redeclare package Medium =
MediumA) ;
Buildings.Controls.SetPoints.OccupancySchedule occSch(occupancy=3600*{6,19})
;
Buildings.Utilities.Math.Min min(nin=5) ;
Buildings.Utilities.Math.Average ave(nin=5)
;
Buildings.Fluid.Sources.MassFlowSource_T souCoo(
redeclare package Medium = MediumW,
T=279.15,
nPorts=1,
use_m_flow_in=true) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TRet(
redeclare package Medium = MediumA,
m_flow_nominal=m_flow_nominal,
allowFlowReversal=allowFlowReversal) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TMix(
redeclare package Medium = MediumA,
m_flow_nominal=m_flow_nominal,
allowFlowReversal=allowFlowReversal) ;
Buildings.Fluid.Sources.MassFlowSource_T souHea(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Buildings.Fluid.Sensors.VolumeFlowRate VOut1(
redeclare package Medium =
MediumA, m_flow_nominal=m_flow_nominal) ;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox cor(
redeclare package MediumA = MediumA,
redeclare package MediumW = MediumW,
m_flow_nominal=mCor_flow_nominal,
VRoo=VRooCor,
allowFlowReversal=allowFlowReversal,
ratVFloHea=ratVFloHea,
THotWatInl_nominal=THotWatInl_nominal,
THotWatOut_nominal=THotWatInl_nominal-10,
TAirInl_nominal=12+273.15,
QHea_flow_nominal=mCor_flow_nominal*ratVFloHea*cpAir*(32-12))
;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox sou(
redeclare package MediumA = MediumA,
redeclare package MediumW = MediumW,
m_flow_nominal=mSou_flow_nominal,
VRoo=VRooSou,
allowFlowReversal=allowFlowReversal,
ratVFloHea=ratVFloHea,
THotWatInl_nominal=THotWatInl_nominal,
THotWatOut_nominal=THotWatInl_nominal-10,
TAirInl_nominal=12+273.15,
QHea_flow_nominal=mSou_flow_nominal*ratVFloHea*cpAir*(32-12))
;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox eas(
redeclare package MediumA = MediumA,
redeclare package MediumW = MediumW,
m_flow_nominal=mEas_flow_nominal,
VRoo=VRooEas,
allowFlowReversal=allowFlowReversal,
ratVFloHea=ratVFloHea,
THotWatInl_nominal=THotWatInl_nominal,
THotWatOut_nominal=THotWatInl_nominal-10,
TAirInl_nominal=12+273.15,
QHea_flow_nominal=mEas_flow_nominal*ratVFloHea*cpAir*(32-12))
;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox nor(
redeclare package MediumA = MediumA,
redeclare package MediumW = MediumW,
m_flow_nominal=mNor_flow_nominal,
VRoo=VRooNor,
allowFlowReversal=allowFlowReversal,
ratVFloHea=ratVFloHea,
THotWatInl_nominal=THotWatInl_nominal,
THotWatOut_nominal=THotWatInl_nominal-10,
TAirInl_nominal=12+273.15,
QHea_flow_nominal=mNor_flow_nominal*ratVFloHea*cpAir*(32-12))
;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox wes(
redeclare package MediumA = MediumA,
redeclare package MediumW = MediumW,
m_flow_nominal=mWes_flow_nominal,
VRoo=VRooWes,
allowFlowReversal=allowFlowReversal,
ratVFloHea=ratVFloHea,
THotWatInl_nominal=THotWatInl_nominal,
THotWatOut_nominal=THotWatInl_nominal-10,
TAirInl_nominal=12+273.15,
QHea_flow_nominal=mWes_flow_nominal*ratVFloHea*cpAir*(32-12))
;
Buildings.Fluid.FixedResistances.Junction splRetRoo1(
redeclare package Medium = MediumA,
m_flow_nominal={m_flow_nominal,m_flow_nominal - mCor_flow_nominal,
mCor_flow_nominal},
from_dp=false,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering)
;
Buildings.Fluid.FixedResistances.Junction splRetSou(
redeclare package Medium = MediumA,
m_flow_nominal={mSou_flow_nominal + mEas_flow_nominal + mNor_flow_nominal
+ mWes_flow_nominal,mEas_flow_nominal + mNor_flow_nominal +
mWes_flow_nominal,mSou_flow_nominal},
from_dp=false,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering)
;
Buildings.Fluid.FixedResistances.Junction splRetEas(
redeclare package Medium = MediumA,
m_flow_nominal={mEas_flow_nominal + mNor_flow_nominal + mWes_flow_nominal,
mNor_flow_nominal + mWes_flow_nominal,mEas_flow_nominal},
from_dp=false,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering)
;
Buildings.Fluid.FixedResistances.Junction splRetNor(
redeclare package Medium = MediumA,
m_flow_nominal={mNor_flow_nominal + mWes_flow_nominal,mWes_flow_nominal,
mNor_flow_nominal},
from_dp=false,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering)
;
Buildings.Fluid.FixedResistances.Junction splSupRoo1(
redeclare package Medium = MediumA,
m_flow_nominal={m_flow_nominal,m_flow_nominal - mCor_flow_nominal,
mCor_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
;
Buildings.Fluid.FixedResistances.Junction splSupSou(
redeclare package Medium = MediumA,
m_flow_nominal={mSou_flow_nominal + mEas_flow_nominal + mNor_flow_nominal
+ mWes_flow_nominal,mEas_flow_nominal + mNor_flow_nominal +
mWes_flow_nominal,mSou_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
;
Buildings.Fluid.FixedResistances.Junction splSupEas(
redeclare package Medium = MediumA,
m_flow_nominal={mEas_flow_nominal + mNor_flow_nominal + mWes_flow_nominal,
mNor_flow_nominal + mWes_flow_nominal,mEas_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
;
Buildings.Fluid.FixedResistances.Junction splSupNor(
redeclare package Medium = MediumA,
m_flow_nominal={mNor_flow_nominal + mWes_flow_nominal,mWes_flow_nominal,
mNor_flow_nominal},
from_dp=true,
linearized=true,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
dp_nominal(
each displayUnit="Pa") = {0,0,0},
portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
;
BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"),
computeWetBulbTemperature=false);
BoundaryConditions.WeatherData.Bus weaBus ;
Modelica.Blocks.Routing.DeMultiplex5 TRooAir(u(
each unit="K",
each
displayUnit="degC")) ;
Results res(
final A=ATot,
PFan=fanSup.P + 0,
PHea=heaCoi.Q2_flow + cor.terHea.Q2_flow + nor.terHea.Q2_flow + wes.terHea.Q2_flow
+ eas.terHea.Q2_flow + sou.terHea.Q2_flow,
PCooSen=cooCoi.QSen2_flow,
PCooLat=cooCoi.QLat2_flow) ;
public
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoi(k=m_flow_nominal*1000*40
/4200/10) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiCooCoi(k=m_flow_nominal*1000*15
/4200/10) ;
FreezeStat freSta
;
Fluid.Sources.MassFlowSource_T souHeaCor(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Fluid.Sources.MassFlowSource_T souHeaSou(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Fluid.Sources.MassFlowSource_T souHeaEas(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Fluid.Sources.MassFlowSource_T souHeaNor(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Fluid.Sources.MassFlowSource_T souHeaWes(
redeclare package Medium = MediumW,
T=THotWatInl_nominal,
use_m_flow_in=true,
nPorts=1) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoiCor(
k=cor.mHotWat_flow_nominal) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoiSou(
k=sou.mHotWat_flow_nominal) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoiEas(
k=eas.mHotWat_flow_nominal) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoiNor(
k=nor.mHotWat_flow_nominal) ;
Buildings.Controls.OBC.CDL.Continuous.Gain gaiHeaCoiWes(
k=wes.mHotWat_flow_nominal) ;
Fluid.Actuators.Dampers.Exponential damRet(
redeclare package Medium = MediumA,
m_flow_nominal=m_flow_nominal,
from_dp=false,
riseTime=15,
dpDamper_nominal=5,
dpFixed_nominal=5)
;
Fluid.Actuators.Dampers.Exponential damOut(
redeclare package Medium = MediumA,
m_flow_nominal=m_flow_nominal,
from_dp=false,
riseTime=15,
dpDamper_nominal=5,
dpFixed_nominal=5) ;
protected
constant Modelica.SIunits.SpecificHeatCapacity cpAir=
Buildings.Utilities.Psychrometrics.Constants.cpAir
;
constant Modelica.SIunits.SpecificHeatCapacity cpWatLiq=
Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
model Results
parameter Modelica.SIunits.Area A ;
input Modelica.SIunits.Power PFan ;
input Modelica.SIunits.Power PHea ;
input Modelica.SIunits.Power PCooSen ;
input Modelica.SIunits.Power PCooLat ;
Real EFan(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real EHea(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECooSen(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECooLat(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECoo(unit="J/m2") ;
equation
A*
der(EFan) = PFan;
A*
der(EHea) = PHea;
A*
der(ECooSen) = PCooSen;
A*
der(ECooLat) = PCooLat;
ECoo = ECooSen + ECooLat;
end Results;
equation
connect(fanSup.port_b, dpDisSupFan.port_a);
connect(TSup.port_a, fanSup.port_b);
connect(amb.ports[1], VOut1.port_a);
connect(splRetRoo1.port_1, dpRetDuc.port_a);
connect(splRetNor.port_1, splRetEas.port_2);
connect(splRetEas.port_1, splRetSou.port_2);
connect(splRetSou.port_1, splRetRoo1.port_2);
connect(splSupRoo1.port_3, cor.port_aAir);
connect(splSupRoo1.port_2, splSupSou.port_1);
connect(splSupSou.port_3, sou.port_aAir);
connect(splSupSou.port_2, splSupEas.port_1);
connect(splSupEas.port_3, eas.port_aAir);
connect(splSupEas.port_2, splSupNor.port_1);
connect(splSupNor.port_3, nor.port_aAir);
connect(splSupNor.port_2, wes.port_aAir);
connect(cooCoi.port_b1, sinCoo.ports[1]);
connect(weaDat.weaBus, weaBus);
connect(weaBus.TDryBul, TOut.u);
connect(amb.weaBus, weaBus);
connect(splRetRoo1.port_3, flo.portsCor[2]);
connect(splRetSou.port_3, flo.portsSou[2]);
connect(splRetEas.port_3, flo.portsEas[2]);
connect(splRetNor.port_3, flo.portsNor[2]);
connect(splRetNor.port_2, flo.portsWes[2]);
connect(weaBus, flo.weaBus);
connect(flo.TRooAir, min.u);
connect(flo.TRooAir, ave.u);
connect(TRooAir.u, flo.TRooAir);
connect(cooCoi.port_b2, fanSup.port_a);
connect(cor.port_bAir, flo.portsCor[1]);
connect(sou.port_bAir, flo.portsSou[1]);
connect(eas.port_bAir, flo.portsEas[1]);
connect(nor.port_bAir, flo.portsNor[1]);
connect(wes.port_bAir, flo.portsWes[1]);
connect(senRetFlo.port_a, dpRetDuc.port_b);
connect(TSup.port_b, senSupFlo.port_a);
connect(senSupFlo.port_b, splSupRoo1.port_1);
connect(cooCoi.port_a1, souCoo.ports[1]);
connect(gaiHeaCoi.y, souHea.m_flow_in);
connect(gaiCooCoi.y, souCoo.m_flow_in);
connect(dpDisSupFan.port_b, amb.ports[2]);
connect(senRetFlo.port_b, TRet.port_a);
connect(freSta.u, TMix.T);
connect(TMix.port_b, heaCoi.port_a2);
connect(heaCoi.port_b2, cooCoi.port_a2);
connect(souHea.ports[1], heaCoi.port_a1);
connect(heaCoi.port_b1, sinHea.ports[1]);
connect(cor.port_bHotWat, sinHea.ports[2]);
connect(sou.port_bHotWat, sinHea.ports[3]);
connect(eas.port_bHotWat, sinHea.ports[4]);
connect(nor.port_bHotWat, sinHea.ports[5]);
connect(wes.port_bHotWat, sinHea.ports[6]);
connect(souHeaCor.m_flow_in, gaiHeaCoiCor.y);
connect(souHeaSou.m_flow_in, gaiHeaCoiSou.y);
connect(souHeaEas.m_flow_in, gaiHeaCoiEas.y);
connect(souHeaNor.m_flow_in, gaiHeaCoiNor.y);
connect(souHeaWes.m_flow_in, gaiHeaCoiWes.y);
connect(souHeaCor.ports[1], cor.port_aHotWat);
connect(souHeaSou.ports[1], sou.port_aHotWat);
connect(souHeaEas.ports[1], eas.port_aHotWat);
connect(souHeaNor.ports[1], nor.port_aHotWat);
connect(souHeaWes.ports[1], wes.port_aHotWat);
connect(VOut1.port_b, damOut.port_a);
connect(damOut.port_b, TMix.port_a);
connect(damRet.port_a, TRet.port_b);
connect(damRet.port_b, TMix.port_a);
end PartialOpenLoop;
Room leakage model
Information
Room leakage.
Extends from Buildings.BaseClasses.BaseIcon (Base icon).
Parameters
Type | Name | Default | Description |
replaceable package Medium | Modelica.Media.Interfaces.Pa... | Medium in the component |
Volume | VRoo | | Room volume [m3] |
Boolean | use_windPressure | false | Set to true to enable wind pressure |
Real | s | | Side ratio, s=length of this wall/length of adjacent wall |
Angle | azi | | Surface azimuth (South:0, West:pi/2) [rad] |
Connectors
Type | Name | Description |
replaceable package Medium | Medium in the component |
FluidPort_b | port_b | |
Bus | weaBus | Bus with weather data |
Modelica definition
model RoomLeakage
extends Buildings.BaseClasses.BaseIcon;
replaceable package Medium =
Modelica.Media.Interfaces.PartialMedium
;
parameter Modelica.SIunits.Volume VRoo ;
parameter Boolean use_windPressure=false
;
Buildings.Fluid.FixedResistances.PressureDrop res(
redeclare package Medium =
Medium,
dp_nominal=50,
m_flow_nominal=VRoo*1.2/3600) ;
Modelica.Fluid.Interfaces.FluidPort_b port_b(
redeclare package Medium =
Medium);
Buildings.Fluid.Sources.Outside_CpLowRise
amb(
redeclare package Medium =
Medium, nPorts=1,
s=s,
azi=azi,
Cp0=
if use_windPressure
then 0.6
else 0);
BoundaryConditions.WeatherData.Bus weaBus ;
Buildings.Fluid.Sensors.MassFlowRate senMasFlo1(
redeclare package Medium =
Medium,
allowFlowReversal=true) ;
Modelica.Blocks.Math.Gain ACHInf(k=1/VRoo/1.2*3600, y(unit="1/h"))
;
parameter Real s ;
parameter Modelica.SIunits.Angle azi ;
equation
connect(res.port_b, port_b);
connect(amb.weaBus, weaBus);
connect(amb.ports[1], senMasFlo1.port_a);
connect(senMasFlo1.port_b, res.port_a);
connect(senMasFlo1.m_flow, ACHInf.u);
end RoomLeakage;
Supply box of a VAV system with a hot water reheat coil
Information
Model for a VAV terminal box with a water reheat coil and pressure independent damper.
The pressure independent damper model includes an idealized flow rate controller
and requires a discharge air flow rate set-point (normalized to the nominal value)
as a control signal.
Extends from Modelica.Blocks.Icons.Block (Basic graphical layout of input/output block).
Parameters
Type | Name | Default | Description |
replaceable package MediumA | Modelica.Media.Interfaces.Pa... | Medium model for air |
replaceable package MediumW | Modelica.Media.Interfaces.Pa... | Medium model for water |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
MassFlowRate | m_flow_nominal | | Nominal air mass flow rate [kg/s] |
Real | ratVFloHea | | Maximum air flow rate ratio in heating mode [1] |
Volume | VRoo | | Room volume [m3] |
Temperature | THotWatInl_nominal | | Reheat coil nominal inlet water temperature [K] |
Temperature | THotWatOut_nominal | | Reheat coil nominal outlet water temperature [K] |
Temperature | TAirInl_nominal | | Inlet air nominal temperature [K] |
HeatFlowRate | QHea_flow_nominal | | Nominal heating heat flow rate [W] |
Connectors
Type | Name | Description |
replaceable package MediumA | Medium model for air |
replaceable package MediumW | Medium model for water |
FluidPort_a | port_aAir | Fluid connector a1 (positive design flow direction is from port_a1 to port_b1) |
FluidPort_a | port_bAir | Fluid connector b (positive design flow direction is from port_a1 to port_b1) |
input RealInput | yVAV | Signal for VAV damper |
output RealOutput | y_actual | Actual VAV damper position |
FluidPort_a | port_aHotWat | Hot water inlet port |
FluidPort_b | port_bHotWat | Hot water outlet port |
output RealOutput | TSup | Supply Air Temperature |
output RealOutput | VSup_flow | Supply Air Volumetric Flow Rate |
Modelica definition
model VAVReheatBox
extends Modelica.Blocks.Icons.Block;
replaceable package MediumA =
Modelica.Media.Interfaces.PartialMedium
;
replaceable package MediumW =
Modelica.Media.Interfaces.PartialMedium
;
parameter Boolean allowFlowReversal=true
;
parameter Modelica.SIunits.MassFlowRate m_flow_nominal
;
parameter Real ratVFloHea(start=0.3, min=0, max=1, unit="1")
;
parameter Modelica.SIunits.Volume VRoo ;
parameter Modelica.SIunits.Temperature THotWatInl_nominal(
start=55 + 273.15,
displayUnit="degC")
;
parameter Modelica.SIunits.Temperature THotWatOut_nominal(
start=THotWatInl_nominal-10,
displayUnit="degC")
;
parameter Modelica.SIunits.Temperature TAirInl_nominal(
start=12 + 273.15,
displayUnit="degC")
;
parameter Modelica.SIunits.HeatFlowRate QHea_flow_nominal(
start=m_flow_nominal * ratVFloHea * cpAir * (32 + 273.15 - TAirInl_nominal))
;
final parameter Modelica.SIunits.MassFlowRate mHotWat_flow_nominal=
QHea_flow_nominal / (cpWatLiq * (THotWatInl_nominal - THotWatOut_nominal))
;
Modelica.Fluid.Interfaces.FluidPort_a port_aAir(
redeclare package Medium=
MediumA)
;
Modelica.Fluid.Interfaces.FluidPort_a port_bAir(
redeclare package Medium=
MediumA)
;
Modelica.Blocks.Interfaces.RealInput yVAV
;
Modelica.Blocks.Interfaces.RealOutput y_actual ;
Modelica.Fluid.Interfaces.FluidPort_a port_aHotWat(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_b port_bHotWat(
redeclare package Medium =
MediumW) ;
Modelica.Blocks.Interfaces.RealOutput TSup ;
Modelica.Blocks.Interfaces.RealOutput VSup_flow
;
Buildings.Fluid.Actuators.Dampers.PressureIndependent vav(
redeclare package Medium =
MediumA,
m_flow_nominal=m_flow_nominal,
dpDamper_nominal=20,
allowFlowReversal=allowFlowReversal,
dpFixed_nominal=130) ;
Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU terHea(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumA,
m1_flow_nominal=mHotWat_flow_nominal,
m2_flow_nominal=m_flow_nominal*ratVFloHea,
Q_flow_nominal=QHea_flow_nominal,
configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow,
dp1_nominal=0,
from_dp2=true,
dp2_nominal=0,
allowFlowReversal1=false,
allowFlowReversal2=allowFlowReversal,
T_a1_nominal=THotWatInl_nominal,
T_a2_nominal=TAirInl_nominal)
;
Fluid.Sensors.TemperatureTwoPort senTem(
redeclare package Medium =
MediumA,
initType=Modelica.Blocks.Types.Init.InitialState,
m_flow_nominal=m_flow_nominal,
allowFlowReversal=allowFlowReversal)
;
Fluid.Sensors.VolumeFlowRate senVolFlo(
redeclare package Medium =
MediumA,
initType=Modelica.Blocks.Types.Init.InitialState,
m_flow_nominal=m_flow_nominal,
allowFlowReversal=allowFlowReversal)
;
protected
constant Modelica.SIunits.SpecificHeatCapacity cpAir=
Buildings.Utilities.Psychrometrics.Constants.cpAir
;
constant Modelica.SIunits.SpecificHeatCapacity cpWatLiq=
Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
equation
connect(vav.y, yVAV);
connect(vav.y_actual, y_actual);
connect(port_aAir, terHea.port_a2);
connect(vav.port_a, terHea.port_b2);
connect(port_aHotWat, terHea.port_a1);
connect(port_bHotWat, terHea.port_b1);
connect(vav.port_b, senTem.port_a);
connect(senTem.port_b, senVolFlo.port_a);
connect(senVolFlo.port_b, port_bAir);
connect(senVolFlo.V_flow, VSup_flow);
connect(senTem.T, TSup);
end VAVReheatBox;
Model to store the results of the simulation
Parameters
Type | Name | Default | Description |
Area | A | | Floor area [m2] |
Modelica definition
model Results
parameter Modelica.SIunits.Area A ;
input Modelica.SIunits.Power PFan ;
input Modelica.SIunits.Power PHea ;
input Modelica.SIunits.Power PCooSen ;
input Modelica.SIunits.Power PCooLat ;
Real EFan(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real EHea(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECooSen(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECooLat(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real ECoo(unit="J/m2") ;
equation
A*
der(EFan) = PFan;
A*
der(EHea) = PHea;
A*
der(ECooSen) = PCooSen;
A*
der(ECooLat) = PCooLat;
ECoo = ECooSen + ECooLat;
end Results;