Waterschap Brabantse Delta · R&D-lab · research-artifact

Clamp-fix voor de smoor-cliff — build_curve.py --add-shutoff

R&D-lab gemeten 2026-06-24 versie 1.1 gereviewd
De uitgerolde 40-sleutel opzoektabel voor de KSB Calio 40-80 voorspelt het debiet in de hoek vlak vóór shutoff (gesmoorde klep) tot 1,8 m³/h te hoog — het enige residu dat alleen extra dP-sleutels niet konden oplossen. Deze analyse, tegen 1617 gemeten punten van de RevPi181033 pilot-opstelling, laat zien dat het een clamp per dP-familie is (geen ruis) en dat --add-shutoff — één extra familiesleutel net onder de maximale dP van elk controlniveau — de cliff wegneemt met dezelfde inputs die de twin al heeft.

Het mechanisme: een clamp per familie, geen ruis

De opstelling wordt afgelopen op een raster van (pomp control% × klep%); dP is een afhankelijke variabele. De predict-curve is gesleuteld op dP-familie f, elke familie een control%→debiet-snede. Een controlniveau hoort alleen bij familiesleutel d als d ≤ de maximaal gemeten dP van dat niveau. Vlak voor shutoff bereiken de eigen data van een laag controlniveau wél een hoge dP (klep bijna dicht), maar de eerstvolgende familiesleutel daarboven sluit ze uit — dus predict bepaalt een minimaal bereikbaar control boven het gevraagde, clampt omhoog, en geeft een te hoog debiet terug.

Uitgewerkt voorbeeld — ctrl 52%, dP 339 mbar (klep 25%). De eigen klepsweep van control 52% is netjes en monotoon: dP 214→342 mbar terwijl de klep sluit, debiet 5.1→0.39 m³/h. Bij dP 339 is het gemeten debiet 1.12. Maar familiesleutel 327 houdt 2.36 bij ctrl 52, sleutel 345 begint bij ctrl 56 (52% uitgesloten, want de maximale dP is 342 < 345). Interpolatie van de familie bij dP 339 geeft een min-control van ≈54.6, dus ctrl 52 clampt omhoog → voorspeld 2.90. --add-shutoff zet een sleutel vast op ≈341 die ≈0.4 houdt, wat de dP-interpolatie een strakke bracket geeft → voorspeld 0.65 (gemeten 1.12).

Resultaat — debietresidu binnen werkgebied |gemeten − voorspeld|

In de pagina berekend over de punten waar beide curves voorspellen (zelfde puntenset, eerlijke vergelijking). Aantallen hieronder weergegeven.

curve: x-as:
gesmoorde hoek (klep ≤ 25%) rest van werkgebied scrollwiel = zoom · slepen = pannen · dubbelklik = reset
Debietresidu (gemeten − voorspeld) voor de baseline (40 sleutels) en de +shutoff-curve (86 sleutels), uitzetbaar tegen dP of als gemeten-vs-voorspeld. De gesmoorde hoek (klep ≤ 25%, rood) is precies waar de baseline uitloopt en waar de shutoff-sleutels bijten. Databron: 1617 gemeten punten KSB Calio 40-80 (RevPi181033, 2026-06-24).

Residu per dP-band en per slechtste-punt

|residu| p95 per dP-band (m³/h): per band het aantal punten en de p95 van baseline vs +shutoff, met het verschil Δ. Zo zie je dat de winst in de hoge-dP-banden (de cliff) zit en de lage-dP-band marginaal inlevert.
dP-band (mbar)puntenbaseline p95+shutoff p95Δ
Dezelfde slechtste-10 baseline-punten, opnieuw gescoord met de shutoff-curve: per punt ctrl%, dP, klep%, het gemeten debiet en de voorspelling + |residu| van beide curves. De baseline-uitschieters (de cliff) worden stuk voor stuk teruggebracht.
ctrl%dPklep%gemetenbaseline voorsp.baseline |r|shutoff voorsp.shutoff |r|

Discussie & beperkingen

Trade-off. --add-shutoff zet één extra familiesleutel vast net onder de maximale dP van elk controlniveau, waardoor de curve groeit van 40 → 86 sleutels (≈2.1× het bestand, verwaarloosbaar tijdens runtime). Elke geaggregeerde metriek verbetert (max 1.79→0.82, p95 0.31→0.29, vermogen p95 5.9→5.2 W), maar de dichtste lage-dP-band (75–200) wordt marginaal slechter doordat de extra cliff-sleutels deze licht verstoren. De max van 0.82 evenaart nu het model affiniteit-op-gemeten-toerental (0.80) — maar zonder gemeten toerental nodig te hebben, zodat de opzoektabel bruikbaar blijft voor open-loop / control%-only voorspelling.

Reproduceren: tools/rig/build_curve.py --tsv data/calio-40-80-matrix-2026-06-24.tsv --nkeys 42 --flow-a 0.000625 --flow-b -2.5 --key-unit-div 13.33333 --power-div 1000 --key-gamma 0.8 --add-shutoff. Gescoord met tools/rig/analyze_residuals.js tegen dezelfde matrix.

Bronnen

  1. Meetmatrix KSB Calio 40-80, RevPi181033 pilot-opstelling — 1617 gemeten punten op een raster van (pomp control% × klep%), data/calio-40-80-matrix-2026-06-24.tsv. gemeten 2026-06-24
  2. build_curve.py, curve-generator met --add-shutoff (EVOLV rotating-machine tooling), tools/rig/build_curve.py.
  3. analyze_residuals.js, residu-scoring tegen de meetmatrix, tools/rig/analyze_residuals.js.
  4. KSB Calio 40-80, pompgegevens / datasheet (fabrikant KSB).
Data-vintage Meetmatrix RevPi181033 · gemeten 2026-06-24 (1617 punten)
Methode opzoektabel op dP-familie met clamp; --add-shutoff voegt cliff-sleutels toe; residu = |gemeten − voorspeld| binnen werkgebied
Code & reproduceerbaarheid build_curve.py / analyze_residuals.js; data + logica in dit bestand (view-source); Plotly uit /artifacts/lib/
Contact R&D-lab · lab.wbd-rd.nl