Buildings.Examples.VAVReheat.ThermalZones

Package with models for the thermal zones

Information

Extends from Modelica.Icons.VariantsPackage (Icon for package containing variants).

Package Content

Name Description
Buildings.Examples.VAVReheat.ThermalZones.Floor Floor Model of a floor of the building
Buildings.Examples.VAVReheat.ThermalZones.RoomLeakage RoomLeakage Room leakage model
Buildings.Examples.VAVReheat.ThermalZones.VAVBranch VAVBranch Supply branch of a VAV system

Buildings.Examples.VAVReheat.ThermalZones.Floor Buildings.Examples.VAVReheat.ThermalZones.Floor

Model of a floor of the building

Buildings.Examples.VAVReheat.ThermalZones.Floor

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.

Parameters

TypeNameDefaultDescription
replaceable package MediumModelica.Media.Interfaces.Pa...Medium model for air
Booleanuse_windPressuretrueSet to true to enable wind pressure
InteriorConvectionintConModBuildings.HeatTransfer.Types...Convective heat transfer model for room-facing surfaces of opaque constructions
Anglelat Latitude [rad]
RealwinWalRat0.33Window to wall ratio for exterior walls
LengthhWin1.5Height of windows [m]
PlywoodmatFurmatFur(x=0.15, nStaRef=5)Material for furniture
CarpetmatCar Carpet
ConcretematConmatCon(x=0.1, k=1.311, c=836...Concrete
PlywoodmatWoomatWoo(x=0.01, k=0.11, d=544...Wood for exterior construction
GenericmatInsmatIns(x=0.087, k=0.049, c=8...Steelframe construction with insulation
GypsumBoardmatGypmatGyp(x=0.0127, k=0.16, c=8...Gypsum board
GypsumBoardmatGyp2matGyp2(x=0.025, k=0.16, c=8...Gypsum board
GenericconExtWalconExtWal(final nLay=3, mate...Exterior construction
GenericconIntWalconIntWal(final nLay=1, mate...Interior wall construction
GenericconFloconFlo(final nLay=1, materia...Floor construction (opa_a is carpet)
GenericconFurconFur(final nLay=1, materia...Construction for internal mass of furniture
PlywoodmatCarTramatCarTra(k=0.11, d=544, nSt...Wood for floor
DoubleClearAir13ClearglaSysglaSys(UFra=2, shade=Buildin...Data record for the glazing system
RealkIntNor1Gain factor to scale internal heat gain in north zone
Experimental (may be changed in future releases)
BooleansampleModelfalseSet to true to time-sample the model, which can give shorter simulation time if there is already time sampling in the system model

Connectors

TypeNameDescription
replaceable package MediumMedium model for air
VesselFluidPorts_bportsSou[2]Fluid inlets and outlets
VesselFluidPorts_bportsEas[2]Fluid inlets and outlets
VesselFluidPorts_bportsNor[2]Fluid inlets and outlets
VesselFluidPorts_bportsWes[2]Fluid inlets and outlets
VesselFluidPorts_bportsCor[2]Fluid inlets and outlets
BusweaBusWeather bus
output RealOutputTRooAir[5]Room air temperatures [K]
output RealOutputp_relRelative pressure signal of building static pressure

Modelica definition

model Floor "Model of a floor of the building" replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium model for air"; parameter Boolean use_windPressure=true "Set to true to enable wind pressure"; parameter HeatTransfer.Types.InteriorConvection intConMod=Buildings.HeatTransfer.Types.InteriorConvection.Temperature "Convective heat transfer model for room-facing surfaces of opaque constructions"; parameter Modelica.SIunits.Angle lat "Latitude"; parameter Real winWalRat( min=0.01, max=0.99) = 0.33 "Window to wall ratio for exterior walls"; parameter Modelica.SIunits.Length hWin = 1.5 "Height of windows"; parameter HeatTransfer.Data.Solids.Plywood matFur(x=0.15, nStaRef=5) "Material for furniture"; parameter HeatTransfer.Data.Resistances.Carpet matCar "Carpet"; parameter HeatTransfer.Data.Solids.Concrete matCon( x=0.1, k=1.311, c=836, nStaRef=5) "Concrete"; parameter HeatTransfer.Data.Solids.Plywood matWoo( x=0.01, k=0.11, d=544, nStaRef=1) "Wood for exterior construction"; parameter HeatTransfer.Data.Solids.Generic matIns( x=0.087, k=0.049, c=836.8, d=265, nStaRef=5) "Steelframe construction with insulation"; parameter HeatTransfer.Data.Solids.GypsumBoard matGyp( x=0.0127, k=0.16, c=830, d=784, nStaRef=2) "Gypsum board"; parameter HeatTransfer.Data.Solids.GypsumBoard matGyp2( x=0.025, k=0.16, c=830, d=784, nStaRef=2) "Gypsum board"; parameter HeatTransfer.Data.OpaqueConstructions.Generic conExtWal(final nLay=3, material={matWoo,matIns,matGyp}) "Exterior construction"; parameter HeatTransfer.Data.OpaqueConstructions.Generic conIntWal(final nLay=1, material={matGyp2}) "Interior wall construction"; parameter HeatTransfer.Data.OpaqueConstructions.Generic conFlo(final nLay=1, material={ matCon}) "Floor construction (opa_a is carpet)"; parameter HeatTransfer.Data.OpaqueConstructions.Generic conFur(final nLay=1, material={ matFur}) "Construction for internal mass of furniture"; parameter HeatTransfer.Data.Solids.Plywood matCarTra( k=0.11, d=544, nStaRef=1, x=0.215/0.11) "Wood for floor"; parameter HeatTransfer.Data.GlazingSystems.DoubleClearAir13Clear glaSys( UFra=2, shade=Buildings.HeatTransfer.Data.Shades.Gray(), haveInteriorShade=false, haveExteriorShade=false) "Data record for the glazing system"; parameter Real kIntNor(min=0, max=1) = 1 "Gain factor to scale internal heat gain in north zone"; constant Modelica.SIunits.Height hRoo=2.74 "Room height"; parameter 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"; Buildings.ThermalZones.Detailed.MixedAir sou( redeclare package Medium = Medium, lat=lat, AFlo=568.77/hRoo, 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={568.77/hRoo,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) "South zone"; Buildings.ThermalZones.Detailed.MixedAir eas( redeclare package Medium = Medium, lat=lat, AFlo=360.0785/hRoo, 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={360.0785/hRoo,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) "East zone"; Buildings.ThermalZones.Detailed.MixedAir nor( redeclare package Medium = Medium, lat=lat, AFlo=568.77/hRoo, 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={568.77/hRoo,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) "North zone"; Buildings.ThermalZones.Detailed.MixedAir wes( redeclare package Medium = Medium, lat=lat, AFlo=360.0785/hRoo, 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={360.0785/hRoo,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) "West zone"; Buildings.ThermalZones.Detailed.MixedAir cor( redeclare package Medium = Medium, lat=lat, AFlo=2698/hRoo, hRoo=hRoo, nConExt=0, nConExtWin=0, nConPar=2, datConPar( layers={conFlo,conFur}, A={2698/hRoo,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) "Core zone"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsSou[2]( redeclare package Medium = Medium) "Fluid inlets and outlets"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsEas[2]( redeclare package Medium = Medium) "Fluid inlets and outlets"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsNor[2]( redeclare package Medium = Medium) "Fluid inlets and outlets"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsWes[2]( redeclare package Medium = Medium) "Fluid inlets and outlets"; Modelica.Fluid.Vessels.BaseClasses.VesselFluidPorts_b portsCor[2]( redeclare package Medium = Medium) "Fluid inlets and outlets"; Modelica.Blocks.Math.MatrixGain gai(K=20*[0.4; 0.4; 0.2]) "Matrix gain to split up heat gain in radiant, convective and latent gain"; Modelica.Blocks.Sources.Constant uSha(k=0) "Control signal for the shading device"; Modelica.Blocks.Routing.Replicator replicator(nout=1); BoundaryConditions.WeatherData.Bus weaBus "Weather bus"; RoomLeakage leaSou(redeclare package Medium = Medium, VRoo=568.77, s=49.91/33.27, azi=Buildings.Types.Azimuth.S, final use_windPressure=use_windPressure) "Model for air infiltration through the envelope"; RoomLeakage leaEas(redeclare package Medium = Medium, VRoo=360.0785, s=33.27/49.91, azi=Buildings.Types.Azimuth.E, final use_windPressure=use_windPressure) "Model for air infiltration through the envelope"; RoomLeakage leaNor(redeclare package Medium = Medium, VRoo=568.77, s=49.91/33.27, azi=Buildings.Types.Azimuth.N, final use_windPressure=use_windPressure) "Model for air infiltration through the envelope"; RoomLeakage leaWes(redeclare package Medium = Medium, VRoo=360.0785, s=33.27/49.91, azi=Buildings.Types.Azimuth.W, final use_windPressure=use_windPressure) "Model for air infiltration through the envelope"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirSou "Air temperature sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirEas "Air temperature sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirNor "Air temperature sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirWes "Air temperature sensor"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor temAirPer5 "Air temperature sensor"; Modelica.Blocks.Routing.Multiplex5 multiplex5_1; Modelica.Blocks.Interfaces.RealOutput TRooAir[5]( each unit="K", each displayUnit="degC") "Room air temperatures"; Airflow.Multizone.DoorDiscretizedOpen opeSouCor(redeclare package Medium = Medium, wOpe=10, forceErrorControlOnFlow=false) "Opening between perimeter1 and core"; Airflow.Multizone.DoorDiscretizedOpen opeEasCor(redeclare package Medium = Medium, wOpe=10, forceErrorControlOnFlow=false) "Opening between perimeter2 and core"; Airflow.Multizone.DoorDiscretizedOpen opeNorCor(redeclare package Medium = Medium, wOpe=10, forceErrorControlOnFlow=false) "Opening between perimeter3 and core"; Airflow.Multizone.DoorDiscretizedOpen opeWesCor(redeclare package Medium = Medium, wOpe=10, forceErrorControlOnFlow=false) "Opening between perimeter3 and core"; 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) "Fraction of internal heat gain"; Buildings.Fluid.Sensors.RelativePressure senRelPre(redeclare package Medium = Medium) "Building pressure measurement"; Buildings.Fluid.Sources.Outside out(nPorts=1, redeclare package Medium = Medium); Modelica.Blocks.Interfaces.RealOutput p_rel "Relative pressure signal of building static pressure"; Modelica.Blocks.Math.Gain gaiIntNor[3](each k=kIntNor) "Gain for internal heat gain amplification for north zone"; Modelica.Blocks.Math.Gain gaiIntSou[3](each k=2 - kIntNor) "Gain to change the internal heat gain for south"; 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(uSha.y, replicator.u); 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(weaBus, leaSou.weaBus); connect(weaBus, leaEas.weaBus); connect(weaBus, leaNor.weaBus); connect(weaBus, leaWes.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(temAirPer5.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, temAirPer5.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(intGaiFra.y, gai.u); connect(cor.ports[11], senRelPre.port_a); connect(out.weaBus, weaBus); connect(out.ports[1], senRelPre.port_b); connect(senRelPre.p_rel, p_rel); connect(gai.y, gaiIntNor.u); connect(gaiIntNor.y, nor.qGai_flow); connect(gai.y, gaiIntSou.u); connect(gaiIntSou.y, sou.qGai_flow); end Floor;

Buildings.Examples.VAVReheat.ThermalZones.RoomLeakage Buildings.Examples.VAVReheat.ThermalZones.RoomLeakage

Room leakage model

Buildings.Examples.VAVReheat.ThermalZones.RoomLeakage

Information

Room leakage.

Extends from Buildings.BaseClasses.BaseIcon (Base icon).

Parameters

TypeNameDefaultDescription
replaceable package MediumModelica.Media.Interfaces.Pa...Medium in the component
VolumeVRoo Room volume [m3]
Booleanuse_windPressurefalseSet to true to enable wind pressure
Reals Side ratio, s=length of this wall/length of adjacent wall
Angleazi Surface azimuth (South:0, West:pi/2) [rad]

Connectors

TypeNameDescription
replaceable package MediumMedium in the component
FluidPort_bport_b 
BusweaBusBus with weather data

Modelica definition

model RoomLeakage "Room leakage model" extends Buildings.BaseClasses.BaseIcon; replaceable package Medium = Modelica.Media.Interfaces.PartialMedium "Medium in the component"; parameter Modelica.SIunits.Volume VRoo "Room volume"; parameter Boolean use_windPressure=false "Set to true to enable wind pressure"; Buildings.Fluid.FixedResistances.PressureDrop res( redeclare package Medium = Medium, dp_nominal=50, m_flow_nominal=VRoo*1.2/3600) "Resistance model"; 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 "Bus with weather data"; Buildings.Fluid.Sensors.MassFlowRate senMasFlo1(redeclare package Medium = Medium, allowFlowReversal=true) "Sensor for mass flow rate"; Modelica.Blocks.Math.Gain ACHInf(k=1/VRoo/1.2*3600, y(unit="1/h")) "Air change per hour due to infiltration"; parameter Real s "Side ratio, s=length of this wall/length of adjacent wall"; parameter Modelica.SIunits.Angle azi "Surface azimuth (South:0, West:pi/2)"; 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;

Buildings.Examples.VAVReheat.ThermalZones.VAVBranch Buildings.Examples.VAVReheat.ThermalZones.VAVBranch

Supply branch of a VAV system

Buildings.Examples.VAVReheat.ThermalZones.VAVBranch

Information

Model for a VAV supply branch. The terminal VAV box has a pressure independent damper and a water reheat coil. 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

TypeNameDefaultDescription
replaceable package MediumAModelica.Media.Interfaces.Pa...Medium model for air
replaceable package MediumWModelica.Media.Interfaces.Pa...Medium model for water
BooleanallowFlowReversaltrue= false to simplify equations, assuming, but not enforcing, no flow reversal
MassFlowRatem_flow_nominal Mass flow rate of this thermal zone [kg/s]
VolumeVRoo Room volume [m3]

Connectors

TypeNameDescription
replaceable package MediumAMedium model for air
replaceable package MediumWMedium model for water
FluidPort_aport_aFluid connector a1 (positive design flow direction is from port_a1 to port_b1)
FluidPort_aport_bFluid connector b (positive design flow direction is from port_a1 to port_b1)
input RealInputyVAVSignal for VAV damper
input RealInputyValActuator position for reheat valve (0: closed, 1: open)
output RealOutputy_actualActual VAV damper position

Modelica definition

model VAVBranch "Supply branch of a VAV system" extends Modelica.Blocks.Icons.Block; replaceable package MediumA = Modelica.Media.Interfaces.PartialMedium "Medium model for air"; replaceable package MediumW = Modelica.Media.Interfaces.PartialMedium "Medium model for water"; parameter Boolean allowFlowReversal=true "= false to simplify equations, assuming, but not enforcing, no flow reversal"; parameter Modelica.SIunits.MassFlowRate m_flow_nominal "Mass flow rate of this thermal zone"; parameter Modelica.SIunits.Volume VRoo "Room volume"; Buildings.Fluid.Actuators.Dampers.PressureIndependent vav( redeclare package Medium = MediumA, m_flow_nominal=m_flow_nominal, dpDamper_nominal=220 + 20, allowFlowReversal=allowFlowReversal) "VAV box for room"; Buildings.Fluid.HeatExchangers.DryCoilEffectivenessNTU terHea( redeclare package Medium1 = MediumA, redeclare package Medium2 = MediumW, m1_flow_nominal=m_flow_nominal, m2_flow_nominal=m_flow_nominal*1000*(50 - 17)/4200/10, Q_flow_nominal=m_flow_nominal*1006*(50 - 16.7), configuration=Buildings.Fluid.Types.HeatExchangerConfiguration.CounterFlow, dp1_nominal=0, from_dp2=true, dp2_nominal=0, allowFlowReversal1=allowFlowReversal, allowFlowReversal2=false, T_a1_nominal=289.85, T_a2_nominal=355.35) "Heat exchanger of terminal box"; Buildings.Fluid.Sources.Boundary_pT sinTer( redeclare package Medium = MediumW, p(displayUnit="Pa") = 3E5, nPorts=1) "Sink for terminal box "; Modelica.Fluid.Interfaces.FluidPort_a port_a( redeclare package Medium = MediumA) "Fluid connector a1 (positive design flow direction is from port_a1 to port_b1)"; Modelica.Fluid.Interfaces.FluidPort_a port_b( redeclare package Medium = MediumA) "Fluid connector b (positive design flow direction is from port_a1 to port_b1)"; Buildings.Fluid.Sensors.MassFlowRate senMasFlo( redeclare package Medium = MediumA, allowFlowReversal=allowFlowReversal) "Sensor for mass flow rate"; Modelica.Blocks.Math.Gain fraMasFlo(k=1/m_flow_nominal) "Fraction of mass flow rate, relative to nominal flow"; Modelica.Blocks.Math.Gain ACH(k=1/VRoo/1.2*3600) "Air change per hour"; Fluid.Sources.MassFlowSource_T souTer( redeclare package Medium = MediumW, nPorts=1, use_m_flow_in=true, T=323.15) "Source for terminal box "; Modelica.Blocks.Interfaces.RealInput yVAV "Signal for VAV damper"; Modelica.Blocks.Interfaces.RealInput yVal "Actuator position for reheat valve (0: closed, 1: open)"; Buildings.Controls.OBC.CDL.Continuous.Gain gaiM_flow( final k=m_flow_nominal*1000*15/4200/10) "Gain for mass flow rate"; Modelica.Blocks.Interfaces.RealOutput y_actual "Actual VAV damper position"; equation connect(fraMasFlo.u, senMasFlo.m_flow); connect(vav.port_b, senMasFlo.port_a); connect(ACH.u, senMasFlo.m_flow); connect(souTer.ports[1], terHea.port_a2); connect(port_a, terHea.port_a1); connect(senMasFlo.port_b, port_b); connect(terHea.port_b1, vav.port_a); connect(vav.y, yVAV); connect(souTer.m_flow_in, gaiM_flow.y); connect(sinTer.ports[1], terHea.port_b2); connect(gaiM_flow.u, yVal); connect(vav.y_actual, y_actual); end VAVBranch;