Waterschap Brabantse Delta · R&D-lab · research-artifact
De EVOLV digital-twin heeft voor elke roterende machine een prestatiecurve nodig die zijn echte gedrag voorspelt. Deze karakterisering meet de KSB Calio 40-80 (RevPi181033 pilot-testopstelling testopstelling_1, pump1, gekoppeld aan de pump1- & pump3-twins, 2026-06-23 → 06-24) end-to-end en past de puntenwolk in de rotatingMachine cubic-spline-voorspeller als nq/np-slices per druk, gevalideerd tegen de echte output en opgeslagen in de asset-catalogus.[1]
Externe sweep-controller (rig_sweep.js, hergebruikt de offline geteste brain engine.js) — de Node-RED van de pi is CPU-verzadigd, dus het aansturen van sweep-timing/heartbeat daarbinnen riskeerde een valse watchdog-trip.
Raster: fijn 2%×2% (klep 100→54%, oplopend) + grof 3%×4% aflopend met nul-debiet-skip (54→1%). InfluxDB 2.7 + Grafana 11.3 (dashboard rig-pump-curve); engineering-schalen afgelezen uit de Node-RED sensorbereiken (debiet 0–10 m³/h, druk −200…1000 mbar).
| Debiet (UFM ft1) | 0.09 – 6.69 m³/h | ruw 4150–14697 · schaal (ft1−4000)/1600 |
| Differentiële head (Vega pt2−pt1) | 0.4 – 7.9 m (42 – 773 mbar) | dP_mbar = dp_raw × 0.075 |
| Toerental (Modbus) | 1020 – 3530 rpm | 2–10 V analoge aansturing |
| Asvermogen (Modbus) | 2 – 165 W | control% = (V−2)/8 × 100 |
| BEP (geschat) | 47.4% @ 5.30 m³/h · 4.96 m · 151 W | η = ρgQH/P |
De rotatingMachine-node (model ksb-calio-40-80) aangedreven op 6 echte werkpunten: voorspeld debiet/vermogen (zijn predict-engine + de curve) vs de gemeten echte output. De uitgerolde node laadt de curve en voorspelt live (gestabiliseerd ctrl 100% → 3.18 vs 3.10 m³/h in de runtime).
| control% | dP | voorsp. debiet | gem. debiet | Δ debiet | voorsp. vermogen | gem. vermogen | Δ vermogen |
|---|---|---|---|---|---|---|---|
| 40 | 230 mbar | 2.70 | 2.87 m³/h | −0.17 | 43 | 45 W | −2 |
| 56 | 360 | 2.16 | 2.33 m³/h | −0.17 | 60 | 59 W | +1 |
| 70 | 380 | 5.29 | 5.30 m³/h | −0.01 | 125 | 125 W | 0 |
| 80 | 581 | 2.13 | 2.91 m³/h | −0.78 | 100 | 111 W | −11 |
| 90 | 442 | 5.75 | 5.77 m³/h | −0.02 | 156 | 155 W | +1 |
| 100 | 657 | 2.99 | 3.10 m³/h | −0.11 | 132 | 133 W | −1 |
Overeenkomst: debiet binnen ~0.1–0.2 m³/h en vermogen binnen ~2 W over het hele werkbereik (het ene zwakkere punt, 80% @ 581 mbar, ligt op een rand met hoge head en gesloten klep van het gesplinede gebied). Over de volledige dataset van 1617 punten zijn de mediane fouten ~1.4% debiet / 1.37 W vermogen (zie Validatie hieronder). Let op: de live auto-capture van 6 punten in Node-RED liep tegen een Port-0 delta-compressie-race voor tussenliggende punten; de uitgerolde node zelf voorspelt correct (de engine + curve hier zijn precies wat hij draait) — een settle-gated capture is een kleine vervolgactie.
Bemonsterd via de rotatingMachine predict-engine over het haalbare control-%-venster van elk niveau.
| dP | head | haalbaar ctrl% | debiet min→max | vermogen min→max |
|---|---|---|---|---|
| 100 mbar | 1.0 m | 15–23% | 1.74 → 3.17 m³/h | 14 → 27 W |
| 200 mbar | 2.0 m | 35–49% | 2.73 → 4.91 m³/h | 38 → 70 W |
| 300 mbar | 3.1 m | 49–67% | 2.41 → 5.99 m³/h | 51 → 122 W |
| 400 mbar | 4.1 m | 62–100% | 2.98 → 6.30 m³/h (piek ~78%) | 77 → 161 W |
| 500 mbar | 5.1 m | 71–100% | 2.37 → 5.13 m³/h | 85 → 153 W |
| 600 mbar | 6.1 m | 80–100% | 0.88 → 3.93 m³/h | 78 → 143 W |
| 700 mbar | 7.1 m | 92–100% | ~2.13 m³/h | ~120 W |
Fysisch consistent: debiet stijgt met toerental bij elke head; hogere head vereist een hoger minimumtoerental; bij vol toerental snijdt smoren (↑head) het debiet richting shutoff (6.3→5.1→3.9→2.1 m³/h voor 400→700 mbar).
De rotatingMachine-voorspeller (predict-klasse + de ksb-calio-40-80-curve) gedraaid over alle 1617 gemeten punten; residu = gemeten − voorspeld.
| segment | grootheid | bias | |mediaan| | |p95| | |max| |
|---|---|---|---|---|---|
| binnen werkgebied (n=1276) | debiet | +0.05 | 0.062 m³/h | 0.63 m³/h | 1.71 m³/h |
| binnen werkgebied (n=1276) | vermogen | +1.4 | 1.37 W | 15.1 W | 27.2 W |
| alle punten (n=1617) | debiet | +0.04 | 0.109 m³/h | 1.33 m³/h | 2.50 m³/h |
| alle punten (n=1617) | vermogen | +0.0 | 1.20 W | 17.2 W | 46.3 W |
Mediane debietovereenkomst ~1.4% van de meetwaarde — binnen de typische UFM-nauwkeurigheid (1–2%). Staarten (p95/max) zijn de shutoff-hoek (enkele niet-splinebare lijn, predict clamp't) en de UFM-ruisvloer bij bijna nul debiet — per definitie buiten het gekarakteriseerde werkgebied. De live uitgerolde twin laadt de curve schoon (geen fouten); het sluiten van de live operationele lus (de pomp-dP voeden + de Modbus-eenheden van de residu-node uitlijnen) is de resterende bedradingsstap.
Oorzaak (geen vertragingen, geen instabiele punten): de slechtste 5%-staart was slechts voor 5% instabiel (= het baseline-percentage) en die punten waren goed gestabiliseerd (σ ~0.01-0.03 m³/h). Het was een systematische over-voorspelling bij zwaar gesmoorde punten dicht bij shutoff (klep ~19-25% open, echt debiet ~1.0-1.5 m³/h, curve voorspelt ~2.3-2.95). Dicht bij de shutoff van elk pomptoerental heeft de debiet-vs-dP-curve een steile cliff; met slechts 16 dP-familiesleutels (44 mbar uit elkaar) vlakte de familie-interpolatie van de voorspeller die knik af. Erger nog, de bovenste omsluitende familie mist vaak het opgevraagde control-niveau (bijv. control 60% kan fysiek geen 424 mbar bereiken), dus de voorspeller clamp'te naar het debiet van een hoger toerental en mengde dat erin.
Fix: de curve opnieuw opgebouwd met 40 dP-familiesleutels geconcentreerd bij de gesmoorde hoek (~14 mbar afstand bij hoge dP vs ~26 bij lage dP; γ=0.8-plaatsing). Dichtere sleutels bij de shutoff van elk toerental laten de familie die dat control-niveau wél vasthoudt het instortende debiet dragen. De sleuteldichtheid is afgetopt op het punt waar de monotone-cubic-spline zou gaan ringen (overshoot) op de steile cliff — dichter gaan introduceerde opnieuw onfysische rimpeling, dus dit is de praktische limiet van de engine.
| debiet |residu| binnen werkgebied | vóór (16 sleutels) | na (40 sleutels) |
|---|---|---|
| p95 | 0.630 | 0.319 (−49%) |
| p90 | 0.427 | 0.241 |
| mediaan | 0.062 | 0.048 |
| 500-650 mbar p95 | 0.849 | 0.676 |
| 650-800 mbar p95 | 1.236 | 0.31 |
| vermogen p95 | 15.1 W | 6.1 W |
| absolute max | 1.71 | 1.81 (ongewijzigd) |
Eerlijke kanttekening: de absolute max verbeterde niet. Een handvol cliff-rand-punten bij midden-control (bijv. control 52% bij dP 339, precies op de shutoff van dat toerental) voorspellen nog steeds ~1.5-1.8 m³/h verkeerd, omdat de opgevraagde dP net boven het punt zit waar enige familie dat control-niveau nog kan vasthouden, wat de clamp afdwingt. Dat is de structurele limiet van de predict-engine (normalisatie per familie + clamping), niet een van sleuteldichtheid — het wegnemen ervan vereist feasibility-aware of lineaire interpolatie, een engine-wijziging die hier niet is gedaan. De punten hieronder weerspiegelen nu de 40-sleutel-curve; de live twins op RevPi181033 (pump_1, pump_3) en de catalogus/Postgres zijn dienovereenkomstig bijgewerkt.
scrollwiel = zoom · slepen = pannen · hover = puntdetails · dubbelklik = reset. Wissel de weergave en de kleuring.
| Curve (nq/np, eng-eenheden) | curves/ksb-calio-40-80.json | 16 dP-sleutels |
| Catalogus-spec-vermelding | catalog/rotatingmachine.json + seed | toegevoegd |
| Postgres curve-store (lokaal) | asset_curve / asset_spec op de pi | geladen + geverifieerd |
| Postgres source-of-truth (cloud-pad) | seed/curves/…json.gz → CI/deploy | geseed |
| Twin-model gekoppeld | pump1 + pump3 → ksb-calio-40-80 | uitgerold |
| PR — generalFunctions | RnD/generalFunctions #14 | open |
| PR — EVOLV | RnD/EVOLV #79 | open |
testopstelling_1 — 1617 steady-state-punten over 42 klepstanden; InfluxDB 2.7 + Grafana 11.3 (dashboard rig-pump-curve). gemeten 2026-06-23 → 06-24rig_sweep.js / engine.js / tools/rig/RESULTS.md (EVOLV rotating-machine tooling).