Skip to content

Commit

Permalink
Closes #702, #635, #432, #733
Browse files Browse the repository at this point in the history
  • Loading branch information
dhblum authored Feb 27, 2025
2 parents a1d0eaf + 54ca2d2 commit 21e6a6a
Show file tree
Hide file tree
Showing 75 changed files with 441,191 additions and 408,415 deletions.
2 changes: 1 addition & 1 deletion bacnet/create_ttl.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
baseurl = 'http://127.0.0.1:80'

# Instatiate test case
test_case_name = 'bestest_air'
test_case_name = 'singlezone_commercial_hydronic'
testid = requests.post("{0}/testcases/{1}/select".format(baseurl, test_case_name)).json()["testid"]

# Write the file prefix
Expand Down
51 changes: 51 additions & 0 deletions releasenotes.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,57 @@

Released on xx/xx/xxxx.

**The following changes are not backwards-compatible and significantly change benchmark results:**

- Update ``singlezone_commercial_hydronic`` test case according to changes made for the Adrenalin competition and various issues. This is for [#702](https://github.com/ibpsa/project1-boptest/issues/702),
[#635](https://github.com/ibpsa/project1-boptest/issues/635),
[#432](https://github.com/ibpsa/project1-boptest/issues/432), and
[#733](https://github.com/ibpsa/project1-boptest/issues/733).
The changes are summarized as follows:
- Hydronic system:
- Added piping segments in hydronic system to increase thermal delay
- Resized valves and switched to two-way valves
- Switched to pressure driven pump in hydronic system
- Switched DH heat exchanger from constant effectiveness to plate HX model
- Ventilation:
- Added internal control of rotary heat exchanger
- Linked control of supply and extract fan for baseline controller
- Occupancy profile:
- Fixed missing data that resulted in day of week mismatch
- Control I/O:
- Changes to input and measurement names
- Added new measurement points
- Scenario changes for time periods
- Peak Heat Day now centered around day 42
- Typical Heat Day now centered around day 308

Impacts on KPIs calculated compared to v0.7.1 for indicated scenarios are as follows:

**Peak Heat Day**
|KPI |% Change|
|-----------------------|--------|
|ener_tot |+3.26% |
|emis_tot |+3.16% |
|tdis_tot |-98.5% |
|idis_tot |-99.5% |
|pele_tot |-37.2% |
|pdih_tot |-60.5% |
|cost_tot_constant |+3.32% |
|cost_tot_dynamic |+3.26% |
|cost_tot_highly_dynamic|+3.16% |

**Typical Heat Day**
|KPI |% Change|
|-----------------------|--------|
|ener_tot |+8.01% |
|emis_tot |-2.86% |
|tdis_tot |-99.8% |
|idis_tot |-100% |
|pele_tot |-12.7% |
|pdih_tot |-59.0% |
|cost_tot_constant |+16.6% |
|cost_tot_dynamic |+15.3% |
|cost_tot_highly_dynamic|+14.6% |

## BOPTEST v0.7.1

Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified testcases/singlezone_commercial_hydronic/doc/images/bms_ahu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
519 changes: 367 additions & 152 deletions testcases/singlezone_commercial_hydronic/doc/index.html

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,57 +1,43 @@
within OU44Emulator.Models;
model BuildingControl
extends BuildingBase(scale_factor(k=5));
extends BuildingBase;
Buildings.Controls.Continuous.LimPID conPIDcoil(
Ti=600,
Ti=300,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.005)
annotation (Placement(transformation(extent={{-60,0},{-76,-16}})));
Modelica.Blocks.Sources.Constant veAirSp(k=294.15)
annotation (Placement(transformation(extent={{-4,-16},{-20,0}})));
k=0.01)
annotation (Placement(transformation(extent={{-62,0},{-78,-16}})));
Modelica.Blocks.Sources.Constant veAirSp(k=293.15)
annotation (Placement(transformation(extent={{-2,-16},{-18,0}})));
Modelica.Blocks.Math.MatrixGain splitFour(K=[1; 1; 1; 1])
"Splits signal into four elevations"
annotation (Placement(transformation(extent={{-70,172},{-50,192}})));
annotation (Placement(transformation(extent={{-74,194},{-54,214}})));
Modelica.Blocks.Sources.Constant shades(k=0)
annotation (Placement(transformation(extent={{-120,172},{-100,192}})));
Modelica.Blocks.Sources.Constant stpCO2(k=800) "CO2 setpoint [ppm]"
annotation (Placement(transformation(extent={{-118,194},{-98,214}})));
Modelica.Blocks.Sources.Constant stpCO2(k=970) "CO2 setpoint [ppm]"
annotation (Placement(transformation(extent={{-238,132},{-218,152}})));
Buildings.Controls.Continuous.LimPID conPIDfan(
Td=300,
Ti=600,
k=0.005,
yMin=0.3,
initType=Modelica.Blocks.Types.InitPID.InitialState,
xi_start=0,
xd_start=0,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
reverseActing=false)
annotation (Placement(transformation(extent={{-194,72},{-174,92}})));
Buildings.Controls.Continuous.LimPID conPIDrad(
Ti=600,
Ti=300,
controllerType=Modelica.Blocks.Types.SimpleController.PI,
k=0.005)
k=0.04)
annotation (Placement(transformation(extent={{116,-52},{100,-36}})));
Buildings.Controls.SetPoints.OccupancySchedule Occupancy_schedule(period=
604800, occupancy=3600*{31,43,55,67,79,91,103,115,127,139})
annotation (Placement(transformation(extent={{136,-20},{152,-4}})));
Modelica.Blocks.Math.BooleanToReal booleanToReal(realTrue=1, realFalse=0)
annotation (Placement(transformation(extent={{172,-18},{186,-4}})));
Modelica.Blocks.Sources.Constant Tset(k=294.15) "temperature setpoint"
annotation (Placement(transformation(extent={{190,-60},{176,-46}})));
Modelica.Blocks.Math.Product product
annotation (Placement(transformation(extent={{152,-54},{136,-38}})));
Buildings.Utilities.IO.SignalExchange.Overwrite oveTSupSet(description=
"AHU supply air temperature set point for heating",
u(
Buildings.Utilities.IO.SignalExchange.Overwrite oveTSupSetAir(description="AHU supply air temperature set point for heating",
u(
max=273.15 + 40,
unit="K",
min=273.15 + 15))
"Overwrite AHU supply air temperature set point for heating"
annotation (Placement(transformation(extent={{-26,-14},{-38,-2}})));
Buildings.Utilities.IO.SignalExchange.Read reaTZon(
description="Zone air temperature",
KPIs=Buildings.Utilities.IO.SignalExchange.SignalTypes.SignalsForKPIs.AirZoneTemperature,
y(unit="K")) "Read zone air temperature"
annotation (Placement(transformation(extent={{62,50},{74,62}})));

Buildings.Utilities.IO.SignalExchange.Overwrite oveCO2ZonSet(description=
"Zone CO2 concentration setpoint", u(
Expand All @@ -62,15 +48,6 @@ model BuildingControl
extent={{-8,-8},{8,8}},
rotation=-90,
origin={-208,112})));
Buildings.Utilities.IO.SignalExchange.Read reaTCoiRet(
KPIs=Buildings.Utilities.IO.SignalExchange.SignalTypes.SignalsForKPIs.None,
y(unit="K"),
description="AHU heating coil return water temperature")
"Read heating coil return water temperature" annotation (Placement(
transformation(
extent={{6,6},{-6,-6}},
rotation=180,
origin={-114,-32})));

Buildings.Utilities.IO.SignalExchange.Overwrite oveValRad(u(
min=0,
Expand All @@ -84,51 +61,83 @@ model BuildingControl
unit="1"), description="AHU heating coil valve control signal")
"Overwrite AHU heating coil control valve signal"
annotation (Placement(transformation(extent={{-82,-14},{-94,-2}})));
Buildings.Utilities.IO.SignalExchange.Overwrite oveTZonSet(description=
"Zone temperature set point for heating", u(
unit="K",
min=273.15 + 10,
max=273.15 + 30)) "Overwrite for zone temperature set point for heating"
annotation (Placement(transformation(
extent={{-8,8},{8,-8}},
rotation=180,
origin={134,-44})));
Buildings.Utilities.IO.SignalExchange.Overwrite ovePum(description="Pump dP control signal for heating distribution system",
u(
min=0,
max=50000,
unit="Pa")) "Overwrite pump speed serving heating distribution system"
annotation (Placement(transformation(extent={{-186,-228},{-166,-208}})));
Modelica.Blocks.Sources.Constant Pump_dp(k=50000)
"dP signal for pump in district heating"
annotation (Placement(transformation(extent={{-228,-230},{-208,-210}})));
SubModels.RadiatorSetPoint radiatorSetPoint(TsetUnocc(k=292.15), TsetOcc(k=
295.15))
annotation (Placement(transformation(extent={{154,-54},{174,-32}})));
equation
connect(ahu.Tsu, conPIDcoil.u_m) annotation (Line(points={{-119.4,36},{-116,
36},{-116,10},{-68,10},{-68,1.6}},color={0,0,127}));
connect(splitFour.y, ou44Bdg.uSha) annotation (Line(points={{-49,182},{-28,
182},{-28,74},{-19.6,74}}, color={0,0,127}));
36},{-116,10},{-70,10},{-70,1.6}},color={0,0,127}));
connect(splitFour.y, ou44Bdg.uSha) annotation (Line(points={{-53,204},{-32,
204},{-32,74},{-19.6,74}}, color={0,0,127}));
connect(shades.y, splitFour.u[1])
annotation (Line(points={{-99,182},{-72,182}}, color={0,0,127}));
annotation (Line(points={{-97,204},{-76,204}}, color={0,0,127}));
connect(senCO2.ppm,conPIDfan. u_m)
annotation (Line(points={{-67,66},{-184,66},{-184,70}}, color={0,0,127}));
annotation (Line(points={{-75,68},{-184,68},{-184,70}}, color={0,0,127}));
connect(conPIDfan.y, ahu.y)
annotation (Line(points={{-173,82},{-142,82},{-142,55}}, color={0,0,127}));
connect(Occupancy_schedule.occupied, booleanToReal.u) annotation (Line(points=
{{152.8,-16.8},{164,-16.8},{164,-11},{170.6,-11}}, color={255,0,255}));
connect(booleanToReal.y, product.u1) annotation (Line(points={{186.7,-11},{
190,-11},{190,-41.2},{153.6,-41.2}}, color={0,0,127}));
connect(product.u2, Tset.y) annotation (Line(points={{153.6,-50.8},{170,-50.8},
{170,-53},{175.3,-53}}, color={0,0,127}));
connect(veAirSp.y, oveTSupSet.u)
annotation (Line(points={{-20.8,-8},{-24.8,-8}}, color={0,0,127}));
connect(Ti.T, reaTZon.u)
annotation (Line(points={{54,56},{60.8,56}}, color={0,0,127}));
connect(reaTZon.y, conPIDrad.u_m) annotation (Line(points={{74.6,56},{78,56},
{78,-56},{108,-56},{108,-53.6}}, color={0,0,127}));
connect(veAirSp.y, oveTSupSetAir.u)
annotation (Line(points={{-18.8,-8},{-24.8,-8}}, color={0,0,127}));
connect(stpCO2.y, oveCO2ZonSet.u) annotation (Line(points={{-217,142},{-208,
142},{-208,121.6}}, color={0,0,127}));
connect(oveCO2ZonSet.y, conPIDfan.u_s) annotation (Line(points={{-208,103.2},
{-208,82},{-196,82}}, color={0,0,127}));
connect(senTemCoiRet.T, reaTCoiRet.u)
annotation (Line(points={{-141,-32},{-121.2,-32}}, color={0,0,127}));
connect(conPIDrad.y, oveValRad.u) annotation (Line(points={{99.2,-44},{80,-44},
{80,-40},{39.2,-40}}, color={0,0,127}));
connect(conPIDcoil.y, oveValCoi.u)
annotation (Line(points={{-76.8,-8},{-80.8,-8}}, color={0,0,127}));
connect(oveTSupSet.y, conPIDcoil.u_s)
annotation (Line(points={{-38.6,-8},{-58.4,-8}}, color={0,0,127}));
connect(oveValCoi.y, valCoil.y)
annotation (Line(points={{-94.6,-8},{-114,-8}}, color={0,0,127}));
connect(oveValRad.y, valRad.y) annotation (Line(points={{25.4,-40},{-58,-40},
{-58,-70}}, color={0,0,127}));
annotation (Line(points={{-78.8,-8},{-80.8,-8}}, color={0,0,127}));
connect(oveTSupSetAir.y, conPIDcoil.u_s)
annotation (Line(points={{-38.6,-8},{-60.4,-8}}, color={0,0,127}));
connect(oveValRad.y, valRad.y) annotation (Line(points={{25.4,-40},{-12,-40},
{-12,-108}},color={0,0,127}));
connect(oveValCoi.y, valCoil.y) annotation (Line(points={{-94.6,-8},{-108,-8},
{-108,-2},{-122,-2},{-122,18},{-140,18}},
color={0,0,127}));
connect(oveTZonSet.y, conPIDrad.u_s)
annotation (Line(points={{125.2,-44},{117.6,-44}}, color={0,0,127}));
connect(Pump_dp.y,ovePum. u)
annotation (Line(points={{-207,-220},{-198,-220},{-198,-218},{-188,-218}},
color={0,0,127}));
connect(ovePum.y, dh.y) annotation (Line(points={{-165,-218},{-152,-218},{-152,
-196},{-143,-196}}, color={0,0,127}));
connect(oveTSupSetAir.y, ahu.TsupSet) annotation (Line(points={{-38.6,-8},{-50,
-8},{-50,12},{-106,12},{-106,60},{-138,60},{-138,55},{-136.4,55}},
color={0,0,127}));
connect(reaTZon.y, conPIDrad.u_m) annotation (Line(points={{78.6,56},{88,56},
{88,-62},{108,-62},{108,-53.6}}, color={0,0,127}));
connect(radiatorSetPoint.y1, oveTZonSet.u) annotation (Line(points={{153.6,
-42.12},{151.6,-42.12},{151.6,-44},{143.6,-44}}, color={0,0,127}));
annotation (
experiment(StopTime=2678400, Interval=600),
__Dymola_experimentSetupOutput,
__Dymola_experimentFlags(
Advanced(GenerateVariableDependencies=false, OutputModelicaCode=false),
Evaluate=false,
OutputCPUtime=false,
OutputFlatModelica=false));
OutputFlatModelica=false),
Diagram(graphics={
Text(
extent={{-170,-234},{-110,-238}},
lineColor={28,108,200},
textStyle={TextStyle.Bold},
fontSize=12,
textString="District heating
")}));
end BuildingControl;
Loading

0 comments on commit 21e6a6a

Please sign in to comment.