diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo index ae6a6c043e..0fd3a4a63d 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse0.mo @@ -1,99 +1,99 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse0 - "Start file for simple house example" - extends Modelica.Icons.Example; - package MediumAir = IBPSA.Media.Air "Medium model for air"; - package MediumWater = IBPSA.Media.Water "Medium model for water"; - parameter Modelica.Units.SI.Area AWall = 100 "Wall area"; - parameter Modelica.Units.SI.Length dWall = 0.25 "Wall thickness"; - parameter Modelica.Units.SI.ThermalConductivity kWall = 0.04 "Wall thermal conductivity"; - parameter Modelica.Units.SI.Density rhoWall = 2000 "Wall density"; - parameter Modelica.Units.SI.SpecificHeatCapacity cpWall = 1000 "Wall specific heat capacity"; - IBPSA.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= - ModelicaServices.ExternalReferences.loadResource( - "modelica://IBPSA/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) - "Weather data reader" - annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); - IBPSA.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" - annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); - Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut - "Exterior temperature boundary condition" - annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); -equation - connect(weaDat.weaBus, weaBus) annotation (Line( - points={{-180,-10},{-150,-10}}, - color={255,204,51}, - thickness=0.5)); - connect(TOut.T, weaBus.TDryBul) - annotation (Line(points={{-82,0},{-150,0},{-150,-10}},color={0,0,127})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}}), graphics={ - Rectangle( - extent={{-220,40},{-38,-40}}, - fillColor={238,238,238}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Rectangle( - extent={{-220,-60},{180,-200}}, - fillColor={238,238,238}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Rectangle( - extent={{-220,180},{180,60}}, - fillColor={238,238,238}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Rectangle( - extent={{-20,40},{180,-40}}, - fillColor={238,238,238}, - fillPattern=FillPattern.Solid, - pattern=LinePattern.None), - Text( - extent={{22,22},{-23,39}}, - textColor={0,0,127}, - fillColor={255,213,170}, - fillPattern=FillPattern.Solid, - textString="Wall"), - Text( - extent={{-157,-79},{-223,-61}}, - textColor={0,0,127}, - fillColor={255,213,170}, - fillPattern=FillPattern.Solid, - textString="Heating"), - Text( - extent={{-118,18},{-214,40}}, - textColor={0,0,127}, - fillColor={255,213,170}, - fillPattern=FillPattern.Solid, - textString="Weather inputs"), - Text( - extent={{-76,158},{-214,180}}, - textColor={0,0,127}, - fillColor={255,213,170}, - fillPattern=FillPattern.Solid, - textString="Cooling and ventilation")}), - experiment(Tolerance=1E-6, StopTime=1e+06), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos" - "Simulate and plot"), - Documentation(revisions=" - -", info=" -

-This model is used as the starting point for the SimpleHouse tutorial. -It contains a weather data reader and a PrescribedTemperature component -that allows the user to connect thermal components to the dry bulb temperature. -It was based on from the Modelica crash course organised by KU Leuven -(https://github.com/open-ideas/__CrashCourse__). -

-")); -end SimpleHouse0; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse0 + "Start file for simple house example" + extends Modelica.Icons.Example; + package MediumAir = IBPSA.Media.Air "Medium model for air"; + package MediumWater = IBPSA.Media.Water "Medium model for water"; + parameter Modelica.Units.SI.Area AWall = 100 "Wall area"; + parameter Modelica.Units.SI.Length dWall = 0.25 "Wall thickness"; + parameter Modelica.Units.SI.ThermalConductivity kWall = 0.04 "Wall thermal conductivity"; + parameter Modelica.Units.SI.Density rhoWall = 2000 "Wall density"; + parameter Modelica.Units.SI.SpecificHeatCapacity cpWall = 1000 "Wall specific heat capacity"; + IBPSA.BoundaryConditions.WeatherData.ReaderTMY3 weaDat(filNam= + ModelicaServices.ExternalReferences.loadResource( + "modelica://IBPSA/Resources/weatherdata/USA_IL_Chicago-OHare.Intl.AP.725300_TMY3.mos")) + "Weather data reader" + annotation (Placement(transformation(extent={{-200,-20},{-180,0}}))); + IBPSA.BoundaryConditions.WeatherData.Bus weaBus "Weather data bus" + annotation (Placement(transformation(extent={{-160,-20},{-140,0}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut + "Exterior temperature boundary condition" + annotation (Placement(transformation(extent={{-80,-10},{-60,10}}))); +equation + connect(weaDat.weaBus, weaBus) annotation (Line( + points={{-180,-10},{-150,-10}}, + color={255,204,51}, + thickness=0.5)); + connect(TOut.T, weaBus.TDryBul) + annotation (Line(points={{-82,0},{-150,0},{-150,-10}},color={0,0,127})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}}), graphics={ + Rectangle( + extent={{-220,40},{-38,-40}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-220,-60},{180,-200}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-220,180},{180,60}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Rectangle( + extent={{-20,40},{180,-40}}, + fillColor={238,238,238}, + fillPattern=FillPattern.Solid, + pattern=LinePattern.None), + Text( + extent={{22,22},{-23,39}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Wall"), + Text( + extent={{-157,-79},{-223,-61}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Heating"), + Text( + extent={{-118,18},{-214,40}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Weather inputs"), + Text( + extent={{-76,158},{-214,180}}, + textColor={0,0,127}, + fillColor={255,213,170}, + fillPattern=FillPattern.Solid, + textString="Cooling and ventilation")}), + experiment(Tolerance=1E-6, StopTime=1e+06), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouseTemplate.mos" + "Simulate and plot"), + Documentation(revisions=" + +", info=" +

+This model is used as the starting point for the SimpleHouse tutorial. +It contains a weather data reader and a PrescribedTemperature component +that allows the user to connect thermal components to the dry bulb temperature. +It was based on from the Modelica crash course organised by KU Leuven +(https://github.com/open-ideas/__CrashCourse__). +

+")); +end SimpleHouse0; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo index 6cfca3a935..ae829a5559 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse1.mo @@ -1,89 +1,89 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse1 "Building wall model" - extends SimpleHouse0; - - Modelica.Thermal.HeatTransfer.Components.HeatCapacitor walCap( - C=AWall*dWall*cpWall*rhoWall, T(fixed=true)) - "Thermal mass of wall" - annotation (Placement(transformation(extent={{-10,-10},{10,10}}, - rotation=270, - origin={150,0}))); - Modelica.Thermal.HeatTransfer.Components.ThermalResistor walRes(R=dWall/AWall - /kWall) "Thermal resistor for wall: 25 cm of rockwool" - annotation (Placement(transformation(extent={{80,-10},{100,10}}))); -equation - connect(walRes.port_b, walCap.port) annotation (Line(points={{100,0},{112,0}, - {112,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); - connect(TOut.port, walRes.port_a) - annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-A very simple building envelope model will be constructed manually using thermal resistors and heat capacitors. -The house consists of a wall represented by a single heat capacitor and a thermal resistor. -The boundary temperature are already included in - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0. -The wall has a surface area of Awall=100 m2, -a thickness of dwall=25 cm, -a thermal conductivity of kwall=0.04 W/(m K), -a density of ρwall=2000 kg/m3, -and a specific heat capacity of cp,wall= 1000 J/(kg K) -

-

-These parameters are already declared in the equation section of - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0. -You can use this way of declaring parameters in the remainder of this exercise, but this is not required. -

-

-The conductive thermal resistance value of a wall may be computed as R=d/(A*k). -The heat capacity value of a wall may be computed as C=A*d*cp -

-

Required models

- -

Connection instructions

-

-Connect one side of the thermal resistor to the output of PrescribedTemperature -and the other side of the thermal resistor to the heat capacitor. -

-

Reference result

-

-If you correctly added the model of the heat capacitor, -connected it to the resistor and added the parameter values for C, -then you should be able to simulate the model. -To do this, press the Simulation Setup and set the model Stop time to 1e6 seconds. -You can now simulate the model by pressing the Simulate button. -

-

-You can plot individual variables values by clicking on their name in the variable browser on the left. -Now plot the wall capacitor temperature value T. -It should look like the figure below (1 Ms is around 12 days). -

-

-\"Wall -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos" - "Simulate and plot")); -end SimpleHouse1; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse1 "Building wall model" + extends SimpleHouse0; + + Modelica.Thermal.HeatTransfer.Components.HeatCapacitor walCap( + C=AWall*dWall*cpWall*rhoWall, T(fixed=true)) + "Thermal mass of wall" + annotation (Placement(transformation(extent={{-10,-10},{10,10}}, + rotation=270, + origin={150,0}))); + Modelica.Thermal.HeatTransfer.Components.ThermalResistor walRes(R=dWall/AWall + /kWall) "Thermal resistor for wall: 25 cm of rockwool" + annotation (Placement(transformation(extent={{80,-10},{100,10}}))); +equation + connect(walRes.port_b, walCap.port) annotation (Line(points={{100,0},{112,0}, + {112,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(TOut.port, walRes.port_a) + annotation (Line(points={{0,0},{80,0}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+A very simple building envelope model will be constructed manually using thermal resistors and heat capacitors. +The house consists of a wall represented by a single heat capacitor and a thermal resistor. +The boundary temperature are already included in + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0. +The wall has a surface area of Awall=100 m2, +a thickness of dwall=25 cm, +a thermal conductivity of kwall=0.04 W/(m K), +a density of ρwall=2000 kg/m3, +and a specific heat capacity of cp,wall= 1000 J/(kg K) +

+

+These parameters are already declared in the equation section of + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0. +You can use this way of declaring parameters in the remainder of this exercise, but this is not required. +

+

+The conductive thermal resistance value of a wall may be computed as R=d/(A*k). +The heat capacity value of a wall may be computed as C=A*d*cp +

+

Required models

+ +

Connection instructions

+

+Connect one side of the thermal resistor to the output of PrescribedTemperature +and the other side of the thermal resistor to the heat capacitor. +

+

Reference result

+

+If you correctly added the model of the heat capacitor, +connected it to the resistor and added the parameter values for C, +then you should be able to simulate the model. +To do this, press the Simulation Setup and set the model Stop time to 1e6 seconds. +You can now simulate the model by pressing the Simulate button. +

+

+You can plot individual variables values by clicking on their name in the variable browser on the left. +Now plot the wall capacitor temperature value T. +It should look like the figure below (1 Ms is around 12 days). +

+

+\"Wall +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse1.mos" + "Simulate and plot")); +end SimpleHouse1; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo index 3139e7e34c..e9611bdc13 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse2.mo @@ -1,80 +1,80 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse2 "Building window model" - extends SimpleHouse1; - - parameter Modelica.Units.SI.Area AWin=2 "Window area"; - - Modelica.Blocks.Math.Gain gaiWin(k=AWin) - "Gain for solar irradiance through the window" - annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); - Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow win - "Very simple window model" - annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); -equation - connect(gaiWin.y, win.Q_flow) - annotation (Line(points={{21,-20},{40,-20}}, color={0,0,127})); - connect(win.port, walCap.port) annotation (Line(points={{60,-20},{130,-20},{ - 130,1.77636e-15},{140,1.77636e-15}}, - color={191,0,0})); - connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-2,-20},{-150,-20}, - {-150,-10}}, color={0,0,127}), Text( - string="%second", - index=1, - extent={{-6,3},{-6,3}}, - horizontalAlignment=TextAlignment.Right)); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-The window has a surface area of 2 m2. -In this simple model we will therefore assume that -two times the outdoor solar irradiance is injected as heat onto the inside of the wall. -

-

Required models

- -

Connection instructions

-

-To be able to use the value of the outdoor solar irradiance -you will need to access the weather data reader. -To do this, make a connection to the weaBus. -In the dialog box select <New Variable> and here type HDirNor, -which is the direct solar irradiance on a surface of 1 m2, -perpendicular to the sun rays. -Set the gain factor k to 2, -in order to get the solar irradiance through the window of 2 m2. -

-

-Make a connection with the PrescribedHeatFlow as well. -This block makes the connection between the heat flow from the gain, represented as a real value, -and a heat port that is compatible with the connectors of the thermal capacitance and resistance. -

-

Reference result

-

-The result with and without the window model is plotted in the figure below. -

-

-\"Wall -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos" - "Simulate and plot")); -end SimpleHouse2; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse2 "Building window model" + extends SimpleHouse1; + + parameter Modelica.Units.SI.Area AWin=2 "Window area"; + + Modelica.Blocks.Math.Gain gaiWin(k=AWin) + "Gain for solar irradiance through the window" + annotation (Placement(transformation(extent={{0,-30},{20,-10}}))); + Modelica.Thermal.HeatTransfer.Sources.PrescribedHeatFlow win + "Very simple window model" + annotation (Placement(transformation(extent={{40,-30},{60,-10}}))); +equation + connect(gaiWin.y, win.Q_flow) + annotation (Line(points={{21,-20},{40,-20}}, color={0,0,127})); + connect(win.port, walCap.port) annotation (Line(points={{60,-20},{130,-20},{ + 130,1.77636e-15},{140,1.77636e-15}}, + color={191,0,0})); + connect(gaiWin.u, weaBus.HDirNor) annotation (Line(points={{-2,-20},{-150,-20}, + {-150,-10}}, color={0,0,127}), Text( + string="%second", + index=1, + extent={{-6,3},{-6,3}}, + horizontalAlignment=TextAlignment.Right)); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+The window has a surface area of 2 m2. +In this simple model we will therefore assume that +two times the outdoor solar irradiance is injected as heat onto the inside of the wall. +

+

Required models

+ +

Connection instructions

+

+To be able to use the value of the outdoor solar irradiance +you will need to access the weather data reader. +To do this, make a connection to the weaBus. +In the dialog box select <New Variable> and here type HDirNor, +which is the direct solar irradiance on a surface of 1 m2, +perpendicular to the sun rays. +Set the gain factor k to 2, +in order to get the solar irradiance through the window of 2 m2. +

+

+Make a connection with the PrescribedHeatFlow as well. +This block makes the connection between the heat flow from the gain, represented as a real value, +and a heat port that is compatible with the connectors of the thermal capacitance and resistance. +

+

Reference result

+

+The result with and without the window model is plotted in the figure below. +

+

+\"Wall +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse2.mos" + "Simulate and plot")); +end SimpleHouse2; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo index 154ae4da84..ca649707b4 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse3.mo @@ -1,87 +1,87 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse3 "Air model" - extends SimpleHouse2; - - parameter Modelica.Units.SI.Volume VZone=8*8*3 "Zone volume"; - parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=1 - "Nominal mass flow rate for air loop"; - parameter Modelica.Units.SI.CoefficientOfHeatTransfer hWall=2 - "Convective heat transfer coefficient at the wall"; - - Modelica.Thermal.HeatTransfer.Components.ThermalResistor conRes(R=1/hWall/ - AWall) "Thermal resistance for convective heat transfer" annotation ( - Placement(transformation( - extent={{-10,-10},{10,10}}, - rotation=270, - origin={130,20}))); - IBPSA.Fluid.MixingVolumes.MixingVolume zon( - redeclare package Medium = MediumAir, - V=VZone, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - m_flow_nominal=mAir_flow_nominal) "Very simple zone air model" - annotation (Placement(transformation(extent={{110,130},{90,150}}))); -equation - connect(conRes.port_b, walCap.port) annotation (Line(points={{130,10},{130, - 1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); - connect(zon.heatPort, conRes.port_a) - annotation (Line(points={{110,140},{130,140},{130,30}}, color={191,0,0})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-To increase the model detail we now add an air model assuming the zone is 8m x 8m x 3m in size. -The air will exchange heat with the wall. -This may be modelled using a thermal resistance representing -the convective heat resistance which is equal to Rconv=1/(h*A), -where A is the heat exchange surface area and h=2 W/(m2*K) is the convective heat transfer coefficient. -

-

Required models

- -

Connection instructions

-

-The MixingVolume Medium parameter contains information about -the type of fluid and its properties that should be modelled by the MixingVolume. -Set its value to MediumAir, which is declared in the template, -by typing redeclare package Medium = MediumAir. -For the nominal mass flow rate you may assume a value of 1 kg/m3 for now. -You will have to change this value once you add a ventilation system to the model (see - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse6). -Finally, set the energyDynamics of the MixingVolume, -which can be found in the Dynamics tab of the model parameter window, to FixedInitial. -

-

-Make a connection with the PrescribedHeatFlow as well. -This block makes the connection between the heat flow from the gain, represented as a real value, -and a heat port that is compatible with the connectors of the thermal capacitance and resistance. -

-

Reference result

-

-The result with and without the air model is plotted in the figure below. -

-

-\"Wall -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos" - "Simulate and plot")); -end SimpleHouse3; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse3 "Air model" + extends SimpleHouse2; + + parameter Modelica.Units.SI.Volume VZone=8*8*3 "Zone volume"; + parameter Modelica.Units.SI.MassFlowRate mAir_flow_nominal=1 + "Nominal mass flow rate for air loop"; + parameter Modelica.Units.SI.CoefficientOfHeatTransfer hWall=2 + "Convective heat transfer coefficient at the wall"; + + Modelica.Thermal.HeatTransfer.Components.ThermalResistor conRes(R=1/hWall/ + AWall) "Thermal resistance for convective heat transfer" annotation ( + Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=270, + origin={130,20}))); + IBPSA.Fluid.MixingVolumes.MixingVolume zon( + redeclare package Medium = MediumAir, + V=VZone, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + m_flow_nominal=mAir_flow_nominal) "Very simple zone air model" + annotation (Placement(transformation(extent={{110,130},{90,150}}))); +equation + connect(conRes.port_b, walCap.port) annotation (Line(points={{130,10},{130, + 1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + connect(zon.heatPort, conRes.port_a) + annotation (Line(points={{110,140},{130,140},{130,30}}, color={191,0,0})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+To increase the model detail we now add an air model assuming the zone is 8m x 8m x 3m in size. +The air will exchange heat with the wall. +This may be modelled using a thermal resistance representing +the convective heat resistance which is equal to Rconv=1/(h*A), +where A is the heat exchange surface area and h=2 W/(m2*K) is the convective heat transfer coefficient. +

+

Required models

+ +

Connection instructions

+

+The MixingVolume Medium parameter contains information about +the type of fluid and its properties that should be modelled by the MixingVolume. +Set its value to MediumAir, which is declared in the template, +by typing redeclare package Medium = MediumAir. +For the nominal mass flow rate you may assume a value of 1 kg/m3 for now. +You will have to change this value once you add a ventilation system to the model (see + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse6). +Finally, set the energyDynamics of the MixingVolume, +which can be found in the Dynamics tab of the model parameter window, to FixedInitial. +

+

+Make a connection with the PrescribedHeatFlow as well. +This block makes the connection between the heat flow from the gain, represented as a real value, +and a heat port that is compatible with the connectors of the thermal capacitance and resistance. +

+

Reference result

+

+The result with and without the air model is plotted in the figure below. +

+

+\"Wall +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse3.mos" + "Simulate and plot")); +end SimpleHouse3; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo index 4f6207165d..753cb7d1f9 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse4.mo @@ -1,132 +1,132 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse4 "Heating model" - extends SimpleHouse3; - - parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=3000 - "Nominal capacity of heating system"; - parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=0.1 - "Nominal mass flow rate for water loop"; - parameter Boolean use_constantHeater=true - "To enable/disable the connection between the constant source and heater"; - - IBPSA.Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad( - redeclare package Medium = MediumWater, - T_a_nominal=333.15, - T_b_nominal=313.15, - energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, - allowFlowReversal=false, - Q_flow_nominal=QHea_flow_nominal) "Radiator" - annotation (Placement(transformation(extent={{110,-110},{130,-90}}))); - IBPSA.Fluid.HeatExchangers.HeaterCooler_u heaWat( - redeclare package Medium = MediumWater, - m_flow_nominal=mWat_flow_nominal, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, - allowFlowReversal=false, - dp_nominal=5000, - Q_flow_nominal=QHea_flow_nominal) "Heater for water circuit" - annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); - IBPSA.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=false, - nominalValuesDefineDefaultPressureCurve=true, - inputType=IBPSA.Fluid.Types.InputType.Constant) "Pump" - annotation (Placement(transformation(extent={{110,-180},{90,-160}}))); - IBPSA.Fluid.Sources.Boundary_pT bouWat(redeclare package Medium = MediumWater, nPorts=1) - "Pressure bound for water circuit" annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - origin={10,-170}))); - Modelica.Blocks.Sources.Constant conHea(k=1) - annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); -equation - connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-100},{110,-100}}, - color={0,127,255})); - connect(rad.port_b, pum.port_a) annotation (Line(points={{130,-100},{148,-100}, - {148,-170},{110,-170}}, color={0,127,255})); - connect(heaWat.port_a, pum.port_b) annotation (Line(points={{60,-100},{49.75, - -100},{49.75,-170},{90,-170}}, color={0,127,255})); - connect(rad.heatPortCon, zon.heatPort) annotation (Line(points={{118,-92.8},{ - 118,140},{110,140}}, color={191,0,0})); - connect(rad.heatPortRad, walCap.port) annotation (Line(points={{122,-92.8},{122, - -20},{130,-20},{130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); - if use_constantHeater then - connect(conHea.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50, - -94},{58,-94}}, color={0,0,127})); - end if; - connect(bouWat.ports[1], pum.port_b) - annotation (Line(points={{20,-170},{90,-170}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-The wall temperature (and therefore the room temperature) is quite low. -In this step a heating system is added to resolve this. It consists of a radiator, a pump and a heater. -The radiator has a nominal power of 3 kW for an inlet and outlet temperature of the radiator of 60°C -and 40°C, and a room air and radiative temperature of 20°C. -The pump has a (nominal) mass flow rate of 0.1 kg/s. -Since the heating system uses water as a heat carrier fluid, -the media for the models in the heating circuit should be set to MediumWater. -

-

Required models

- -

Connection instructions

-

-The radiator contains one port for convective heat transfer and one for radiative heat transfer. -Connect both in a reasonable way. Since the heating system uses water as a heat carrier fluid, -the media for the models should be set to MediumWater. -

-

-The Boundary_pT model needs to be used to set an absolute pressure somewhere in the system. -Otherwise the absolute pressure in the system is undefined. -Pressure difference modelling may be disregarded in the heating circuit -since the chosen pump sets a fixed mass flow rate regardless of the pressure drop. -

-

-Set the heater input to 1, meaning that it will produce 1 times its nominal power. -

-

Reference result

-

-The result of the air temperature is plotted in the figure below. -The temperature rises very steeply since the wall is relatively well insulated (k=0.04 W/(m*K)) -and the heater is not disabled when it becomes too warm. -

-

-\"Air -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos" - "Simulate and plot")); -end SimpleHouse4; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse4 "Heating model" + extends SimpleHouse3; + + parameter Modelica.Units.SI.HeatFlowRate QHea_flow_nominal=3000 + "Nominal capacity of heating system"; + parameter Modelica.Units.SI.MassFlowRate mWat_flow_nominal=0.1 + "Nominal mass flow rate for water loop"; + parameter Boolean use_constantHeater=true + "To enable/disable the connection between the constant source and heater"; + + IBPSA.Fluid.HeatExchangers.Radiators.RadiatorEN442_2 rad( + redeclare package Medium = MediumWater, + T_a_nominal=333.15, + T_b_nominal=313.15, + energyDynamics=Modelica.Fluid.Types.Dynamics.FixedInitial, + allowFlowReversal=false, + Q_flow_nominal=QHea_flow_nominal) "Radiator" + annotation (Placement(transformation(extent={{110,-110},{130,-90}}))); + IBPSA.Fluid.HeatExchangers.HeaterCooler_u heaWat( + redeclare package Medium = MediumWater, + m_flow_nominal=mWat_flow_nominal, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + allowFlowReversal=false, + dp_nominal=5000, + Q_flow_nominal=QHea_flow_nominal) "Heater for water circuit" + annotation (Placement(transformation(extent={{60,-110},{80,-90}}))); + IBPSA.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=false, + nominalValuesDefineDefaultPressureCurve=true, + inputType=IBPSA.Fluid.Types.InputType.Constant) "Pump" + annotation (Placement(transformation(extent={{110,-180},{90,-160}}))); + IBPSA.Fluid.Sources.Boundary_pT bouWat(redeclare package Medium = MediumWater, nPorts=1) + "Pressure bound for water circuit" annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + origin={10,-170}))); + Modelica.Blocks.Sources.Constant conHea(k=1) + annotation (Placement(transformation(extent={{80,-80},{60,-60}}))); +equation + connect(heaWat.port_b,rad. port_a) annotation (Line(points={{80,-100},{110,-100}}, + color={0,127,255})); + connect(rad.port_b, pum.port_a) annotation (Line(points={{130,-100},{148,-100}, + {148,-170},{110,-170}}, color={0,127,255})); + connect(heaWat.port_a, pum.port_b) annotation (Line(points={{60,-100},{49.75, + -100},{49.75,-170},{90,-170}}, color={0,127,255})); + connect(rad.heatPortCon, zon.heatPort) annotation (Line(points={{118,-92.8},{ + 118,140},{110,140}}, color={191,0,0})); + connect(rad.heatPortRad, walCap.port) annotation (Line(points={{122,-92.8},{122, + -20},{130,-20},{130,1.77636e-15},{140,1.77636e-15}}, color={191,0,0})); + if use_constantHeater then + connect(conHea.y, heaWat.u) annotation (Line(points={{59,-70},{50,-70},{50, + -94},{58,-94}}, color={0,0,127})); + end if; + connect(bouWat.ports[1], pum.port_b) + annotation (Line(points={{20,-170},{90,-170}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+The wall temperature (and therefore the room temperature) is quite low. +In this step a heating system is added to resolve this. It consists of a radiator, a pump and a heater. +The radiator has a nominal power of 3 kW for an inlet and outlet temperature of the radiator of 60°C +and 40°C, and a room air and radiative temperature of 20°C. +The pump has a (nominal) mass flow rate of 0.1 kg/s. +Since the heating system uses water as a heat carrier fluid, +the media for the models in the heating circuit should be set to MediumWater. +

+

Required models

+ +

Connection instructions

+

+The radiator contains one port for convective heat transfer and one for radiative heat transfer. +Connect both in a reasonable way. Since the heating system uses water as a heat carrier fluid, +the media for the models should be set to MediumWater. +

+

+The Boundary_pT model needs to be used to set an absolute pressure somewhere in the system. +Otherwise the absolute pressure in the system is undefined. +Pressure difference modelling may be disregarded in the heating circuit +since the chosen pump sets a fixed mass flow rate regardless of the pressure drop. +

+

+Set the heater input to 1, meaning that it will produce 1 times its nominal power. +

+

Reference result

+

+The result of the air temperature is plotted in the figure below. +The temperature rises very steeply since the wall is relatively well insulated (k=0.04 W/(m*K)) +and the heater is not disabled when it becomes too warm. +

+

+\"Air +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse4.mos" + "Simulate and plot")); +end SimpleHouse4; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo index aa8c1a4202..bc6bef72b3 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse5.mo @@ -1,85 +1,85 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse5 "Heating controller model" - extends SimpleHouse4(pum(inputType=IBPSA.Fluid.Types.InputType.Stages, - massFlowRates=mWat_flow_nominal*{1}), final use_constantHeater=false); - - Modelica.Blocks.Math.BooleanToInteger booInt "Boolean to integer" - annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); - Modelica.Blocks.Math.BooleanToReal booRea "Boolean to real" - annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); - Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 21, uHigh=273.15 + 23) - "Hysteresis controller for radiator" - annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); - Modelica.Blocks.Logical.Not not1 - "Negation for enabling heating when temperature is low" - annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); - Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemZonAir - "Zone air temperature sensor" - annotation (Placement(transformation(extent={{90,150},{70,170}}))); -equation - connect(booInt.y, pum.stage) annotation (Line(points={{21,-140},{100,-140},{ - 100,-158}}, color={255,127,0})); - connect(booInt.u, not1.y) annotation (Line(points={{-2,-140},{-11.5,-140},{-11.5, - -100},{-19,-100}}, color={255,0,255})); - connect(booRea.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100},{ - 40.5,-94},{58,-94}}, color={0,0,127})); - connect(not1.u,hysRad. y) annotation (Line(points={{-42,-100},{-59,-100}}, - color={255,0,255})); - connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,160},{-230,160}, - {-230,-100},{-82,-100}}, color={0,0,127})); - connect(senTemZonAir.port, zon.heatPort) - annotation (Line(points={{90,160},{110,160},{110,140}}, color={191,0,0})); - connect(not1.y, booRea.u) - annotation (Line(points={{-19,-100},{-2,-100}}, color={255,0,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-Since the zone becomes too warm, a controller is required that disables the heater when a setpoint is reached. -We will implement a hysteresis controller with a setpoint of 295.15 +/- 1K (21-23°C). -A temperature sensor will measure the zone air temperature. -

-

Required models

- -

Connection instructions

-

-The heater modulation level should be set to one when the heater is on and to zero otherwise. -

-

Reference result

-

-The figure below shows the air temperature when the controller is added. -

-

-\"Air -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos" - "Simulate and plot")); -end SimpleHouse5; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse5 "Heating controller model" + extends SimpleHouse4(pum(inputType=IBPSA.Fluid.Types.InputType.Stages, + massFlowRates=mWat_flow_nominal*{1}), final use_constantHeater=false); + + Modelica.Blocks.Math.BooleanToInteger booInt "Boolean to integer" + annotation (Placement(transformation(extent={{0,-150},{20,-130}}))); + Modelica.Blocks.Math.BooleanToReal booRea "Boolean to real" + annotation (Placement(transformation(extent={{0,-110},{20,-90}}))); + Modelica.Blocks.Logical.Hysteresis hysRad(uLow=273.15 + 21, uHigh=273.15 + 23) + "Hysteresis controller for radiator" + annotation (Placement(transformation(extent={{-80,-110},{-60,-90}}))); + Modelica.Blocks.Logical.Not not1 + "Negation for enabling heating when temperature is low" + annotation (Placement(transformation(extent={{-40,-110},{-20,-90}}))); + Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor senTemZonAir + "Zone air temperature sensor" + annotation (Placement(transformation(extent={{90,150},{70,170}}))); +equation + connect(booInt.y, pum.stage) annotation (Line(points={{21,-140},{100,-140},{ + 100,-158}}, color={255,127,0})); + connect(booInt.u, not1.y) annotation (Line(points={{-2,-140},{-11.5,-140},{-11.5, + -100},{-19,-100}}, color={255,0,255})); + connect(booRea.y, heaWat.u) annotation (Line(points={{21,-100},{40.5,-100},{ + 40.5,-94},{58,-94}}, color={0,0,127})); + connect(not1.u,hysRad. y) annotation (Line(points={{-42,-100},{-59,-100}}, + color={255,0,255})); + connect(senTemZonAir.T,hysRad. u) annotation (Line(points={{69,160},{-230,160}, + {-230,-100},{-82,-100}}, color={0,0,127})); + connect(senTemZonAir.port, zon.heatPort) + annotation (Line(points={{90,160},{110,160},{110,140}}, color={191,0,0})); + connect(not1.y, booRea.u) + annotation (Line(points={{-19,-100},{-2,-100}}, color={255,0,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+Since the zone becomes too warm, a controller is required that disables the heater when a setpoint is reached. +We will implement a hysteresis controller with a setpoint of 295.15 +/- 1K (21-23°C). +A temperature sensor will measure the zone air temperature. +

+

Required models

+ +

Connection instructions

+

+The heater modulation level should be set to one when the heater is on and to zero otherwise. +

+

Reference result

+

+The figure below shows the air temperature when the controller is added. +

+

+\"Air +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse5.mos" + "Simulate and plot")); +end SimpleHouse5; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo index d907559f3a..db5249ee7a 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/SimpleHouse6.mo @@ -1,141 +1,141 @@ -within IBPSA.Examples.Tutorial.SimpleHouse; -model SimpleHouse6 "Free cooling model" - extends SimpleHouse5( - zon(nPorts=2), - mAir_flow_nominal=0.1, - AWin=6); - - parameter Modelica.Units.SI.PressureDifference dpAir_nominal=200 - "Pressure drop at nominal mass flow rate for air loop"; - - IBPSA.Fluid.Actuators.Dampers.Exponential vavDam( - redeclare package Medium = MediumAir, - from_dp=true, - m_flow_nominal=mAir_flow_nominal, - dpDamper_nominal=dpAir_nominal) - "Damper" annotation (Placement(transformation(extent={{-10,10},{10, - -10}}, origin={50,110}))); - IBPSA.Fluid.Movers.FlowControlled_dp fan( - redeclare package Medium = MediumAir, - show_T=true, - dp_nominal=dpAir_nominal, - use_inputFilter=false, - energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, - nominalValuesDefineDefaultPressureCurve=true, - m_flow_nominal=mAir_flow_nominal) - "Constant head fan" annotation (Placement(transformation( - extent={{-10,10},{10,-10}}, - origin={-50,110}))); - Modelica.Blocks.Sources.Constant con_dp(k=dpAir_nominal) "Pressure head" - annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); - IBPSA.Fluid.HeatExchangers.ConstantEffectiveness hexRec( - redeclare package Medium1 = MediumAir, - redeclare package Medium2 = MediumAir, - dp1_nominal=10, - dp2_nominal=10, - m1_flow_nominal=mAir_flow_nominal, - m2_flow_nominal=mAir_flow_nominal, - eps=0.85) "Heat exchanger for heat recuperation" - annotation (Placement(transformation(extent={{-80,104},{-110,136}}))); - IBPSA.Fluid.Sources.Boundary_pT - bouAir( - redeclare package Medium = MediumAir, - use_T_in=true, - nPorts=2) "Air boundary with constant temperature" - annotation (Placement(transformation( - extent={{-10,-10},{10,10}}, - origin={-130,130}))); - Modelica.Blocks.Logical.Hysteresis hysAir(uLow=273.15 + 23, uHigh=273.15 + 25) - "Hysteresis controller for damper" - annotation (Placement(transformation(extent={{-20,70},{0,90}}))); - Modelica.Blocks.Math.BooleanToReal booToRea1 "Boolean to real" - annotation (Placement(transformation(extent={{20,70},{40,90}}))); -equation - connect(con_dp.y, fan.dp_in) - annotation (Line(points={{-69,80},{-50,80},{-50,98}}, color={0,0,127})); - connect(hexRec.port_a1, zon.ports[1]) annotation (Line(points={{-80,129.6},{ - 97,129.6},{97,130},{100,130}}, color={0,127,255})); - connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-142,134},{ - -150,134},{-150,-10}},color={0,0,127})); - connect(hexRec.port_b2, fan.port_a) annotation (Line(points={{-80,110.4},{-69, - 110.4},{-69,110},{-60,110}}, color={0,127,255})); - connect(vavDam.port_b, zon.ports[2]) annotation (Line(points={{60,110},{100, - 110},{100,130}}, color={0,127,255})); - connect(booToRea1.y, vavDam.y) - annotation (Line(points={{41,80},{50,80},{50,98}}, color={0,0,127})); - connect(hysAir.y, booToRea1.u) - annotation (Line(points={{1,80},{18,80}}, color={255,0,255})); - connect(vavDam.port_a, fan.port_b) - annotation (Line(points={{40,110},{-40,110}}, color={0,127,255})); - connect(hysAir.u, hysRad.u) annotation (Line(points={{-22,80},{-30,80},{-30, - 160},{-230,160},{-230,-100},{-82,-100}}, color={0,0,127})); - connect(bouAir.ports[1], hexRec.port_b1) annotation (Line(points={{-120,129}, - {-119,129},{-119,129.6},{-110,129.6}}, color={0,127,255})); - connect(bouAir.ports[2], hexRec.port_a2) annotation (Line(points={{-120,131}, - {-120,110.4},{-110,110.4}}, color={0,127,255})); - annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, - -220},{200,200}})), - experiment(Tolerance=1e-6, StopTime=1e+06), - Documentation(revisions=" - -", info=" -

-For this last exercise, we first increase the window size -from 2 m2 to 6 m2. -

-

-We will add a ventilation model that allows to perform free cooling -using outside air when solar irradiation heats up the room too much. -The system consists of a fan, a damper, a controller with an air temperature setpoint -between 23°C and 25°C, -and a heat recovery unit with a constant effectiveness of 85%. -The damper and fan have a nominal pressure drop/raise of 200 Pa. -The heat recovery unit has a nominal pressure drop of 10 Pa at both sides. -The nominal mass flow rate of the ventilation system is 0.1 kg/s. -

-

Required models

- -

Connection instructions

-

-Connect the components such that they exchange mass (and therefore also energy) -with the MixingVolume representing the zone air. -Add a boundary_pT to draw air from the environment. -Enable its temperature input and connect it to the TDryBul variable in the weather data reader. -Also reconsider the nominal mass flow rate parameter value in the MixingVolume -given the flow rate information of the ventilation system. -

-

Reference result

-

-The figures below show the results. -

-

-\"Air -

-

-\"Ventilation -

-"), - __Dymola_Commands(file= - "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos" - "Simulate and plot")); -end SimpleHouse6; +within IBPSA.Examples.Tutorial.SimpleHouse; +model SimpleHouse6 "Free cooling model" + extends SimpleHouse5( + zon(nPorts=2), + mAir_flow_nominal=0.1, + AWin=6); + + parameter Modelica.Units.SI.PressureDifference dpAir_nominal=200 + "Pressure drop at nominal mass flow rate for air loop"; + + IBPSA.Fluid.Actuators.Dampers.Exponential vavDam( + redeclare package Medium = MediumAir, + from_dp=true, + m_flow_nominal=mAir_flow_nominal, + dpDamper_nominal=dpAir_nominal) + "Damper" annotation (Placement(transformation(extent={{-10,10},{10, + -10}}, origin={50,110}))); + IBPSA.Fluid.Movers.FlowControlled_dp fan( + redeclare package Medium = MediumAir, + show_T=true, + dp_nominal=dpAir_nominal, + use_inputFilter=false, + energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, + nominalValuesDefineDefaultPressureCurve=true, + m_flow_nominal=mAir_flow_nominal) + "Constant head fan" annotation (Placement(transformation( + extent={{-10,10},{10,-10}}, + origin={-50,110}))); + Modelica.Blocks.Sources.Constant con_dp(k=dpAir_nominal) "Pressure head" + annotation (Placement(transformation(extent={{-90,70},{-70,90}}))); + IBPSA.Fluid.HeatExchangers.ConstantEffectiveness hexRec( + redeclare package Medium1 = MediumAir, + redeclare package Medium2 = MediumAir, + dp1_nominal=10, + dp2_nominal=10, + m1_flow_nominal=mAir_flow_nominal, + m2_flow_nominal=mAir_flow_nominal, + eps=0.85) "Heat exchanger for heat recuperation" + annotation (Placement(transformation(extent={{-80,104},{-110,136}}))); + IBPSA.Fluid.Sources.Boundary_pT + bouAir( + redeclare package Medium = MediumAir, + use_T_in=true, + nPorts=2) "Air boundary with constant temperature" + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + origin={-130,130}))); + Modelica.Blocks.Logical.Hysteresis hysAir(uLow=273.15 + 23, uHigh=273.15 + 25) + "Hysteresis controller for damper" + annotation (Placement(transformation(extent={{-20,70},{0,90}}))); + Modelica.Blocks.Math.BooleanToReal booToRea1 "Boolean to real" + annotation (Placement(transformation(extent={{20,70},{40,90}}))); +equation + connect(con_dp.y, fan.dp_in) + annotation (Line(points={{-69,80},{-50,80},{-50,98}}, color={0,0,127})); + connect(hexRec.port_a1, zon.ports[1]) annotation (Line(points={{-80,129.6},{ + 97,129.6},{97,130},{100,130}}, color={0,127,255})); + connect(bouAir.T_in, weaBus.TDryBul) annotation (Line(points={{-142,134},{ + -150,134},{-150,-10}},color={0,0,127})); + connect(hexRec.port_b2, fan.port_a) annotation (Line(points={{-80,110.4},{-69, + 110.4},{-69,110},{-60,110}}, color={0,127,255})); + connect(vavDam.port_b, zon.ports[2]) annotation (Line(points={{60,110},{100, + 110},{100,130}}, color={0,127,255})); + connect(booToRea1.y, vavDam.y) + annotation (Line(points={{41,80},{50,80},{50,98}}, color={0,0,127})); + connect(hysAir.y, booToRea1.u) + annotation (Line(points={{1,80},{18,80}}, color={255,0,255})); + connect(vavDam.port_a, fan.port_b) + annotation (Line(points={{40,110},{-40,110}}, color={0,127,255})); + connect(hysAir.u, hysRad.u) annotation (Line(points={{-22,80},{-30,80},{-30, + 160},{-230,160},{-230,-100},{-82,-100}}, color={0,0,127})); + connect(bouAir.ports[1], hexRec.port_b1) annotation (Line(points={{-120,129}, + {-119,129},{-119,129.6},{-110,129.6}}, color={0,127,255})); + connect(bouAir.ports[2], hexRec.port_a2) annotation (Line(points={{-120,131}, + {-120,110.4},{-110,110.4}}, color={0,127,255})); + annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-240, + -220},{200,200}})), + experiment(Tolerance=1e-6, StopTime=1e+06), + Documentation(revisions=" + +", info=" +

+For this last exercise, we first increase the window size +from 2 m2 to 6 m2. +

+

+We will add a ventilation model that allows to perform free cooling +using outside air when solar irradiation heats up the room too much. +The system consists of a fan, a damper, a controller with an air temperature setpoint +between 23°C and 25°C, +and a heat recovery unit with a constant effectiveness of 85%. +The damper and fan have a nominal pressure drop/raise of 200 Pa. +The heat recovery unit has a nominal pressure drop of 10 Pa at both sides. +The nominal mass flow rate of the ventilation system is 0.1 kg/s. +

+

Required models

+ +

Connection instructions

+

+Connect the components such that they exchange mass (and therefore also energy) +with the MixingVolume representing the zone air. +Add a boundary_pT to draw air from the environment. +Enable its temperature input and connect it to the TDryBul variable in the weather data reader. +Also reconsider the nominal mass flow rate parameter value in the MixingVolume +given the flow rate information of the ventilation system. +

+

Reference result

+

+The figures below show the results. +

+

+\"Air +

+

+\"Ventilation +

+"), + __Dymola_Commands(file= + "modelica://IBPSA/Resources/Scripts/Dymola/Examples/Tutorial/SimpleHouse/SimpleHouse6.mos" + "Simulate and plot")); +end SimpleHouse6; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/package.mo b/IBPSA/Examples/Tutorial/SimpleHouse/package.mo index 2665e07f4d..fbc13637ba 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/package.mo +++ b/IBPSA/Examples/Tutorial/SimpleHouse/package.mo @@ -1,88 +1,88 @@ -within IBPSA.Examples.Tutorial; -package SimpleHouse "Package with example for how to build a simple building envelope with a radiator heating system and ventilation system" -extends Modelica.Icons.ExamplesPackage; - - annotation (Documentation(info=" -

-This package contains examples with step-by-step instructions for how to build a system model -for a simple house with a heating system, ventilation, and weather boundary conditions. -It serves as a demonstration case of how the IBPSA library can be used. -

-

-The goal of this exercise is to become familiar with Modelica and the IBPSA library. -Since the IBPSA library components are typically used by combining several components graphically, -the use of equations falls outside of the scope of this exercise. -

-

-For this exercise you will create a model of a simple house, -consisting of a heating system, one building zone, and a ventilation model. -The exercise starts from a template file that should not produce any errors. -This file will be extended in several steps, adding complexity. -In between each step the user should be able to simulate the model, -i.e., no errors should be produced and simulation results may be compared. -

-

-The model has been created in the following stages: -

-
    -
  1. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0 -contains a weather data reader which connects the data of the dry bulb temperature -to a PrescribedTemperature component -and serves as a starting model to implement the entire SimpleHouse model. -
  2. -
  3. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse1 -implements the building wall by adding a thermal capacity. -
  4. -
  5. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse2 -adds a window to the building wall. -It is assumed that the total injected heat through the window equals the window surface area -multiplied by the direct horizontal solar irradiance. -
  6. -
  7. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse3 -adds an air model which represents the room in the building. -
  8. -
  9. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse4 -adds heating circuit consisting of a boiler, a radiator, -and an on/off circulation pump with a constant mass flow rate. -No controller is implemented yet, i.e. the pump and heater are always on. -
  10. -
  11. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse5 -adds a hysteresis controller for the heating circuit that uses the room temperature as an input. -
  12. -
  13. - -IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse6 -adds a ventilation system consisting of a fan, a damper, a heat recovery unit, -and a hysteresis controller, that allows to perform free cooling using outside air. -
  14. -
-

-For each stage, firstly the model part is qualitatively explained. -Next, the names of the required Modelica models (from the Modelica Standard Library and/or IBPSA library) are listed. -Finally, we provide high-level instructions of how to set up the model. -If these instructions are not clear immediately, have a look at the model documentation and at the type of connectors the model has, -try out some things, make an educated guess, etc. -Finally, we provide reference results that allow you to check if your implementation is correct. -Depending on the parameter values that you choose, results may differ. -

-

-The graphical representation of the final model is given below. -

-

-\"Graphical -

-")); -end SimpleHouse; +within IBPSA.Examples.Tutorial; +package SimpleHouse "Package with example for how to build a simple building envelope with a radiator heating system and ventilation system" +extends Modelica.Icons.ExamplesPackage; + + annotation (Documentation(info=" +

+This package contains examples with step-by-step instructions for how to build a system model +for a simple house with a heating system, ventilation, and weather boundary conditions. +It serves as a demonstration case of how the IBPSA library can be used. +

+

+The goal of this exercise is to become familiar with Modelica and the IBPSA library. +Since the IBPSA library components are typically used by combining several components graphically, +the use of equations falls outside of the scope of this exercise. +

+

+For this exercise you will create a model of a simple house, +consisting of a heating system, one building zone, and a ventilation model. +The exercise starts from a template file that should not produce any errors. +This file will be extended in several steps, adding complexity. +In between each step the user should be able to simulate the model, +i.e., no errors should be produced and simulation results may be compared. +

+

+The model has been created in the following stages: +

+
    +
  1. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse0 +contains a weather data reader which connects the data of the dry bulb temperature +to a PrescribedTemperature component +and serves as a starting model to implement the entire SimpleHouse model. +
  2. +
  3. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse1 +implements the building wall by adding a thermal capacity. +
  4. +
  5. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse2 +adds a window to the building wall. +It is assumed that the total injected heat through the window equals the window surface area +multiplied by the direct horizontal solar irradiance. +
  6. +
  7. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse3 +adds an air model which represents the room in the building. +
  8. +
  9. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse4 +adds heating circuit consisting of a boiler, a radiator, +and an on/off circulation pump with a constant mass flow rate. +No controller is implemented yet, i.e. the pump and heater are always on. +
  10. +
  11. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse5 +adds a hysteresis controller for the heating circuit that uses the room temperature as an input. +
  12. +
  13. + +IBPSA.Examples.Tutorial.SimpleHouse.SimpleHouse6 +adds a ventilation system consisting of a fan, a damper, a heat recovery unit, +and a hysteresis controller, that allows to perform free cooling using outside air. +
  14. +
+

+For each stage, firstly the model part is qualitatively explained. +Next, the names of the required Modelica models (from the Modelica Standard Library and/or IBPSA library) are listed. +Finally, we provide high-level instructions of how to set up the model. +If these instructions are not clear immediately, have a look at the model documentation and at the type of connectors the model has, +try out some things, make an educated guess, etc. +Finally, we provide reference results that allow you to check if your implementation is correct. +Depending on the parameter values that you choose, results may differ. +

+

+The graphical representation of the final model is given below. +

+

+\"Graphical +

+")); +end SimpleHouse; diff --git a/IBPSA/Examples/Tutorial/SimpleHouse/package.order b/IBPSA/Examples/Tutorial/SimpleHouse/package.order index c7d826c325..e975e02c46 100644 --- a/IBPSA/Examples/Tutorial/SimpleHouse/package.order +++ b/IBPSA/Examples/Tutorial/SimpleHouse/package.order @@ -1,7 +1,7 @@ -SimpleHouse0 -SimpleHouse1 -SimpleHouse2 -SimpleHouse3 -SimpleHouse4 -SimpleHouse5 -SimpleHouse6 +SimpleHouse0 +SimpleHouse1 +SimpleHouse2 +SimpleHouse3 +SimpleHouse4 +SimpleHouse5 +SimpleHouse6