Boiler short-cycling and low hot-water delta-T
Workbook exercise plant-boiler-cycling · PNNL re-tuning chapter 8 · about 40 minutes
Goal
Find a boiler that short-cycles and a hot-water loop that moves too much water for the heat it delivers. No open dataset in the catalog shows either fault. Then find out how much the short-cycling verdict depends on how often the trend is sampled and on the starts-per-day limit you choose.
Learn more
Read these first (PNNL, free):
- Central Utility Plant Heating Control, the re-tuning guide: its questions on boiler cycling, the hot-water loop's delta-T and resetting the pump's differential pressure are the three parts of this exercise.
- Chapter 8: Central Utility Plant of the re-tuning training.
Datasets and licence
synthetic-hw-plant-cycling: a synthetic hot-water plant that CAMBER generates on your computer. Nothing is downloaded and no real building is behind it. It holds the outdoor temperature, the boiler's firing, the loop supply and return temperatures, the pump speed, and the loop differential pressure with its setpoint, every 15 minutes for three weeks of early spring. Licence Apache-2.0 (CAMBER's own; the data may be shared). About 0.5 MB. See synthetic datasets for how CAMBER generates it.
The same weather and the same building drive four plants, each ingested as PLANT__<plant> in
the facility ds-synthetic-hw-plant-cycling: PLANT__well_tuned, PLANT__short_cycling,
PLANT__marginal and PLANT__low_delta_t. Which is which is the exercise; the instructor key
describes how each was built.
Setup
In the lab
- Run
camber laband open the URL it prints (http://127.0.0.1:8765/lab?token=...). - Tick
synthetic-hw-plant-cycling(its kind readssynthetic) and press Fetch & ingest. CAMBER generates the file instead of downloading it, then ingests it like any other dataset. - When the job is done, the row links to trends (the trend viewer) and to report, the audit report of the dataset's template at the trend's own 15-minute resolution. The lessons in steps 5 and 6 below use the command line.
On the command line
camber datasets fetch synthetic-hw-plant-cycling
camber datasets ingest synthetic-hw-plant-cycling --store lab_store
camber datasets config synthetic-hw-plant-cycling --exercise plant-boiler-cycling --store lab_store --out cyc.json
camber run cyc.json --out cyc_out
camber datasets score synthetic-hw-plant-cycling --store lab_store --findings cyc_out/findings.json
The exercise's config (--exercise plant-boiler-cycling) runs three rules at their defaults on
the 15-minute trend: boiler_short_cycle (firing starts per day), hw_plant_deltat (the loop
delta-T while the boiler fires) and hw_pump_dp_reset (the pump's speed and its DP setpoint).
Two variants run boiler_short_cycle only: one on the same data resampled to an hour, one with a
limit of 10 starts a day instead of 6:
camber datasets config synthetic-hw-plant-cycling --exercise plant-boiler-cycling--hourly --store lab_store --out cyc1h.json
camber run cyc1h.json --out cyc1h_out
camber datasets config synthetic-hw-plant-cycling --exercise plant-boiler-cycling--10starts --store lab_store --out cyc10.json
camber run cyc10.json --out cyc10_out
Steps
- Look before you judge. In the trend viewer, open each of the four plants and plot the boiler firing with the outdoor temperature over two or three days. Zoom in until you can see single 15-minute samples. Then plot the loop supply and return temperatures and the pump speed.
- Run the exercise's config (the commands above). For each plant, read
boiler_short_cycleincyc_out/findings.json: the severity,starts_per_day,runtime_pctandn_starts. - The loop and the pump. Read
hw_plant_deltat(deltaT_median_f,low_deltaT_pct) andhw_pump_dp_reset(median_speed_pct,pct_running_near_full,dp_sp_reset_present) for each plant. - Score. Run
camber datasets scoreand read the rates for the three rules. - Sample it hourly. Run the
hourlyvariant and compare each plant's severity,starts_per_dayandruntime_pctwith step 2, and read the findings' caveats. - Choose the limit. Run the
10startsvariant. Note which verdicts change and which stay.
Questions
- Which plants does
boiler_short_cycleflag, and how badly? What doesruntime_pctsay about the short-cycling boiler? - Which plant fails the loop and pump checks, and what do its delta-T and pump speed say? Why does the short-cycling plant pass them?
- What does the label score say for the three rules? Which plant is the false alarm, and is it one?
- Resampled to an hour, what happens to the short-cycling boiler's
starts_per_day,runtime_pctand severity? What does the caveat say, and why is the hourly count a floor? - With a limit of 10 starts a day, which verdict changes? Where should the limit come from on a real site?
What CAMBER shows
- Findings.
camber runprints one line per finding: one per rule and plant. - Starts.
boiler_short_cyclereportsstarts_per_day(the firing starts, off to on, divided by the days in the trend),n_starts,runtime_pct(the share of time firing) andmax_starts_per_day. It warns at the limit and faults at twice it. On a trend coarser thanmax_interval_min(15 minutes) it also reportsinterval_minandn_partial(samples firing for part of their interval), caveats the count as a floor, and declines (info) rather than pass a boiler whose samples show part-interval firing. - Loop.
hw_plant_deltatreportsdeltaT_median_fandlow_deltaT_pct, the share of occupied firing samples below the 20 °F design minimum. It warns at 20 % and faults at 50 %. - Pump.
hw_pump_dp_resetreportsmedian_speed_pct,pct_running_near_full(speeds of 90 % or more) anddp_sp_reset_present(whether the DP setpoint moves). It faults at 60 % of running samples near full speed. - Score.
camber datasets scoreprints the true- and false-positive rates for the entry's three declared detectors.

From this exercise's synthetic plant PLANT__short_cycling: the boiler_short_cycle evidence trend, the boiler's firing status (1 = firing) over two days. Each shaded interval is a start on a day with at least 6 of them.
Caveats
- The data are synthetic: CAMBER's own model of one plant, built to show these faults. They show what the rules see, not how real plants behave; never cite them as evidence about a building.
- A 15-minute trend still hides a firing shorter than 15 minutes, so a start count is a floor.
hw_plant_deltatjudges occupied firing samples only (weekdays 07:00 to 18:00 by default).- The starts-per-day limit and the 20 °F design delta-T are generic defaults. A real boiler's minimum cycle time and a real loop's design delta-T come from its documentation.
Going further
- Read the boiler plant exercise: its plant trends hourly. Which of this exercise's findings could you have seen there?
- Run
camber rules params boiler_short_cycleandcamber rules params hw_plant_deltatto see where each default comes from and how to calibrate it.