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 |
ASHRAE2006
|
Variable air volume flow system with terminal reheat and ASHRAE 2006 control sequence serving five thermal zones |
Floor
|
Model of a floor of the building |
Guideline36
|
Variable air volume flow system with terminal reheat and Guideline 36 control sequence serving five thermal zones |
HVACBuilding
|
Partial model that contains the HVAC and building model |
PartialFloor
|
Interface for a model of a floor of a building |
PartialHVAC
|
Partial model of variable air volume flow system with terminal reheat that serves five thermal zones |
RoomLeakage
|
Room leakage model |
VAVReheatBox
|
Supply box of a VAV system with a hot water reheat coil |
Controls
|
Package with controller models |
Variable air volume flow system with terminal reheat and ASHRAE 2006 control sequence serving five thermal zones
Information
This model consist of an 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 an HVAC system that supplies 5 zones:
See the model
Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC
for a description of the HVAC system.
The control is an implementation of the control sequence
VAV 2A2-21232 of the Sequences of Operation for
Common HVAC Systems (ASHRAE, 2006). In this control sequence, the
supply fan speed is modulated based on the duct static pressure.
The return fan controller tracks the supply fan air flow rate.
The duct static pressure set point is adjusted so that at least one
VAV damper is 90% open.
The heating coil valve, outside air damper, and cooling coil valve are
modulated in sequence to maintain the supply air temperature set point.
The economizer control provides the following functions:
freeze protection, minimum outside air requirement, and supply air cooling,
see
Buildings.Examples.VAVReheat.BaseClasses.Controls.Economizer.
The controller of the terminal units tracks the room air temperature set point
based on a "dual maximum with constant volume heating" logic, see
Buildings.Examples.VAVReheat.BaseClasses.Controls.RoomVAV.
There is also a finite state machine that transitions the mode of operation
of the HVAC system between the modes
occupied, unoccupied off, unoccupied night set back,
unoccupied warm-up and unoccupied pre-cool.
In the VAV model, all air flows are computed based on the
duct static pressure distribution and the performance curves of the fans.
Local loop control is implemented using proportional and proportional-integral
controllers, while the supervisory control is implemented
using a finite state machine.
A similar model but with a different control sequence can be found in
Buildings.Examples.VAVReheat.BaseClasses.Guideline36.
References
ASHRAE.
Sequences of Operation for Common HVAC Systems.
ASHRAE, Atlanta, GA, 2006.
Extends from Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC (Partial model of variable air volume flow system with terminal reheat that serves five thermal zones).
Parameters
Type | Name | Default | Description |
replaceable package MediumA | Air | Medium model for air |
replaceable package MediumW | Water | Medium model for water |
Volume | VRoo[numZon] | | Room volume per zone [m3] |
Area | AFlo[numZon] | | Floor area per zone [m2] |
HeatFlowRate | QHeaAHU_flow_nominal | mHeaAir_flow_nominal*cpAir*(... | Nominal heating heat flow rate of air handler unit coil [W] |
HeatFlowRate | QCooAHU_flow_nominal | 1.3*mCooAir_flow_nominal*cpA... | Nominal total cooling heat flow rate of air handler unit coil (negative number) [W] |
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 | VZonOA_flow_nominal[numZon] | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate of each VAV box [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] |
PressureDifference | dpBuiStaSet | 12 | Building static pressure [Pa] |
Real | yFanMin | 0.1 | Minimum fan speed |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Real | ratVMinVAV_flow[numZon] | {max(1.5*VZonOA_flow_nominal... | Minimum discharge air flow rate ratio [1] |
Nominal mass flow rate |
MassFlowRate | mCooVAV_flow_nominal[numZon] | | Design mass flow rate per zone for cooling [kg/s] |
MassFlowRate | mHeaVAV_flow_nominal[numZon] | 0.3*mCooVAV_flow_nominal | Design mass flow rate per zone for heating [kg/s] |
MassFlowRate | mAir_flow_nominal | mCooAir_flow_nominal | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mCooAir_flow_nominal | 0.7*sum(mCooVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaAir_flow_nominal | 0.7*sum(mHeaVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaWat_flow_nominal | QHeaAHU_flow_nominal/cpWat/10 | Nominal water mass flow rate for heating coil in AHU [kg/s] |
MassFlowRate | mCooWat_flow_nominal | QCooAHU_flow_nominal/cpWat/(... | Nominal water mass flow rate for cooling coil [kg/s] |
Room temperature setpoints |
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] |
Air handler unit nominal temperatures and humidity |
Temperature | TCooAirMix_nominal | 303.15 | Mixed air temperature during cooling nominal conditions (used to size cooling coil) [K] |
Temperature | TCooAirSup_nominal | 285.15 | Supply air temperature during cooling nominal conditions (used to size cooling coil) [K] |
MassFraction | wCooAirMix_nominal | 0.017 | Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total) [1] |
Temperature | TCooWatInl_nominal | 279.15 | Cooling coil nominal inlet water temperature [K] |
Temperature | THeaAirMix_nominal | 277.15 | Mixed air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaAirSup_nominal | 285.15 | Supply air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaWatInl_nominal | | Reheat coil nominal inlet water temperature [K] |
Connectors
Modelica definition
model ASHRAE2006
extends Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC(amb(nPorts=3));
parameter Real ratVMinVAV_flow[numZon](
each final unit="1") = {
max(1.5*
VZonOA_flow_nominal[i]/mCooVAV_flow_nominal[i]/1.2, 0.15)
for i
in 1:numZon}
;
Controls.FanVFD conFanSup(
xSet_nominal(
unit="Pa",
displayUnit="Pa") = 410,
r_N_min=yFanMin)
;
Controls.ModeSelector modeSelector;
Controls.ControlBus controlBus;
Controls.Economizer conEco(
have_reset=true,
have_frePro=true,
VOut_flow_min=Vot_flow_nominal)
;
Controls.RoomTemperatureSetpoint TSetRoo(
final THeaOn=THeaOn,
final THeaOff=THeaOff,
final TCooOn=TCooOn,
final TCooOff=TCooOff);
Controls.DuctStaticPressureSetpoint pSetDuc(
nin=5,
pMin=50) ;
Controls.RoomVAV conVAV[numZon](
have_preIndDam=
fill(false, numZon),
ratVFloMin=ratVMinVAV_flow,
ratVFloHea=mHeaVAV_flow_nominal ./ mCooVAV_flow_nominal,
V_flow_nominal=mCooVAV_flow_nominal/1.2)
;
Buildings.Controls.OBC.CDL.Logical.Or or2;
Controls.SupplyAirTemperature conTSup
;
Controls.SupplyAirTemperatureSetpoint TSupSet
;
Buildings.Fluid.Actuators.Dampers.Exponential damExh(
from_dp=false,
riseTime=15,
dpFixed_nominal=5,
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_flow_nominal,
dpDamper_nominal=5) ;
Controls.SystemHysteresis sysHysHea
;
Controls.SystemHysteresis sysHysCoo
;
Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaPum
;
Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaVal
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFreHeaCoi(
final k=1.0)
;
Buildings.Controls.OBC.CDL.Reals.MultiMin TRooMin(
final nin=numZon,
u(
each final unit="K",
each displayUnit="degC"),
y(
final unit="K",
displayUnit="degC"))
;
Utilities.Math.Average TRooAve(
final nin=numZon,
u(
each final unit="K",
each displayUnit="degC"),
y(
final unit="K",
displayUnit="degC")) ;
Controls.FreezeStat freSta ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TRooHeaSet(
final nout=
numZon) ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TRooCooSet(
final nout=
numZon) ;
equation
connect(controlBus, modeSelector.cb);
connect(TRooAve.y, controlBus.TRooAve);
connect(TRet.T, conEco.TRet);
connect(TSetRoo.controlBus, controlBus);
connect(dpDisSupFan.p_rel, conFanSup.u_m);
connect(pSetDuc.y, conFanSup.u);
connect(conEco.VOut_flow, VOut1.V_flow);
connect(occSch.tNexOcc, controlBus.dTNexOcc);
connect(occSch.occupied, controlBus.occupied);
connect(TOut.y, controlBus.TOut);
connect(conEco.controlBus, controlBus);
connect(modeSelector.yFan, conFanSup.uFan);
connect(conFanSup.y, fanSup.y);
connect(or2.u2, modeSelector.yFan);
connect(VAVBox.y_actual, pSetDuc.u);
connect(TSup.T, conTSup.TSup);
connect(conTSup.yOA, conEco.uOATSup);
connect(or2.y, conTSup.uEna);
connect(modeSelector.yEco, conEco.uEna);
connect(TMix.T, conEco.TMix);
connect(controlBus, TSupSet.controlBus);
connect(TSupSet.TSet, conTSup.TSupSet);
connect(damRet.y, conEco.yRet);
connect(damExh.y, conEco.yOA);
connect(damOut.y, conEco.yOA);
connect(damExh.port_a, TRet.port_b);
connect(freSta.y, or2.u1);
connect(conTSup.yHea, sysHysHea.u);
connect(conTSup.yCoo, sysHysCoo.u);
connect(sysHysCoo.y, valCooCoi.y);
connect(sysHysCoo.yPum, pumCooCoi.y);
connect(sysHysCoo.sysOn, modeSelector.yFan);
connect(sysHysHea.sysOn, modeSelector.yFan);
connect(yFreHeaCoi.y, swiFreStaPum.u1);
connect(yFreHeaCoi.y, swiFreStaVal.u1);
connect(freSta.y, swiFreStaPum.u2);
connect(freSta.y, swiFreStaVal.u2);
connect(sysHysHea.y, swiFreStaVal.u3);
connect(sysHysHea.yPum, swiFreStaPum.u3);
connect(swiFreStaPum.y, pumHeaCoi.y);
connect(swiFreStaVal.y, valHeaCoi.y);
connect(TRooMin.y, controlBus.TRooMin);
connect(TRooMin.u, TRoo);
connect(TRooAve.u, TRoo);
connect(freSta.u, TMix.T);
connect(damExh.port_b, amb.ports[3]);
connect(TRoo, conVAV.TRoo);
connect(controlBus.TRooSetHea, TRooHeaSet.u);
connect(controlBus.TRooSetCoo, TRooCooSet.u);
connect(TRooHeaSet.y, conVAV.TRooHeaSet);
connect(TRooCooSet.y, conVAV.TRooCooSet);
connect(conVAV.yDam, VAVBox.yVAV);
connect(conVAV.yVal, VAVBox.yHea);
connect(VAVBox.VSup_flow, conVAV.VDis_flow);
end ASHRAE2006;
Model of a floor of the building
Information
Model of a floor that consists
of five thermal zones.
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.
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] |
Length | wExtSou | 49.91 | South zone exterior wall width [m] |
Length | wExtNor | 49.91 | North zone exterior wall width [m] |
Length | wExtEas | 33.27 | East zone exterior wall width [m] |
Length | wExtWes | 33.27 | West zone exterior wall width [m] |
InteriorConvection | intConMod | Buildings.HeatTransfer.Types... | Convective heat transfer model for room-facing surfaces of opaque constructions |
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 Modelica.Units.SI.Length wExtSou=49.91
;
parameter Modelica.Units.SI.Length wExtNor=49.91
;
parameter Modelica.Units.SI.Length wExtEas=33.27
;
parameter Modelica.Units.SI.Length wExtWes=33.27
;
parameter HeatTransfer.Types.InteriorConvection intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature
;
parameter Real winWalRat(
min=0.01,
max=0.99) = 0.33 ;
parameter Modelica.Units.SI.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.Units.SI.Height hRoo=2.74 ;
parameter Boolean sampleModel = false
;
Buildings.ThermalZones.Detailed.MixedAir sou(
redeclare package Medium =
Medium,
AFlo=AFloSou,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={wExtSou*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*wExtSou*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,
AFlo=AFloEas,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={wExtEas*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*wExtEas*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,
AFlo=AFloNor,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={wExtNor*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*wExtNor*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,
AFlo=AFloWes,
hRoo=hRoo,
nConExt=0,
nConExtWin=1,
datConExtWin(
layers={conExtWal},
A={wExtEas*hRoo},
glaSys={glaSys},
wWin={winWalRat/hWin*wExtEas*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,
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(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;
Variable air volume flow system with terminal reheat and Guideline 36 control sequence serving five thermal zones
Information
This model consist of an 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.
See the model
Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC
for a description of the HVAC system.
The control is based on ASHRAE Guideline 36, and implemented
using the sequences from the library
Buildings.Controls.OBC.ASHRAE.G36 for
multi-zone VAV systems with economizer.
The figures below shows the schematic diagram and controls of an HVAC system that supplies 5 zones:
A similar model but with a different control sequence can be found in
Buildings.Examples.VAVReheat.ASHRAE2006.
Note that this model, because of the frequent time sampling,
has longer computing time than
Buildings.Examples.VAVReheat.ASHRAE2006.
The reason is that the time integrator cannot make large steps
because it needs to set a time step each time the control samples
its input.
Extends from Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC (Partial model of variable air volume flow system with terminal reheat that serves five thermal zones).
Parameters
Type | Name | Default | Description |
replaceable package MediumA | Air | Medium model for air |
replaceable package MediumW | Water | Medium model for water |
Volume | VRoo[numZon] | | Room volume per zone [m3] |
Area | AFlo[numZon] | | Floor area per zone [m2] |
HeatFlowRate | QHeaAHU_flow_nominal | mHeaAir_flow_nominal*cpAir*(... | Nominal heating heat flow rate of air handler unit coil [W] |
HeatFlowRate | QCooAHU_flow_nominal | 1.3*mCooAir_flow_nominal*cpA... | Nominal total cooling heat flow rate of air handler unit coil (negative number) [W] |
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 | VZonOA_flow_nominal[numZon] | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate of each VAV box [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] |
PressureDifference | dpBuiStaSet | 12 | Building static pressure [Pa] |
Real | yFanMin | 0.1 | Minimum fan speed |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Time | samplePeriod | 120 | Sample period of component, set to the same value as the trim and respond that process yPreSetReq [s] |
PressureDifference | dpDisRetMax | 40 | Maximum return fan discharge static pressure setpoint [Pa] |
Nominal mass flow rate |
MassFlowRate | mCooVAV_flow_nominal[numZon] | | Design mass flow rate per zone for cooling [kg/s] |
MassFlowRate | mHeaVAV_flow_nominal[numZon] | 0.3*mCooVAV_flow_nominal | Design mass flow rate per zone for heating [kg/s] |
MassFlowRate | mAir_flow_nominal | mCooAir_flow_nominal | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mCooAir_flow_nominal | 0.7*sum(mCooVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaAir_flow_nominal | 0.7*sum(mHeaVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaWat_flow_nominal | QHeaAHU_flow_nominal/cpWat/10 | Nominal water mass flow rate for heating coil in AHU [kg/s] |
MassFlowRate | mCooWat_flow_nominal | QCooAHU_flow_nominal/cpWat/(... | Nominal water mass flow rate for cooling coil [kg/s] |
Room temperature setpoints |
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] |
Air handler unit nominal temperatures and humidity |
Temperature | TCooAirMix_nominal | 303.15 | Mixed air temperature during cooling nominal conditions (used to size cooling coil) [K] |
Temperature | TCooAirSup_nominal | 285.15 | Supply air temperature during cooling nominal conditions (used to size cooling coil) [K] |
MassFraction | wCooAirMix_nominal | 0.017 | Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total) [1] |
Temperature | TCooWatInl_nominal | 279.15 | Cooling coil nominal inlet water temperature [K] |
Temperature | THeaAirMix_nominal | 277.15 | Mixed air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaAirSup_nominal | 285.15 | Supply air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaWatInl_nominal | | Reheat coil nominal inlet water temperature [K] |
Connectors
Type | Name | Description |
FluidPort_a | port_supAir[numZon] | Supply air to thermal zones |
FluidPort_a | port_retAir[numZon] | Return air from thermal zones |
input RealInput | TRoo[numZon] | Room temperatures [K] |
Bus | weaBus | Weather data bus |
FluidPort_a | portHeaCoiSup | Heating coil loop supply |
FluidPort_b | portHeaCoiRet | Heating coil loop return |
FluidPort_a | portHeaTerSup | Terminal heat loop supply |
FluidPort_b | portHeaTerRet | Terminal heat loop return |
FluidPort_a | portCooCoiSup | Cooling coil loop supply |
FluidPort_b | portCooCoiRet | Coolin coil loop return |
Modelica definition
model Guideline36
extends Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC(
damOut(
dpDamper_nominal=10,
dpFixed_nominal=10),
amb(nPorts=3));
parameter Modelica.Units.SI.Time samplePeriod=120
;
parameter Modelica.Units.SI.PressureDifference dpDisRetMax(displayUnit="Pa")=
40 ;
Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaPum
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant yFreHeaCoi(
final k=1.0)
;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant warCooTim[numZon](
final k=
fill(1800, numZon)) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant falSta[numZon](
final k=
fill(false, numZon)) ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator reaRep(nout=numZon)
;
Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booRep(nout=numZon)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant demLimLev[numZon](
final k=
fill(0, numZon)) ;
Buildings.Examples.VAVReheat.BaseClasses.Controls.SystemHysteresis sysHysHea
;
Buildings.Examples.VAVReheat.BaseClasses.Controls.SystemHysteresis sysHysCoo
;
Buildings.Controls.OBC.CDL.Reals.Switch swiFreStaVal
;
Buildings.Examples.VAVReheat.BaseClasses.Controls.FreezeStat freSta(lockoutTime=3600)
;
Buildings.Controls.OBC.Utilities.OptimalStart optSta[numZon](
each computeHeating=true,
each computeCooling=true) ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator tZonNexOcc(nout=
numZon) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccHeaSet[numZon](
each k(
unit="K",
displayUnit="degC") = 293.15) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TOccCooSet[numZon](
each k(
unit="K",
displayUnit="degC") = 297.15) ;
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.Controller conAHU(
final eneStd=Buildings.Controls.OBC.ASHRAE.G36.Types.EnergyStandard.ASHRAE90_1,
final venStd=Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1,
final ashCliZon=Buildings.Controls.OBC.ASHRAE.G36.Types.ASHRAEClimateZone.Zone_5A,
final freSta=Buildings.Controls.OBC.ASHRAE.G36.Types.FreezeStat.No_freeze_stat,
final minOADes=Buildings.Controls.OBC.ASHRAE.G36.Types.OutdoorAirSection.SingleDamper,
final buiPreCon=Buildings.Controls.OBC.ASHRAE.G36.Types.BuildingPressureControlTypes.BarometricRelief,
final ecoHigLimCon=Buildings.Controls.OBC.ASHRAE.G36.Types.ControlEconomizer.FixedDryBulb,
final have_perZonRehBox=true,
final VUncDesOutAir_flow=0.644,
final VDesTotOutAir_flow=1.107) ;
Buildings.Controls.OBC.ASHRAE.G36.AHUs.MultiZone.VAV.SetPoints.OutdoorAirFlow.ASHRAE62_1.SumZone
sumZon(
final nZon=numZon,
final nGro=1,
final zonGroMat=[1,1,1,1,1],
final zonGroMatTra=[1; 1; 1; 1; 1])
;
Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.OperationMode opeModSel(
final nZon=numZon) ;
Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneStatus zonSta[numZon]
;
Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.GroupStatus groSta(
final nBuiZon=
numZon)
;
Buildings.Controls.OBC.ASHRAE.G36.ThermalZones.Setpoints TZonSet[numZon](
final have_occSen=
fill(false, numZon),
final have_winSen=
fill(false, numZon),
final have_locAdj=
fill(false, numZon)) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoHeaSet[numZon](
each k(
unit="K",
displayUnit="degC") = 285.15) ;
Buildings.Controls.OBC.CDL.Reals.Sources.Constant TUnoCooSet[numZon](
each k(
unit="K",
displayUnit="degC") = 303.15) ;
Buildings.Controls.OBC.CDL.Routing.IntegerScalarReplicator intRep(
final nout=numZon)
;
Buildings.Controls.OBC.ASHRAE.G36.TerminalUnits.Reheat.Controller conVAV[numZon](
final venStd=
fill(Buildings.Controls.OBC.ASHRAE.G36.Types.VentilationStandard.ASHRAE62_1, numZon),
final have_winSen=
fill(false, numZon),
final have_occSen=
fill(false, numZon),
final have_CO2Sen=
fill(false, numZon),
final VAreBreZon_flow={ratOAFlo_A*AFlo[i]
for i
in 1:numZon},
final VPopBreZon_flow={ratP_A*AFlo[i]*ratOAFlo_P
for i
in 1:numZon},
final VMin_flow={
max(1.5*VZonOA_flow_nominal[i], 0.15*mCooVAV_flow_nominal[
i]/1.2)
for i
in 1:numZon},
final VCooMax_flow=mCooVAV_flow_nominal/1.2,
final VHeaMin_flow=
fill(0, numZon),
final VHeaMax_flow=mHeaVAV_flow_nominal/1.2,
final VAreMin_flow=
fill(0, numZon),
final VOccMin_flow=
fill(0, numZon),
floHys=
fill(0.01, numZon)) ;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TSupAHU(
final nout=numZon)
;
Buildings.Controls.OBC.CDL.Routing.RealScalarReplicator TSupAHUSet(
final nout=numZon)
;
Buildings.Controls.OBC.CDL.Integers.Sources.Constant oveRid[numZon](
final k=
fill(0, numZon))
;
Buildings.Controls.OBC.CDL.Routing.BooleanScalarReplicator booScaRep(
final nout=numZon) ;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant hotWatPla[numZon](
final k=
fill(true, numZon)) ;
Buildings.Controls.OBC.CDL.Integers.MultiSum preRetReq(
final nin=numZon)
;
Buildings.Controls.OBC.CDL.Integers.MultiSum temResReq(
final nin=numZon)
;
Buildings.Controls.OBC.CDL.Logical.FallingEdge falEdg
;
Buildings.Controls.OBC.ASHRAE.G36.ZoneGroups.ZoneGroupSystem ahuMod(
final nGro=1)
;
Buildings.Controls.OBC.CDL.Logical.Sources.Constant truSta[numZon](
final k=
fill(true, numZon))
;
equation
connect(yFreHeaCoi.y, swiFreStaPum.u1);
connect(occSch.tNexOcc, reaRep.u);
connect(occSch.occupied, booRep.u);
connect(freSta.y, swiFreStaPum.u2);
connect(sysHysCoo.y, valCooCoi.y);
connect(sysHysCoo.yPum, pumCooCoi.y);
connect(swiFreStaPum.y, pumHeaCoi.y);
connect(swiFreStaVal.u1, yFreHeaCoi.y);
connect(sysHysHea.y, swiFreStaVal.u3);
connect(sysHysHea.yPum, swiFreStaPum.u3);
connect(freSta.y, swiFreStaVal.u2);
connect(swiFreStaVal.y, valHeaCoi.y);
connect(TMix.T, freSta.u);
connect(TRet.port_b, amb.ports[3]);
connect(optSta.TZon, TRoo);
connect(occSch.tNexOcc, tZonNexOcc.u);
connect(tZonNexOcc.y, optSta.tNexOcc);
connect(optSta.TSetZonCoo,TOccCooSet. y);
connect(optSta.TSetZonHea,TOccHeaSet. y);
connect(zonSta.yCooTim, groSta.uCooTim);
connect(zonSta.yWarTim, groSta.uWarTim);
connect(zonSta.yOccHeaHig, groSta.u1OccHeaHig);
connect(zonSta.yHigOccCoo, groSta.u1HigOccCoo);
connect(zonSta.yUnoHeaHig, groSta.u1UnoHeaHig);
connect(zonSta.yEndSetBac, groSta.u1EndSetBac);
connect(zonSta.yHigUnoCoo, groSta.u1HigUnoCoo);
connect(zonSta.yEndSetUp, groSta.u1EndSetUp);
connect(falSta.y, groSta.zonOcc);
connect(optSta.tOpt, zonSta.cooDowTim);
connect(optSta.tOpt, zonSta.warUpTim);
connect(TOccHeaSet.y, zonSta.TOccHeaSet);
connect(TOccCooSet.y, zonSta.TOccCooSet);
connect(TUnoHeaSet.y, zonSta.TUnoHeaSet);
connect(TUnoCooSet.y, zonSta.TUnoCooSet);
connect(TRoo, zonSta.TZon);
connect(TRoo, groSta.TZon);
connect(booRep.y, groSta.u1Occ);
connect(reaRep.y, groSta.tNexOcc);
connect(groSta.uGroOcc, opeModSel.u1Occ);
connect(groSta.nexOcc, opeModSel.tNexOcc);
connect(groSta.yCooTim, opeModSel.maxCooDowTim);
connect(groSta.yOccHeaHig, opeModSel.u1OccHeaHig);
connect(groSta.yHigOccCoo, opeModSel.u1HigOccCoo);
connect(groSta.yWarTim, opeModSel.maxWarUpTim);
connect(groSta.yColZon, opeModSel.totColZon);
connect(groSta.yOpeWin, opeModSel.uOpeWin);
connect(groSta.ySetBac, opeModSel.u1SetBac);
connect(groSta.yEndSetBac, opeModSel.u1EndSetBac);
connect(groSta.TZonMin, opeModSel.TZonMin);
connect(groSta.yHotZon, opeModSel.totHotZon);
connect(groSta.ySetUp, opeModSel.u1SetUp);
connect(groSta.yEndSetUp, opeModSel.u1EndSetUp);
connect(opeModSel.yOpeMod, intRep.u);
connect(intRep.y, TZonSet.uOpeMod);
connect(TOccCooSet.y, TZonSet.TOccCooSet);
connect(TUnoCooSet.y, TZonSet.TUnoCooSet);
connect(TOccHeaSet.y, TZonSet.TOccHeaSet);
connect(TUnoHeaSet.y, TZonSet.TUnoHeaSet);
connect(demLimLev.y, TZonSet.uCooDemLimLev);
connect(demLimLev.y, TZonSet.uHeaDemLimLev);
connect(TRoo, conVAV.TZon);
connect(TZonSet.TCooSet, conVAV.TCooSet);
connect(TZonSet.THeaSet, conVAV.THeaSet);
connect(intRep.y, conVAV.uOpeMod);
connect(VAVBox.TSup, conVAV.TDis);
connect(VAVBox.VSup_flow, conVAV.VDis_flow);
connect(TSup.T, TSupAHU.u);
connect(TSupAHU.y, conVAV.TSup);
connect(conAHU.TAirSupSet, TSupAHUSet.u);
connect(TSupAHUSet.y, conVAV.TSupSet);
connect(oveRid.y, conVAV.oveFloSet);
connect(oveRid.y, conVAV.oveDamPos);
connect(falSta.y, conVAV.uHeaOff);
connect(conAHU.y1SupFan, booScaRep.u);
connect(booScaRep.y, conVAV.u1Fan);
connect(conVAV.VAdjPopBreZon_flow, sumZon.VAdjPopBreZon_flow);
connect(conVAV.VAdjAreBreZon_flow, sumZon.VAdjAreBreZon_flow);
connect(conVAV.VMinOA_flow, sumZon.VMinOA_flow);
connect(VAVBox.VSup_flow, sumZon.VZonPri_flow);
connect(conVAV.yVal, VAVBox.yHea);
connect(conVAV.yDam, VAVBox.yVAV);
connect(sumZon.VSumAdjPopBreZon_flow, conAHU.VSumAdjPopBreZon_flow);
connect(sumZon.VSumAdjAreBreZon_flow, conAHU.VSumAdjAreBreZon_flow);
connect(sumZon.VSumZonPri_flow, conAHU.VSumZonPri_flow);
connect(sumZon.uOutAirFra_max, conAHU.uOutAirFra_max);
connect(dpDisSupFan.p_rel, conAHU.dpDuc);
connect(TOut.y, conAHU.TOut);
connect(TMix.T, conAHU.TAirMix);
connect(VOut1.V_flow, conAHU.VAirOut_flow);
connect(TSup.T, conAHU.TAirSup);
connect(conAHU.yHeaCoi, sysHysHea.u);
connect(conAHU.yCooCoi, sysHysCoo.u);
connect(conAHU.y1SupFan, sysHysHea.sysOn);
connect(conAHU.y1SupFan, sysHysCoo.sysOn);
connect(valHeaCoi.y_actual, conAHU.uHeaCoi_actual);
connect(valCooCoi.y_actual, conAHU.uCooCoi_actual);
connect(conAHU.yRetDam, damRet.y);
connect(conAHU.yOutDam, damOut.y);
connect(conAHU.ySupFan, fanSup.y);
connect(hotWatPla.y, conVAV.u1HotPla);
connect(conAHU.y1SupFan, conAHU.u1SupFan);
connect(conVAV.yZonTemResReq, temResReq.u);
connect(conVAV.yZonPreResReq, preRetReq.u);
connect(preRetReq.y, conAHU.uZonPreResReq);
connect(temResReq.y, conAHU.uZonTemResReq);
connect(freSta.y, falEdg.u);
connect(falEdg.y, conAHU.u1SofSwiRes);
connect(opeModSel.yOpeMod, sumZon.uOpeMod[1]);
connect(opeModSel.yOpeMod, ahuMod.uOpeMod[1]);
connect(ahuMod.yAhuOpeMod, conAHU.uAhuOpeMod);
connect(TUnoCooSet.y, groSta.TCooSetOff);
connect(TUnoHeaSet.y, groSta.THeaSetOff);
connect(truSta.y, groSta.u1Win);
end Guideline36;
Partial model that contains the HVAC and building model
Information
Partial model that contains an HVAC system connected to a building
with five conditioned thermal zones.
Parameters
Type | Name | Default | Description |
replaceable package MediumA | Buildings.Media.Air | Medium model for air |
replaceable package MediumW | Buildings.Media.Water | Medium model for water |
MassFlowRate | mCor_flow_nominal | | Design mass flow rate core [kg/s] |
MassFlowRate | mSou_flow_nominal | | Design mass flow rate south [kg/s] |
MassFlowRate | mEas_flow_nominal | | Design mass flow rate east [kg/s] |
MassFlowRate | mNor_flow_nominal | | Design mass flow rate north [kg/s] |
MassFlowRate | mWes_flow_nominal | | Design mass flow rate west [kg/s] |
Temperature | THeaWatInl_nominal | 45 + 273.15 | Reheat coil nominal inlet water temperature [K] |
PartialHVAC | hvac | redeclare Buildings.Examples... | HVAC system |
PartialFloor | flo | redeclare Buildings.Examples... | Building |
Connectors
Type | Name | Description |
replaceable package MediumA | Medium model for air |
replaceable package MediumW | Medium model for water |
Modelica definition
partial model HVACBuilding
replaceable package MediumA =
Buildings.Media.Air ;
replaceable package MediumW =
Buildings.Media.Water ;
final parameter Modelica.Units.SI.Volume VRooCor=flo.VRooCor
;
final parameter Modelica.Units.SI.Volume VRooSou=flo.VRooSou
;
final parameter Modelica.Units.SI.Volume VRooNor=flo.VRooNor
;
final parameter Modelica.Units.SI.Volume VRooEas=flo.VRooEas
;
final parameter Modelica.Units.SI.Volume VRooWes=flo.VRooWes
;
final parameter Modelica.Units.SI.Area AFloCor=flo.AFloCor
;
final parameter Modelica.Units.SI.Area AFloSou=flo.AFloSou ;
final parameter Modelica.Units.SI.Area AFloNor=flo.AFloNor ;
final parameter Modelica.Units.SI.Area AFloEas=flo.AFloEas ;
final parameter Modelica.Units.SI.Area AFloWes=flo.AFloWes ;
constant Real conv=1.2/3600 ;
parameter Modelica.Units.SI.MassFlowRate mCor_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mSou_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mEas_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mNor_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mWes_flow_nominal
;
final parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[5]={
mSou_flow_nominal,mEas_flow_nominal,mNor_flow_nominal,mWes_flow_nominal,
mCor_flow_nominal} ;
parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC")=
45 + 273.15 ;
replaceable Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC hvac
constrainedby Buildings.Examples.VAVReheat.BaseClasses.PartialHVAC(
redeclare final package MediumA =
MediumA,
redeclare final package MediumW =
MediumW,
final VRoo={VRooSou,VRooEas,VRooNor,VRooWes,VRooCor},
final AFlo={AFloSou,AFloEas,AFloNor,AFloWes,AFloCor},
final mCooVAV_flow_nominal=mCooVAV_flow_nominal,
final THeaWatInl_nominal=THeaWatInl_nominal) ;
replaceable Buildings.Examples.VAVReheat.BaseClasses.PartialFloor
flo
constrainedby Buildings.Examples.VAVReheat.BaseClasses.PartialFloor(
redeclare final package Medium =
MediumA)
;
Buildings.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
filNam=
Modelica.Utilities.Files.loadResource(
"modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"),
computeWetBulbTemperature=false) ;
Fluid.Sources.Boundary_pT sinHea(
redeclare package Medium =
MediumW,
p=300000,
T=THeaWatInl_nominal,
nPorts=1) ;
Fluid.Sources.Boundary_pT souHea(
redeclare package Medium =
MediumW,
p(displayUnit="Pa") = 300000 + 6000,
T=THeaWatInl_nominal,
nPorts=1) ;
Fluid.Sources.Boundary_pT sinCoo(
redeclare package Medium =
MediumW,
p=300000,
T=279.15,
nPorts=1) ;
Fluid.Sources.Boundary_pT souCoo(
redeclare package Medium =
MediumW,
p(displayUnit="Pa") = 300000 + 6000,
T=279.15,
nPorts=1) ;
Fluid.Sources.Boundary_pT souHeaTer(
redeclare package Medium =
MediumW,
p(displayUnit="Pa") = 300000 + 6000,
T=THeaWatInl_nominal,
nPorts=1) ;
Fluid.Sources.Boundary_pT sinHeaTer(
redeclare package Medium =
MediumW,
p(displayUnit="Pa") = 300000,
T=THeaWatInl_nominal,
nPorts=1) ;
equation
connect(souHea.ports[1], hvac.portHeaCoiSup);
connect(sinHea.ports[1], hvac.portHeaCoiRet);
connect(hvac.portHeaTerSup, souHeaTer.ports[1]);
connect(hvac.portHeaTerRet, sinHeaTer.ports[1]);
connect(weaDat.weaBus, hvac.weaBus);
connect(flo.TRooAir, hvac.TRoo);
connect(hvac.port_supAir[1], flo.portsSou[1]);
connect(hvac.port_supAir[2], flo.portsEas[1]);
connect(hvac.port_supAir[3], flo.portsNor[1]);
connect(hvac.port_supAir[4], flo.portsWes[1]);
connect(hvac.port_supAir[5], flo.portsCor[1]);
connect(hvac.port_retAir[1], flo.portsSou[2]);
connect(hvac.port_retAir[2], flo.portsEas[2]);
connect(hvac.port_retAir[3], flo.portsNor[2]);
connect(hvac.port_retAir[4], flo.portsWes[2]);
connect(hvac.port_retAir[5], flo.portsCor[2]);
connect(weaDat.weaBus, flo.weaBus);
connect(souCoo.ports[1], hvac.portCooCoiSup);
connect(sinCoo.ports[1], hvac.portCooCoiRet);
end HVACBuilding;
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.Units.SI.Volume VRooCor ;
parameter Modelica.Units.SI.Volume VRooSou ;
parameter Modelica.Units.SI.Volume VRooNor ;
parameter Modelica.Units.SI.Volume VRooEas ;
parameter Modelica.Units.SI.Volume VRooWes ;
parameter Modelica.Units.SI.Area AFloCor ;
parameter Modelica.Units.SI.Area AFloSou ;
parameter Modelica.Units.SI.Area AFloNor ;
parameter Modelica.Units.SI.Area AFloEas ;
parameter Modelica.Units.SI.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 that serves five thermal zones
Information
This partial model consist of an HVAC system that serves multiple thermal zones.
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 zone inlet branches.
The figure below shows the schematic diagram of an HVAC system that supplies 5 zones:
The control sequences for this HVAC system are added in
the two models that extend this model, namely
Buildings.Examples.VAVReheat.ASHRAE2006
and
Buildings.Examples.VAVReheat.Guideline36.
Parameters
Type | Name | Default | Description |
replaceable package MediumA | Buildings.Media.Air | Medium model for air |
replaceable package MediumW | Buildings.Media.Water | Medium model for water |
Volume | VRoo[numZon] | | Room volume per zone [m3] |
Area | AFlo[numZon] | | Floor area per zone [m2] |
HeatFlowRate | QHeaAHU_flow_nominal | mHeaAir_flow_nominal*cpAir*(... | Nominal heating heat flow rate of air handler unit coil [W] |
HeatFlowRate | QCooAHU_flow_nominal | 1.3*mCooAir_flow_nominal*cpA... | Nominal total cooling heat flow rate of air handler unit coil (negative number) [W] |
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 | VZonOA_flow_nominal[numZon] | (ratOAFlo_P*ratP_A + ratOAFl... | Zone outdoor air flow rate of each VAV box [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] |
PressureDifference | dpBuiStaSet | 12 | Building static pressure [Pa] |
Real | yFanMin | 0.1 | Minimum fan speed |
Boolean | allowFlowReversal | true | = false to simplify equations, assuming, but not enforcing, no flow reversal |
Nominal mass flow rate |
MassFlowRate | mCooVAV_flow_nominal[numZon] | | Design mass flow rate per zone for cooling [kg/s] |
MassFlowRate | mHeaVAV_flow_nominal[numZon] | 0.3*mCooVAV_flow_nominal | Design mass flow rate per zone for heating [kg/s] |
MassFlowRate | mAir_flow_nominal | mCooAir_flow_nominal | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mCooAir_flow_nominal | 0.7*sum(mCooVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaAir_flow_nominal | 0.7*sum(mHeaVAV_flow_nominal) | Nominal mass flow rate for fan [kg/s] |
MassFlowRate | mHeaWat_flow_nominal | QHeaAHU_flow_nominal/cpWat/10 | Nominal water mass flow rate for heating coil in AHU [kg/s] |
MassFlowRate | mCooWat_flow_nominal | QCooAHU_flow_nominal/cpWat/(... | Nominal water mass flow rate for cooling coil [kg/s] |
Room temperature setpoints |
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] |
Air handler unit nominal temperatures and humidity |
Temperature | TCooAirMix_nominal | 303.15 | Mixed air temperature during cooling nominal conditions (used to size cooling coil) [K] |
Temperature | TCooAirSup_nominal | 285.15 | Supply air temperature during cooling nominal conditions (used to size cooling coil) [K] |
MassFraction | wCooAirMix_nominal | 0.017 | Humidity ratio of mixed air at a nominal conditions used to size cooling coil (in kg/kg dry total) [1] |
Temperature | TCooWatInl_nominal | 279.15 | Cooling coil nominal inlet water temperature [K] |
Temperature | THeaAirMix_nominal | 277.15 | Mixed air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaAirSup_nominal | 285.15 | Supply air temperature during heating nominal conditions (used to size heating coil) [K] |
Temperature | THeaWatInl_nominal | | Reheat coil nominal inlet water temperature [K] |
Connectors
Type | Name | Description |
replaceable package MediumA | Medium model for air |
replaceable package MediumW | Medium model for water |
FluidPort_a | port_supAir[numZon] | Supply air to thermal zones |
FluidPort_a | port_retAir[numZon] | Return air from thermal zones |
input RealInput | TRoo[numZon] | Room temperatures [K] |
Bus | weaBus | Weather data bus |
FluidPort_a | portHeaCoiSup | Heating coil loop supply |
FluidPort_b | portHeaCoiRet | Heating coil loop return |
FluidPort_a | portHeaTerSup | Terminal heat loop supply |
FluidPort_b | portHeaTerRet | Terminal heat loop return |
FluidPort_a | portCooCoiSup | Cooling coil loop supply |
FluidPort_b | portCooCoiRet | Coolin coil loop return |
Modelica definition
partial model PartialHVAC
replaceable package MediumA =
Buildings.Media.Air
constrainedby Modelica.Media.Interfaces.PartialCondensingGases ;
replaceable package MediumW =
Buildings.Media.Water ;
constant Integer numZon(min=2)=5 ;
parameter Modelica.Units.SI.Volume VRoo[numZon] ;
parameter Modelica.Units.SI.Area AFlo[numZon] ;
final parameter Modelica.Units.SI.Area ATot=
sum(AFlo)
;
constant Real conv=1.2/3600 ;
parameter Modelica.Units.SI.HeatFlowRate QHeaAHU_flow_nominal(min=0) = mHeaAir_flow_nominal * cpAir * (THeaAirSup_nominal-THeaAirMix_nominal)
;
parameter Modelica.Units.SI.HeatFlowRate QCooAHU_flow_nominal(max=0) = 1.3 * mCooAir_flow_nominal * cpAir *(TCooAirSup_nominal-TCooAirMix_nominal)
;
parameter Modelica.Units.SI.MassFlowRate mCooVAV_flow_nominal[numZon]
;
parameter Modelica.Units.SI.MassFlowRate mHeaVAV_flow_nominal[numZon] = 0.3*mCooVAV_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=mCooAir_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mCooAir_flow_nominal=0.7*
sum(mCooVAV_flow_nominal)
;
parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal = 0.7*
sum(mHeaVAV_flow_nominal)
;
parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal=
QHeaAHU_flow_nominal/cpWat/10
;
parameter Modelica.Units.SI.MassFlowRate mCooWat_flow_nominal=
QCooAHU_flow_nominal/cpWat/(-6)
;
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.Units.SI.VolumeFlowRate VZonOA_flow_nominal[numZon]=(
ratOAFlo_P*ratP_A + ratOAFlo_A)*AFlo/effZ
;
parameter Modelica.Units.SI.VolumeFlowRate Vou_flow_nominal=(divP*ratOAFlo_P*
ratP_A + ratOAFlo_A)*
sum(AFlo) ;
parameter Real effVen(
final unit="1") =
if divP < 0.6
then
0.88 * divP + 0.22
else 0.75
;
parameter Modelica.Units.SI.VolumeFlowRate Vot_flow_nominal=Vou_flow_nominal/
effVen ;
parameter Modelica.Units.SI.Temperature THeaOn=293.15
;
parameter Modelica.Units.SI.Temperature THeaOff=285.15
;
parameter Modelica.Units.SI.Temperature TCooOn=297.15
;
parameter Modelica.Units.SI.Temperature TCooOff=303.15
;
parameter Modelica.Units.SI.PressureDifference dpBuiStaSet(min=0) = 12
;
parameter Real yFanMin = 0.1 ;
parameter Modelica.Units.SI.Temperature TCooAirMix_nominal(displayUnit="degC")=303.15
;
parameter Modelica.Units.SI.Temperature TCooAirSup_nominal(displayUnit="degC")=285.15
;
parameter Modelica.Units.SI.MassFraction wCooAirMix_nominal = 0.017
;
parameter Modelica.Units.SI.Temperature TCooWatInl_nominal(displayUnit="degC") = 279.15
;
parameter Modelica.Units.SI.Temperature THeaAirMix_nominal(displayUnit="degC")=277.15
;
parameter Modelica.Units.SI.Temperature THeaAirSup_nominal(displayUnit="degC")=285.15
;
parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(displayUnit="degC")
;
parameter Boolean allowFlowReversal=true
;
Modelica.Fluid.Interfaces.FluidPort_a port_supAir[numZon](
redeclare package
Medium =
MediumA)
;
Modelica.Fluid.Interfaces.FluidPort_a port_retAir[numZon](
redeclare package
Medium =
MediumA)
;
Modelica.Blocks.Interfaces.RealInput TRoo[numZon](
each final unit="K",
each displayUnit="degC")
;
Buildings.Fluid.Sources.Outside amb(
redeclare package Medium =
MediumA,
nPorts=2) ;
Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU heaCoi(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumA,
Q_flow_nominal=QHeaAHU_flow_nominal,
m1_flow_nominal=mHeaWat_flow_nominal,
m2_flow_nominal=mHeaAir_flow_nominal,
show_T=true,
configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow,
dp1_nominal=3000,
dp2_nominal=0,
allowFlowReversal1=false,
allowFlowReversal2=allowFlowReversal,
T_a1_nominal=THeaWatInl_nominal,
T_a2_nominal=THeaAirMix_nominal)
;
Fluid.HeatExchangers.WetCoilEffectivenessNTU cooCoi(
redeclare package Medium1 =
MediumW,
redeclare package Medium2 =
MediumA,
use_Q_flow_nominal=true,
Q_flow_nominal=QCooAHU_flow_nominal,
m1_flow_nominal=mCooWat_flow_nominal,
m2_flow_nominal=mCooAir_flow_nominal,
dp2_nominal=0,
dp1_nominal=3000,
T_a1_nominal=TCooWatInl_nominal,
T_a2_nominal=TCooAirMix_nominal,
w_a2_nominal=wCooAirMix_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
allowFlowReversal1=false,
allowFlowReversal2=allowFlowReversal,
show_T=true) ;
Buildings.Fluid.FixedResistances.PressureDrop dpRetDuc(
m_flow_nominal=mAir_flow_nominal,
redeclare package Medium =
MediumA,
allowFlowReversal=allowFlowReversal,
dp_nominal=40) ;
Buildings.Fluid.Movers.Preconfigured.SpeedControlled_y fanSup(
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_flow_nominal,
dp_nominal=780 + 10 + dpBuiStaSet,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) ;
Buildings.Fluid.Sensors.VolumeFlowRate senSupFlo(
redeclare package Medium =
MediumA, m_flow_nominal=mAir_flow_nominal)
;
Buildings.Fluid.Sensors.VolumeFlowRate senRetFlo(
redeclare package Medium =
MediumA, m_flow_nominal=mAir_flow_nominal)
;
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=mAir_flow_nominal,
allowFlowReversal=allowFlowReversal);
Buildings.Fluid.Sensors.RelativePressure dpDisSupFan(
redeclare package Medium =
MediumA) ;
Buildings.Controls.SetPoints.OccupancySchedule occSch(occupancy=3600*{6,19})
;
Buildings.Fluid.Sensors.TemperatureTwoPort TRet(
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_flow_nominal,
allowFlowReversal=allowFlowReversal) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TMix(
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_flow_nominal,
allowFlowReversal=allowFlowReversal,
transferHeat=true) ;
Buildings.Fluid.Sensors.VolumeFlowRate VOut1(
redeclare package Medium =
MediumA, m_flow_nominal=mAir_flow_nominal)
;
BoundaryConditions.WeatherData.Bus weaBus ;
Results res(
final A=ATot,
PFan=fanSup.P + 0,
PPum=pumHeaCoi.P + pumCooCoi.P,
PHea=heaCoi.Q2_flow +
sum(VAVBox.terHea.Q2_flow),
PCooSen=cooCoi.QSen2_flow,
PCooLat=cooCoi.QLat2_flow) ;
Fluid.Actuators.Dampers.Exponential damRet(
redeclare package Medium =
MediumA,
m_flow_nominal=mAir_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=mAir_flow_nominal,
from_dp=false,
riseTime=15,
dpDamper_nominal=5,
dpFixed_nominal=5) ;
Fluid.FixedResistances.Junction splCooSup(
redeclare package Medium =
MediumW,
m_flow_nominal=mCooWat_flow_nominal*{1,1,1},
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) ;
Fluid.Actuators.Valves.TwoWayEqualPercentage valCooCoi(
redeclare package Medium =
MediumW,
m_flow_nominal=mCooWat_flow_nominal,
dpValve_nominal=6000,
dpFixed_nominal=0) ;
Fluid.FixedResistances.Junction splCooRet(
redeclare package Medium =
MediumW,
m_flow_nominal=mCooWat_flow_nominal*{1,1,1},
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) ;
Fluid.Movers.Preconfigured.SpeedControlled_y pumCooCoi(
redeclare package Medium =
MediumW,
m_flow_nominal=mCooWat_flow_nominal,
dp_nominal=3000,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial) ;
Fluid.Movers.Preconfigured.SpeedControlled_y pumHeaCoi(
redeclare package Medium =
MediumW,
m_flow_nominal=mHeaWat_flow_nominal,
dp_nominal=3000,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage valHeaCoi(
redeclare package Medium =
MediumW,
m_flow_nominal=mHeaWat_flow_nominal,
dpValve_nominal=6000,
dpFixed_nominal=0) ;
Fluid.FixedResistances.Junction splHeaRet(
redeclare package Medium =
MediumW,
m_flow_nominal=mHeaWat_flow_nominal*{1,1,1},
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) ;
Fluid.FixedResistances.Junction splHeaSup(
redeclare package Medium =
MediumW,
m_flow_nominal=mHeaWat_flow_nominal*{1,1,1},
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) ;
Modelica.Fluid.Interfaces.FluidPort_a portHeaCoiSup(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_b portHeaCoiRet(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_a portHeaTerSup(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_b portHeaTerRet(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_a portCooCoiSup(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_b portCooCoiRet(
redeclare package Medium =
MediumW)
;
Buildings.Examples.VAVReheat.BaseClasses.VAVReheatBox VAVBox[numZon](
redeclare each package MediumA =
MediumA,
redeclare each package MediumW =
MediumW,
mCooAir_flow_nominal=mCooVAV_flow_nominal,
mHeaAir_flow_nominal=mHeaVAV_flow_nominal,
VRoo=VRoo,
each allowFlowReversal=allowFlowReversal,
each THeaWatInl_nominal=THeaWatInl_nominal,
each THeaWatOut_nominal=THeaWatInl_nominal - 10,
each THeaAirInl_nominal=285.15,
each THeaAirDis_nominal=301.15) ;
Buildings.Fluid.FixedResistances.Junction splRetRoo[numZon - 1](
redeclare each package Medium =
MediumA,
each from_dp=false,
each linearized=true,
m_flow_nominal={{
sum(mCooVAV_flow_nominal[i:numZon]),
sum(
mCooVAV_flow_nominal[(i + 1):numZon]),mCooVAV_flow_nominal[i]}
for i
in
1:(numZon - 1)},
each energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
each dp_nominal(
each displayUnit="Pa") = {0,0,0},
each portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
each portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
each portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering)
;
Buildings.Fluid.FixedResistances.Junction splSupRoo[numZon - 1](
redeclare each package Medium =
MediumA,
each from_dp=true,
each linearized=true,
m_flow_nominal={{
sum(mCooVAV_flow_nominal[i:numZon]),
sum(
mCooVAV_flow_nominal[(i + 1):numZon]),mCooVAV_flow_nominal[i]}
for i
in
1:(numZon - 1)},
each energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
each dp_nominal(
each displayUnit="Pa") = {0,0,0},
each portFlowDirection_1=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Entering,
each portFlowDirection_2=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving,
each portFlowDirection_3=
if allowFlowReversal
then Modelica.Fluid.Types.PortFlowDirection.Bidirectional
else Modelica.Fluid.Types.PortFlowDirection.Leaving)
;
Fluid.FixedResistances.PressureDrop dpSupDuc(
m_flow_nominal=mAir_flow_nominal,
redeclare package Medium =
MediumA,
allowFlowReversal=allowFlowReversal,
dp_nominal=200 + 200 + 100 + 40) ;
Fluid.FixedResistances.Junction splRetOut(
redeclare package Medium =
MediumA,
tau=15,
m_flow_nominal=mAir_flow_nominal*{1,1,1},
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
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.Entering,
linearized=true)
;
protected
constant Modelica.Units.SI.SpecificHeatCapacity cpAir=Buildings.Utilities.Psychrometrics.Constants.cpAir
;
constant Modelica.Units.SI.SpecificHeatCapacity cpWat=Buildings.Utilities.Psychrometrics.Constants.cpWatLiq
;
model Results
parameter Modelica.Units.SI.Area A ;
input Modelica.Units.SI.Power PFan ;
input Modelica.Units.SI.Power PPum ;
input Modelica.Units.SI.Power PHea ;
input Modelica.Units.SI.Power PCooSen ;
input Modelica.Units.SI.Power PCooLat ;
Real EFan(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real EPum(
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(EPum) = PPum;
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(weaBus.TDryBul, TOut.u);
connect(amb.weaBus, weaBus);
connect(senRetFlo.port_a, dpRetDuc.port_b);
connect(TSup.port_b, senSupFlo.port_a);
connect(dpDisSupFan.port_b, amb.ports[2]);
connect(senRetFlo.port_b, TRet.port_a);
connect(TMix.port_b, heaCoi.port_a2);
connect(heaCoi.port_b2, cooCoi.port_a2);
connect(VOut1.port_b, damOut.port_a);
connect(damRet.port_a, TRet.port_b);
connect(pumHeaCoi.port_b, heaCoi.port_a1);
connect(cooCoi.port_b1,pumCooCoi. port_a);
connect(splCooSup.port_2, cooCoi.port_a1);
connect(splCooRet.port_3,splCooSup. port_3);
connect(pumCooCoi.port_b, splCooRet.port_2);
connect(splHeaSup.port_2, pumHeaCoi.port_a);
connect(heaCoi.port_b1, splHeaRet.port_2);
connect(splHeaRet.port_3, splHeaSup.port_3);
connect(splHeaSup.port_1, valHeaCoi.port_b);
connect(splCooSup.port_1, valCooCoi.port_b);
connect(portHeaCoiSup, valHeaCoi.port_a);
connect(portHeaCoiRet, splHeaRet.port_1);
connect(portCooCoiSup, valCooCoi.port_a);
connect(portCooCoiRet, splCooRet.port_1);
connect(VAVBox.port_bAir, port_supAir);
for i
in 1:numZon
loop
connect(VAVBox[i].port_aHeaWat, portHeaTerSup);
connect(VAVBox[i].port_bHeaWat, portHeaTerRet);
end for;
connect(splSupRoo[1].port_1, senSupFlo.port_b);
connect(splRetRoo[1].port_1, dpRetDuc.port_a);
connect(splSupRoo.port_3, VAVBox[1:(numZon-1)].port_aAir);
connect(splRetRoo.port_3, port_retAir[1:(numZon-1)]);
for i
in 1:(numZon - 2)
loop
connect(splSupRoo[i].port_2, splSupRoo[i+1].port_1);
connect(splRetRoo[i].port_2, splRetRoo[i+1].port_1);
end for;
connect(splSupRoo[numZon-1].port_2, VAVBox[numZon].port_aAir);
connect(splRetRoo[numZon-1].port_2, port_retAir[numZon]);
connect(cooCoi.port_b2, dpSupDuc.port_a);
connect(dpSupDuc.port_b, fanSup.port_a);
connect(damOut.port_b, splRetOut.port_1);
connect(splRetOut.port_2, TMix.port_a);
connect(damRet.port_b, splRetOut.port_3);
end PartialHVAC;
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.Units.SI.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.Units.SI.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 exponential damper.
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 | mCooAir_flow_nominal | | Nominal air mass flow rate from cooling sizing calculations [kg/s] |
MassFlowRate | mHeaAir_flow_nominal | | Nominal air mass flow rate from heating sizing calculations [kg/s] |
Volume | VRoo | | Room volume [m3] |
Temperature | THeaWatInl_nominal | | Reheat coil nominal inlet water temperature [K] |
Temperature | THeaWatOut_nominal | | Reheat coil nominal outlet water temperature [K] |
Temperature | THeaAirInl_nominal | | Inlet air nominal temperature into VAV box during heating [K] |
Temperature | THeaAirDis_nominal | | Discharge air temperature from VAV box during heating [K] |
HeatFlowRate | QHea_flow_nominal | mHeaAir_flow_nominal*cpAir*(... | 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 [1] |
output RealOutput | y_actual | Actual VAV damper position [1] |
output RealOutput | yVal_actual | Actual valve position [1] |
FluidPort_a | port_aHeaWat | Hot water inlet port |
FluidPort_b | port_bHeaWat | Hot water outlet port |
output RealOutput | TSup | Supply Air Temperature [K] |
output RealOutput | VSup_flow | Supply Air Volumetric Flow Rate [m3/s] |
input RealInput | yHea | Actuator position for heating valve (0: closed, 1: open) |
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.Units.SI.MassFlowRate mCooAir_flow_nominal
;
parameter Modelica.Units.SI.MassFlowRate mHeaAir_flow_nominal
;
final parameter Modelica.Units.SI.MassFlowRate mHeaWat_flow_nominal=
QHea_flow_nominal/(cpWatLiq*(THeaWatInl_nominal - THeaWatOut_nominal))
;
parameter Modelica.Units.SI.Volume VRoo ;
parameter Modelica.Units.SI.Temperature THeaWatInl_nominal(start=55 + 273.15,
displayUnit="degC") ;
parameter Modelica.Units.SI.Temperature THeaWatOut_nominal(start=
THeaWatInl_nominal - 10, displayUnit="degC")
;
parameter Modelica.Units.SI.Temperature THeaAirInl_nominal(start=12 + 273.15,
displayUnit="degC")
;
parameter Modelica.Units.SI.Temperature THeaAirDis_nominal(start=28 + 273.15,
displayUnit="degC")
;
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=
mHeaAir_flow_nominal * cpAir * (THeaAirDis_nominal-THeaAirInl_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(
final unit="1")
;
Modelica.Blocks.Interfaces.RealOutput y_actual(
final unit="1")
;
Modelica.Blocks.Interfaces.RealOutput yVal_actual(
final unit="1")
;
Modelica.Fluid.Interfaces.FluidPort_a port_aHeaWat(
redeclare package Medium =
MediumW) ;
Modelica.Fluid.Interfaces.FluidPort_b port_bHeaWat(
redeclare package Medium =
MediumW) ;
Modelica.Blocks.Interfaces.RealOutput TSup(
final unit = "K",
displayUnit = "degC")
;
Modelica.Blocks.Interfaces.RealOutput VSup_flow(
final unit="m3/s")
;
Buildings.Fluid.Actuators.Dampers.Exponential vav(
redeclare package Medium =
MediumA,
m_flow_nominal=mCooAir_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=mHeaWat_flow_nominal,
m2_flow_nominal=mHeaAir_flow_nominal,
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=THeaWatInl_nominal,
T_a2_nominal=THeaAirInl_nominal) ;
Fluid.Sensors.TemperatureTwoPort senTem(
redeclare package Medium =
MediumA,
initType=Modelica.Blocks.Types.Init.InitialState,
m_flow_nominal=mCooAir_flow_nominal,
allowFlowReversal=allowFlowReversal) ;
Fluid.Sensors.VolumeFlowRate senVolFlo(
redeclare package Medium =
MediumA,
initType=Modelica.Blocks.Types.Init.InitialState,
m_flow_nominal=mCooAir_flow_nominal,
allowFlowReversal=allowFlowReversal)
;
Fluid.Actuators.Valves.TwoWayEqualPercentage val(
redeclare package Medium =
MediumW,
allowFlowReversal=false,
m_flow_nominal=mHeaWat_flow_nominal,
from_dp=true,
dpValve_nominal=3000,
use_inputFilter=false,
dpFixed_nominal=3000) ;
Modelica.Blocks.Interfaces.RealInput yHea
;
Real ACH(unit="1/h") = VSup_flow/VRoo*3600 ;
protected
constant Modelica.Units.SI.SpecificHeatCapacity cpAir=Buildings.Utilities.Psychrometrics.Constants.cpAir
;
constant Modelica.Units.SI.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_bHeaWat, 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);
connect(port_aHeaWat, val.port_a);
connect(val.port_b, terHea.port_a1);
connect(yHea, val.y);
connect(val.y_actual, yVal_actual);
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.Units.SI.Area A ;
input Modelica.Units.SI.Power PFan ;
input Modelica.Units.SI.Power PPum ;
input Modelica.Units.SI.Power PHea ;
input Modelica.Units.SI.Power PCooSen ;
input Modelica.Units.SI.Power PCooLat ;
Real EFan(
unit="J/m2",
start=0,
nominal=1E5,
fixed=true) ;
Real EPum(
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(EPum) = PPum;
A*
der(EHea) = PHea;
A*
der(ECooSen) = PCooSen;
A*
der(ECooLat) = PCooLat;
ECoo = ECooSen + ECooLat;
end Results;