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.
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_riseTime=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_riseTime=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)
;
Buildings.Fluid.Sensors.TemperatureTwoPort TFanIn(
redeclare final package Medium = MediumAir,
final m_flow_nominal=mAir_flow_nominal,
tau=0) ;
Buildings.Fluid.Sensors.TemperatureTwoPort TFanOut(
redeclare final package Medium = MediumAir,
final m_flow_nominal=mAir_flow_nominal,
tau=0) ;
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(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(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);
connect(hexRec.port_b2, TFanIn.port_a);
connect(TFanIn.port_b, fan.port_a);
connect(fan.port_b, TFanOut.port_a);
connect(TFanOut.port_b, cooAir.port_a);
end SimpleHouse;