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;