Extends from Buildings.BaseClasses.BaseIconExamples (Icon for Examples packages).
| Name | Description |
|---|---|
| BoilerPolynomial | Test model |
| HeatingSystem | Test model |
| Type | Name | Default | Description |
|---|---|---|---|
| Power | Q0_flow | 3000 | Nominal power [W] |
| Temperature | dT0 | 20 | Nominal temperature difference [K] |
| MassFlowRate | m0_flow | Q0_flow/dT0/4200 | Nominal mass flow rate [kg/s] |
| Pressure | dp0 | 3000 | Pressure drop at m0_flow [Pa] |
model BoilerPolynomial "Test model"
package Medium = Buildings.Media.ConstantPropertyLiquidWater "Medium model";
parameter Modelica.SIunits.Power Q0_flow = 3000 "Nominal power";
parameter Modelica.SIunits.Temperature dT0 = 20
"Nominal temperature difference";
parameter Modelica.SIunits.MassFlowRate m0_flow = Q0_flow/dT0/4200
"Nominal mass flow rate";
parameter Modelica.SIunits.Pressure dp0 = 3000 "Pressure drop at m0_flow";
inner Modelica_Fluid.System system;
Modelica_Fluid.Sources.Boundary_pT sin(
redeclare package Medium = Medium,
nPorts=2,
p(displayUnit="Pa") = 300000,
T=333.15) "Sink";
Modelica_Fluid.Sources.Boundary_pT sou(
nPorts=2,
redeclare package Medium = Medium,
p=300000 + dp0,
T=303.15);
Modelica.Blocks.Sources.TimeTable y(table=[0,0; 1800,1; 1800,0; 2400,0; 2400,
1; 3600,1]);
Buildings.Fluids.Boilers.BoilerPolynomial fur1(
a={0.9},
effCur=Buildings.Fluids.Types.EfficiencyCurves.Constant,
Q0_flow=Q0_flow,
dT0=dT0,
T_start=293.15,
redeclare package Medium = Medium) "Boiler";
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TAmb1(
T=288.15)
"Ambient temperature in boiler room";
Buildings.Fluids.Boilers.BoilerPolynomial fur2(
a={0.9},
effCur=Buildings.Fluids.Types.EfficiencyCurves.Constant,
Q0_flow=Q0_flow,
dT0=dT0,
redeclare package Medium = Medium,
energyDynamics=Modelica_Fluid.Types.Dynamics.SteadyState,
massDynamics=Modelica_Fluid.Types.Dynamics.SteadyState,
T_start=293.15) "Boiler";
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TAmb2(
T=288.15)
"Ambient temperature in boiler room";
FixedResistances.FixedResistanceDpM res1(
redeclare package Medium = Medium,
m0_flow=m0_flow,
dp0=dp0);
FixedResistances.FixedResistanceDpM res2(
redeclare package Medium = Medium,
m0_flow=m0_flow,
dp0=dp0);
Modelica.Blocks.Continuous.FirstOrder firstOrder(T=0.1);
equation
connect(TAmb1.port, fur1.heatPort);
connect(TAmb2.port, fur2.heatPort);
connect(sou.ports[1], fur1.port_a);
connect(sou.ports[2], fur2.port_a);
connect(fur1.port_b, res1.port_a);
connect(fur2.port_b, res2.port_a);
connect(res1.port_b, sin.ports[1]);
connect(res2.port_b, sin.ports[2]);
connect(y.y, firstOrder.u);
connect(firstOrder.y, fur1.y);
connect(firstOrder.y, fur2.y);
end BoilerPolynomial;
| Type | Name | Default | Description |
|---|---|---|---|
| Integer | nRoo | 2 | Number of rooms |
| Power | Q0_flow | 3000 | Nominal power [W] |
| Temperature | dT0 | 20 | Nominal temperature difference [K] |
| MassFlowRate | m0_flow | Q0_flow/dT0/4200 | Nominal mass flow rate [kg/s] |
| Pressure | dp0Pip | 5000 | Pressure difference of pipe (without valve) [Pa] |
| Pressure | dp0Val | 1000 | Pressure difference of valve [Pa] |
| Pressure | dp0 | dp0Pip + dp0Val | Pressure difference of loop [Pa] |
model HeatingSystem "Test model"
package Medium = Buildings.Media.ConstantPropertyLiquidWater "Medium model";
parameter Integer nRoo = 2 "Number of rooms";
parameter Modelica.SIunits.Power Q0_flow = 3000 "Nominal power";
parameter Modelica.SIunits.Temperature dT0 = 20
"Nominal temperature difference";
parameter Modelica.SIunits.MassFlowRate m0_flow = Q0_flow/dT0/4200
"Nominal mass flow rate";
parameter Modelica.SIunits.Pressure dp0Pip = 5000
"Pressure difference of pipe (without valve)";
parameter Modelica.SIunits.Pressure dp0Val = 1000
"Pressure difference of valve";
parameter Modelica.SIunits.Pressure dp0 = dp0Pip + dp0Val
"Pressure difference of loop";
Buildings.Fluids.Boilers.BoilerPolynomial fur(
a={0.9},
effCur=Buildings.Fluids.Types.EfficiencyCurves.Constant,
Q0_flow=Q0_flow,
dT0=dT0,
T_start=293.15,
redeclare package Medium = Medium) "Boiler";
inner Modelica_Fluid.System system;
Modelica.Thermal.HeatTransfer.Sources.FixedTemperature TAmb(T=288.15)
"Ambient temperature in boiler room";
Modelica_Fluid.Machines.PrescribedPump pump(
N_nominal=3000,
use_N_in=true,
redeclare package Medium = Medium,
redeclare function flowCharacteristic =
Modelica_Fluid.Machines.BaseClasses.PumpCharacteristics.linearFlow (
V_flow_nominal={m0_flow/1000,0.5*m0_flow/1000}, head_nominal=1.5*dp0/
9.81/1000*{1,2}));
Modelica_Fluid.Vessels.OpenTank tank(
height=2,
crossArea=1,
level_start=1,
nPorts=1,
use_portsData=false,
redeclare package Medium = Medium,
p_ambient=100000) "Tank, used to set static pressure in water loop";
MixingVolumes.MixingVolume hea(
nPorts=2,
use_HeatTransfer=true,
redeclare package Medium = Medium,
V=0.1) "Heater";
FixedResistances.FixedResistanceDpM res1(
redeclare package Medium = Medium,
m0_flow=m0_flow,
dp0=dp0Pip/2);
FixedResistances.FixedResistanceDpM res2(
redeclare package Medium = Medium,
m0_flow=m0_flow,
dp0=dp0Pip/2);
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo;
Modelica.Blocks.Sources.Constant dpSet(k=dp0) "Pressure set point";
Modelica.Blocks.Continuous.LimPID conPum(
controllerType=Modelica.Blocks.Types.SimpleController.P,
yMax=3000,
yMin=0.3*3000,
k=1) "Controller for pump";
Modelica.Blocks.Sources.Constant TFurSet(k=273.15 + 60);
Modelica.Blocks.Continuous.LimPID conFur(
controllerType=Modelica.Blocks.Types.SimpleController.P,
yMax=1,
yMin=0,
k=0.1) "Controller for boiler";
Modelica.Thermal.HeatTransfer.Components.ThermalConductor con(G=1000/20/nRoo)
"Thermal conductor";
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor roo(C=10*30*1000, T(
fixed=true)) "Heat capacity of room";
Modelica.Thermal.HeatTransfer.Components.ThermalConductor conWal(G=1000/30/
nRoo) "Thermal conductance of wall to outside";
Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut
"Outside temperature boundary condition";
Modelica.Blocks.Sources.Sine TOutBC(
amplitude=10,
freqHz=1/86400,
offset=273.15,
phase=-1.5707963267949) "Outside air temperature";
Modelica_Fluid.Sensors.RelativePressure dpSen(redeclare package Medium =
Medium);
Actuators.Valves.TwoWayLinear val(
redeclare package Medium = Medium,
dp0(displayUnit="Pa") = dp0Val,
Kv_SI=m0_flow/nRoo/sqrt(dp0Val),
m0_flow=m0_flow/2) "Radiator valve";
Modelica.Blocks.Continuous.LimPID conRoo(
controllerType=Modelica.Blocks.Types.SimpleController.P,
yMax=1,
yMin=0,
k=2) "Controller for room temperature";
Modelica.Blocks.Sources.Constant TRooSet(k=273.15 + 20);
Modelica.Blocks.Logical.Switch switch1;
Modelica.Blocks.Sources.Constant zer(k=0) "Zero signal";
Modelica.Blocks.Logical.Hysteresis hys(
uLow=0.3,
uHigh=0.9,
pre_y_start=false) "Hysteresis";
MixingVolumes.MixingVolume hea1(
nPorts=2,
use_HeatTransfer=true,
redeclare package Medium = Medium,
V=0.1/2) "Heater";
Modelica.Thermal.HeatTransfer.Sensors.TemperatureSensor TRoo1;
Modelica.Thermal.HeatTransfer.Components.ThermalConductor con1(G=1000/20/nRoo)
"Thermal conductor";
Modelica.Thermal.HeatTransfer.Components.HeatCapacitor roo1(
C=10*30*1000, T(
fixed=true)) "Heat capacity of room";
Modelica.Thermal.HeatTransfer.Components.ThermalConductor conWal1(G=1000/30/
nRoo) "Thermal conductance of wall to outside";
Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature TOut1
"Outside temperature boundary condition";
Modelica.Blocks.Sources.Sine TOutBC1(
amplitude=10,
freqHz=1/86400,
offset=273.15,
phase=-1.5707963267949) "Outside air temperature";
Actuators.Valves.TwoWayLinear val1(
redeclare package Medium = Medium,
dp0(displayUnit="Pa") = dp0Val,
Kv_SI=m0_flow/nRoo/sqrt(dp0Val),
m0_flow=m0_flow/2) "Radiator valve";
Modelica.Blocks.Continuous.LimPID conRoo1(
controllerType=Modelica.Blocks.Types.SimpleController.P,
yMax=1,
yMin=0,
k=2) "Controller for room temperature";
Modelica.Blocks.Sources.Constant TRooSet1(
k=273.15 + 20);
equation
connect(TAmb.port, fur.heatPort);
connect(dpSet.y, conPum.u_s);
connect(TFurSet.y, conFur.u_s);
connect(fur.T, conFur.u_m);
connect(hea.ports[2], res2.port_a);
connect(TOut.port, conWal.port_a);
connect(conWal.port_b, roo.port);
connect(roo.port, con.port_b);
connect(con.port_a, hea.heatPort);
connect(TOutBC.y, TOut.T);
connect(roo.port, TRoo.port);
connect(fur.port_b, pump.port_a);
connect(pump.port_b, res1.port_a);
connect(res2.port_b, fur.port_a);
connect(dpSen.p_rel, conPum.u_m);
connect(val.port_a, res1.port_b);
connect(val.port_b, hea.ports[1]);
connect(TRooSet.y, conRoo.u_s);
connect(TRoo.T, conRoo.u_m);
connect(conRoo.y, val.y);
connect(tank.ports[1], fur.port_a);
connect(conPum.y, pump.N_in);
connect(switch1.y, fur.y);
connect(conFur.y, hys.u);
connect(conFur.y, switch1.u1);
connect(pump.port_b, dpSen.port_a);
connect(pump.port_a, dpSen.port_b);
connect(zer.y, switch1.u3);
connect(hys.y, switch1.u2);
connect(TOut1.port, conWal1.port_a);
connect(conWal1.port_b, roo1.port);
connect(roo1.port, con1.port_b);
connect(con1.port_a, hea1.heatPort);
connect(TOutBC1.y, TOut1.T);
connect(roo1.port, TRoo1.port);
connect(TRooSet1.y, conRoo1.u_s);
connect(TRoo1.T, conRoo1.u_m);
connect(conRoo1.y, val1.y);
connect(hea1.ports[2], res2.port_a);
connect(val1.port_a, res1.port_b);
connect(val1.port_b, hea1.ports[1]);
end HeatingSystem;