This package contains examples and tutorials with step-by-step instructions
for how to build system models.
The examples illustrate
the scope of the library. Smaller examples that typically only
use models from a few packages can be found in the individual packages.
For example, see
Buildings.Airflow.Multizone.Examples for examples of
multizone airflow and contaminant transport models, or
Buildings.Fluid.HeatExchangers.Examples for
examples of heat exchanger models.
Name |
Description |
Tutorial
|
Tutorial with step by step instructions for how to build system models |
SimpleHouse
|
Illustrative example of a simple heating, ventilation and room model |
ChillerPlant
|
Chiller plant with water side economizer for data center |
DualFanDualDuct
|
Dual fan dual duct HVAC system with five thermal zones |
HydronicHeating
|
Hydronic heating system with storage, two rooms and thermostatic radiator valves |
ScalableBenchmarks
|
|
VAVCO2
|
Variable air volume flow system of MIT building with continuous time control for static pressure reset |
VAVReheat
|
Variable air volume flow system with terminal reheat and five thermal zones |
This model contains a simple model of a house
with a heating system, ventilation, and weather boundary conditions.
It serves as a demonstration case of how the Buildings
library can be used.
model SimpleHouse
extends Modelica.Icons.Example;
package MediumAir =
Buildings.Media.Air;
package MediumWater =
Buildings.Media.Water;
parameter Modelica.Units.SI.Area AWall=100 ;
parameter Modelica.Units.SI.Area AWin=5 ;
parameter Real gWin(min=0, max=1, unit="1") = 0.3 ;
parameter Modelica.Units.SI.Volume VZone=AWall*3 ;
parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=700
;
parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=QHea_flow_nominal/
10/4200 ;
parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=VZone*2*1.2/3600
;
parameter Modelica.Units.SI.PressureDifference dpAir_nominal=200
;
parameter Boolean allowFlowReversal=false
;
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor walCap(
T(fixed=true),
C=10*AWall*0.05*1000*1000)
;
Fluid.MixingVolumes.MixingVolume zon(
redeclare package Medium = MediumAir,
V=VZone,
nPorts=2,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
m_flow_nominal=mAir_flow_nominal,
massDynamics=Modelica.Fluid.Types.Dynamics.DynamicFreeInitial)
;
Modelica.Thermal.HeatTransfer.Components.ThermalResistor conRes(R=1/2/AWall)
;
Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad(
redeclare package Medium = MediumWater,
T_a_nominal=273.15 + 50,
T_b_nominal=273.15 + 40,
energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial,
allowFlowReversal=allowFlowReversal,
Q_flow_nominal=QHea_flow_nominal)
;
Fluid.Sources.Boundary_pT bouAir(
redeclare package Medium = MediumAir,
nPorts=2,
use_T_in=true) ;
Fluid.Sources.Boundary_pT bouWat(
redeclare package Medium = MediumWater,
nPorts=1) ;
BoundaryConditions.WeatherData.ReaderTMY3 weaDat(
filNam=
Modelica.Utilities.Files.loadResource("modelica://Buildings/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos"))
;
BoundaryConditions.WeatherData.Bus weaBus ;
Modelica.Thermal.HeatTransfer.Components.ThermalResistor walRes(R=0.25/AWall/
0.04) ;
Buildings.HeatTransfer.Sources.PrescribedTemperature TOut
;
Fluid.HeatExchangers.HeaterCooler_u heaWat(
redeclare package Medium = MediumWater,
m_flow_nominal=mWat_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
allowFlowReversal=allowFlowReversal,
dp_nominal=5000,
Q_flow_nominal=QHea_flow_nominal)
;
Fluid.Movers.FlowControlled_m_flow pum(
redeclare package Medium = MediumWater,
use_inputFilter=false,
m_flow_nominal=mWat_flow_nominal,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
allowFlowReversal=allowFlowReversal,
nominalValuesDefineDefaultPressureCurve=true,
inputType=Buildings.Fluid.Types.InputType.Stages,
massFlowRates=mWat_flow_nominal*{1}) ;
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemZonAir
;
Fluid.Actuators.Dampers.Exponential vavDam(
redeclare package Medium = MediumAir,
from_dp=true,
m_flow_nominal=mAir_flow_nominal,
dpDamper_nominal=10,
dpFixed_nominal=dpAir_nominal - 10) ;
Fluid.Movers.FlowControlled_dp fan(
redeclare package Medium = MediumAir,
dp_nominal=dpAir_nominal,
use_inputFilter=false,
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
nominalValuesDefineDefaultPressureCurve=true,
m_flow_nominal=mAir_flow_nominal,
show_T=true) ;
Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow win
;
Fluid.HeatExchangers.ConstantEffectiveness hexRec(
redeclare package Medium1 = MediumAir,
redeclare package Medium2 = MediumAir,
dp1_nominal=0,
dp2_nominal=0,
m1_flow_nominal=mAir_flow_nominal,
m2_flow_nominal=mAir_flow_nominal,
eps=0.85) ;
Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 20, uHigh=273.15 + 22)
;
Modelica.Blocks.Logical.Not not1
;
Modelica.Blocks.Math.BooleanToReal booToRea ;
Modelica.Blocks.Sources.Constant con_dp(k=dpAir_nominal) ;
Modelica.Blocks.Math.Gain gaiWin(k=AWin*gWin)
;
Modelica.Blocks.Math.BooleanToInteger booToInt ;
Controls.Continuous.LimPID conDam(
controllerType=Modelica.Blocks.Types.SimpleController.P,
yMin=0.25) ;
Modelica.Blocks.Sources.Constant TSetRoo(k=273.15 + 24)
;
Fluid.HeatExchangers.SensibleCooler_T cooAir(
energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState,
allowFlowReversal=allowFlowReversal,
m_flow_nominal=mAir_flow_nominal,
dp_nominal=0,
redeclare package Medium = MediumAir) ;
Modelica.Blocks.Sources.Constant TSupAirCoo(k=273.15 + 20)
;
equation
connect(conRes.port_a, zon.heatPort);
connect(weaDat.weaBus, weaBus);
connect(walRes.port_b, walCap.port);
connect(TOut.T, weaBus.TDryBul);
connect(TOut.port, walRes.port_a);
connect(heaWat.port_b, rad.port_a);
connect(bouWat.ports[1], heaWat.port_a);
connect(rad.port_b, pum.port_a);
connect(senTemZonAir.port, zon.heatPort);
connect(bouAir.ports[1], hexRec.port_b1);
connect(rad.heatPortCon, zon.heatPort);
connect(not1.y, booToRea.u);
connect(not1.u, hysRad.y);
connect(booToRea.y, heaWat.u);
connect(heaWat.port_a, pum.port_b);
connect(con_dp.y, fan.dp_in);
connect(gaiWin.y, win.Q_flow);
connect(gaiWin.u, weaBus.HGloHor);
connect(booToInt.u, not1.y);
connect(booToInt.y, pum.stage);
connect(hexRec.port_b2, fan.port_a);
connect(vavDam.port_b, zon.ports[1]);
connect(senTemZonAir.T, hysRad.u);
connect(senTemZonAir.T,conDam. u_s);
connect(conDam.y, vavDam.y);
connect(TSetRoo.y,conDam. u_m);
connect(fan.port_b, cooAir.port_a);
connect(cooAir.port_b, vavDam.port_a);
connect(TSupAirCoo.y, cooAir.TSet);
connect(bouAir.T_in, weaBus.TDryBul);
connect(bouAir.ports[2], hexRec.port_a2);
connect(hexRec.port_a1, zon.ports[2]);
connect(conRes.port_b, walCap.port);
connect(win.port, walCap.port);
connect(rad.heatPortRad, walCap.port);
end SimpleHouse;