This package contains examples for the use of models that can be found in Buildings.Fluid.Boilers.
Extends from Modelica.Icons.ExamplesPackage (Icon for packages containing runnable examples).
Name | Description |
---|---|
BoilerPolynomial | Test model |
BoilerPolynomialClosedLoop | Boiler with closed loop control |
Type | Name | Default | Description |
---|---|---|---|
Power | Q_flow_nominal | 3000 | Nominal power [W] |
Temperature | dT_nominal | 20 | Nominal temperature difference [K] |
MassFlowRate | m_flow_nominal | Q_flow_nominal/dT_nominal/4200 | Nominal mass flow rate [kg/s] |
Pressure | dp_nominal | 3000 | Pressure drop at m_flow_nominal [Pa] |
model BoilerPolynomial "Test model" extends Modelica.Icons.Example; package Medium = Buildings.Media.ConstantPropertyLiquidWater "Medium model"; parameter Modelica.SIunits.Power Q_flow_nominal = 3000 "Nominal power"; parameter Modelica.SIunits.Temperature dT_nominal = 20 "Nominal temperature difference"; parameter Modelica.SIunits.MassFlowRate m_flow_nominal = Q_flow_nominal/dT_nominal/4200 "Nominal mass flow rate"; parameter Modelica.SIunits.Pressure dp_nominal = 3000 "Pressure drop at m_flow_nominal";inner Modelica.Fluid.System system; Buildings.Fluid.Sources.Boundary_pT sin( redeclare package Medium = Medium, nPorts=2, p(displayUnit="Pa") = 300000, T=333.15) "Sink"; Buildings.Fluid.Sources.Boundary_pT sou( nPorts=2, redeclare package Medium = Medium, p=300000 + dp_nominal, T=303.15); Modelica.Blocks.Sources.TimeTable y(table=[0,0; 1800,1; 1800,0; 2400,0; 2400, 1; 3600,1]); Buildings.Fluid.Boilers.BoilerPolynomial boi1( a={0.9}, effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, Q_flow_nominal=Q_flow_nominal, m_flow_nominal = m_flow_nominal, redeclare package Medium = Medium, dp_nominal=dp_nominal, T_start=293.15, fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue()) "Boiler"; Buildings.HeatTransfer.Sources.FixedTemperature TAmb1( T=288.15) "Ambient temperature in boiler room"; Buildings.Fluid.Boilers.BoilerPolynomial boi2( a={0.9}, effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, Q_flow_nominal=Q_flow_nominal, m_flow_nominal = m_flow_nominal, redeclare package Medium = Medium, energyDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, massDynamics=Modelica.Fluid.Types.Dynamics.SteadyState, dp_nominal=dp_nominal, T_start=293.15, fue=Buildings.Fluid.Data.Fuels.NaturalGasLowerHeatingValue()) "Boiler"; Buildings.HeatTransfer.Sources.FixedTemperature TAmb2( T=288.15) "Ambient temperature in boiler room"; Modelica.Blocks.Continuous.FirstOrder firstOrder(T=0.1); equationconnect(TAmb1.port, boi1.heatPort); connect(TAmb2.port, boi2.heatPort); connect(sou.ports[1], boi1.port_a); connect(sou.ports[2], boi2.port_a); connect(y.y, firstOrder.u); connect(firstOrder.y, boi1.y); connect(firstOrder.y, boi2.y); connect(boi2.port_b, sin.ports[2]); connect(boi1.port_b, sin.ports[1]); end BoilerPolynomial;
This model illustrates how to use a boiler model with closed loop control. The controller modulates the boiler temperature between 60°C and 80°C. A three-way valve mixes recirculated water with boiler water to regulate the temperature of the volume at a constant temperature of 40°C. There is also a bypass in the boiler loop to ensure circulation when the valve position is such that it only recirculates water from the load. The bypass between valve and pump mixes recirculated water, thereby allowing the valve to work over a larger operating range. The expansion vessel near the boiler is used to set a reference pressure, and it is used to accomodate for the thermal expansion of the water.
Extends from Modelica.Icons.Example (Icon for runnable examples).
Type | Name | Default | Description |
---|---|---|---|
Power | Q_flow_nominal | 20000 | Nominal power [W] |
Temperature | dT_nominal | 20 | Nominal temperature difference [K] |
MassFlowRate | m_flow_nominal | Q_flow_nominal/dT_nominal/4200 | Nominal mass flow rate [kg/s] |
model BoilerPolynomialClosedLoop "Boiler with closed loop control" extends Modelica.Icons.Example; package Medium = Buildings.Media.ConstantPropertyLiquidWater "Medium model"; parameter Modelica.SIunits.Power Q_flow_nominal = 20000 "Nominal power"; parameter Modelica.SIunits.Temperature dT_nominal = 20 "Nominal temperature difference"; parameter Modelica.SIunits.MassFlowRate m_flow_nominal = Q_flow_nominal/dT_nominal/4200 "Nominal mass flow rate";inner Modelica.Fluid.System system; Buildings.Fluid.Boilers.BoilerPolynomial boi( a={0.9}, effCur=Buildings.Fluid.Types.EfficiencyCurves.Constant, Q_flow_nominal=Q_flow_nominal, redeclare package Medium = Medium, dp_nominal=20000, T_start=293.15, m_flow_nominal=m_flow_nominal, fue=Buildings.Fluid.Data.Fuels.HeatingOilLowerHeatingValue()) "Boiler"; Modelica.Blocks.Logical.OnOffController onOffController(bandwidth=20); Modelica.Blocks.Math.BooleanToReal booleanToReal; Actuators.Valves.ThreeWayEqualPercentageLinear val( redeclare package Medium = Medium, l={0.01,0.01}, dynamicBalance=false, m_flow_nominal=m_flow_nominal); Movers.FlowMachine_m_flow pumLoa(redeclare package Medium = Medium, dynamicBalance=false, m_flow_nominal=2*m_flow_nominal) "Pump for heating load"; Movers.FlowMachine_m_flow pumBoi(redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal, dynamicBalance=false) "Pump for boiler loop"; Modelica.Blocks.Sources.Constant m_flow_pum(k=m_flow_nominal) "Mass flow rate of pump"; Modelica.Blocks.Sources.Constant TSetBoi(k=273.15 + 70) "Temperature setpoint for boiler"; Controls.Continuous.LimPID conPID( Td=1, k=0.5, controllerType=Modelica.Blocks.Types.SimpleController.PI, Ti=100); Modelica.Blocks.Sources.Constant TSetHea(k=273.15 + 40) "Temperature setpoint for heating load"; FixedResistances.SplitterFixedResistanceDpM spl( redeclare package Medium = Medium, dynamicBalance=false, m_flow_nominal=m_flow_nominal*{1,2,1}, dp_nominal={0,0,200}) "Splitter/mixer"; FixedResistances.SplitterFixedResistanceDpM spl1( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal*{1,1,1}, dynamicBalance=false, dp_nominal={0,0,100}) "Splitter/mixer"; FixedResistances.SplitterFixedResistanceDpM spl2( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal*{1,1,1}, dp_nominal=0*{1,1,1}, dynamicBalance=false) "Splitter/mixer"; FixedResistances.SplitterFixedResistanceDpM spl3( redeclare package Medium = Medium, dp_nominal=0*{1,1,1}, dynamicBalance=false, m_flow_nominal=m_flow_nominal*{1,2,1}) "Splitter/mixer"; Storage.ExpansionVessel exp(redeclare package Medium = Medium, VTot=2); FixedResistances.SplitterFixedResistanceDpM spl4( redeclare package Medium = Medium, m_flow_nominal=m_flow_nominal*{1,1,1}, dp_nominal=0*{1,1,1}, dynamicBalance=false) "Splitter/mixer"; MixingVolumes.MixingVolume vol( nPorts=2, redeclare package Medium = Medium, m_flow_nominal=2*m_flow_nominal, V=1); Modelica.Thermal.HeatTransfer.Components.ThermalConductor thermalConductor(G=0.1 *Q_flow_nominal/(40 - 20)); Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TBou(T=293.15) "Fixed temperature boundary condition"; Modelica.Blocks.Math.Gain gain(k=2) "Multiply the mass flow rate as this circuit has a smaller temperature difference"; Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TVol "Sensor for volume temperature"; equationconnect(onOffController.y, booleanToReal.u); connect(boi.port_b, pumBoi.port_a); connect(boi.T, onOffController.u); connect(conPID.y, val.y); connect(TSetHea.y, conPID.u_s); connect(TSetBoi.y, onOffController.reference); connect(val.port_2, spl.port_1); connect(spl.port_2, pumLoa.port_a); connect(pumBoi.port_b, spl1.port_1); connect(spl1.port_2, val.port_1); connect(spl2.port_2, boi.port_a); connect(boi.port_a, exp.port_a); connect(spl3.port_2, spl4.port_1); connect(spl4.port_2, spl2.port_1); connect(spl4.port_3, val.port_3); connect(booleanToReal.y, boi.y); connect(m_flow_pum.y, pumBoi.m_flow_in); connect(vol.ports[1], spl3.port_1); connect(TBou.port, thermalConductor.port_a); connect(thermalConductor.port_b, vol.heatPort); connect(gain.y, pumLoa.m_flow_in); connect(m_flow_pum.y, gain.u); connect(TVol.port, vol.heatPort); connect(TVol.T, conPID.u_m); connect(pumLoa.port_b, vol.ports[2]); connect(spl.port_3, spl3.port_3); connect(spl1.port_3, spl2.port_3); end BoilerPolynomialClosedLoop;