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

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]
PlywoodmatFur Material for furniture
CarpetmatCar Carpet
ConcretematCon Concrete
PlywoodmatWoo Wood for exterior construction
GenericmatIns Steelframe construction with insulation
GypsumBoardmatGyp Gypsum board
GypsumBoardmatGyp2 Gypsum board
GenericconExtWal Exterior construction
GenericconIntWal Interior wall construction
GenericconFlo Floor construction (opa_a is carpet)
GenericconFur Construction for internal mass of furniture
PlywoodmatCarTra Wood for floor
DoubleClearAir13ClearglaSys 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={360.0785/hRoo,262.52}, 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

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 RealInputyVAVActuator position for VAV damper (0: closed, 1: open)
input RealInputyValActuator position for reheat valve (0: closed, 1: open)

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, dp_nominal = 220 + 20, allowFlowReversal=allowFlowReversal) "VAV box for room"; Buildings.Fluid.HeatExchangers.DryEffectivenessNTU 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.FixedBoundary 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 "Actuator position for VAV damper (0: closed, 1: open)"; 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"; 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); end VAVBranch;