WBD R&D-lab / EVOLV / MONSTERWerkende VPS-proef · v2

Eén bemonsteringsplan.
Uitvoering op de edge of in de PLC.

MONSTER vertaalt het AQUON-rooster en de voorspelling van het influentvolume naar een plan voor debietproportionele bemonstering. De uitvoering past bij de veldopstelling; FROST levert de gegevens aan de backend.

Basis: veldkeuzes uit het projectgesprek30 september 2026Refactor getest in Node-RED en FROST

Proef draaien en wijzigingen nakijken

Open de nieuwe Node-RED-tab om de flow en de HTML van de node te bekijken. Meld je aan in Node-RED om de proefbediening te gebruiken.

Open Node-RED-proeftab ↗Open proefbediening ↗

De JSON bevat alleen de nieuwe proeftab: 61 nodes inclusief configuratie. Het ZIP bevat de MONSTER-code, gerichte measurement-patch, AQUON-container, schema’s, documentatie en controle-uitkomsten. Geheimen staan uitsluitend in de serveromgeving. Raadpleeg het README vóór hergebruik.

VPS-mediaan: voorbereid voor later

De node ontvangt straks mediaan debiet vanuit een VPS-service. De input medianFlow bewaart waarde, eenheid, uitgiftetijd en optioneel monsterpunt, historieperiode en aantal metingen. Min/max vormen geen lokale schatting. Een ontvangen mediaan verandert nog geen plan en activeert geen fallback.

{ "command": { "medianFlow": {
  "value": 1250, "unit": "m3/h",
  "issuedAt": "2026-09-30T12:00:00Z",
  "samplePointId": "112150"
} } }

In de proef is 1.250 m³/h ontvangen en behouden na herdeploy; status: stored-not-used. Het toekomstige VPS-endpoint en de regels voor geldigheid en activering worden later toegevoegd. De proefforecast blijft de rekenbasis.

Werkelijk opgeslagen eindrecord

Teruggelezen uit FROST na een gesimuleerde handmatige PLC-start en stop. Het setpoint is de werkelijk aangeleverde PLC-waarde in de proef.

{
  "runId": "mvps-monster-field-node-1790773568544-5",
  "reason": "plc-stopped",
  "source": "plc-feedback",
  "endedAt": 1790773570412,
  "startedAt": 1790773568544,
  "m3PerPulse": 105,
  "pulseCommands": 0,
  "setpointKnown": true,
  "measuredVolumeM3": 0.588
}

Zo ziet de refactor eruit

MONSTER-node: HTML-editor op de VPS
MONSTER-node: HTML-editor op de VPS
Proefbediening: vastgezet PLC-runsetpoint
Proefbediening: vastgezet PLC-runsetpoint

De nieuwe keten

Kies waar de pulsen worden uitgevoerd
Hosting van centrale diensten
MONSTER veldarchitectuur met uitvoering op de edgeAQUON en het influentmodel lopen als centrale containerdiensten. Hun kalender en voorspelling gaan naar MONSTER op de edge. Measurement geeft PLC-debiet één-op-één door, met alleen noodzakelijke analoge schaalconversie. MONSTER berekent een plan. In modus A geeft de edge pulsen aan de kast via de PLC of een directe uitgang. In modus B krijgt de PLC een verhouding en kalender. Telemetrie gaat via een adapter naar FROST en de backend. CENTRALE DIENSTEN · EIGEN VPS → LATER AZURE VELD · PLC, EDGE EN MONSTERNAMEKAST GEGEVENS · FROST EN BACKEND rooster kalender 24-uursvolume pulscommandovia PLC óf directe digitale uitgang OPC UA-velden*pulsen plan + status running / actief setpoint nodig* AQUONBestaande planningbron blijft gelijk AQUON-serviceSFTP → CSV → kalenderwachtwoord via env · eigen API InfluentmodelContainer · voorspelling 24 uurbestaande POST /predict Debiet uit de PLCAnaloog / digitaal / OPC UAactuele influentmeting Measurement1-op-1 · geen afvlakkingdebiet in m³/h + kwaliteit MONSTERBemonsteringsplanforecast → verhouding · kalender door MonsternamekastNeemt deelmonsterspuls = opdracht tot bemonstering Edge voert pulsen uitwerkelijk debiet → volume → puls PLC voert uitverhouding + kalender FROST-adapterEVOLV-outputmetingen + JSON-runrecords FROSTobservaties Backendinzicht /dashboard
BrongegevensBesturingTelemetrieVoorgestelde terugmelding
Figuur 1 · Veldarchitectuur en werkende proef. De knoppen tonen twee uitvoeringsvormen van hetzelfde plan. Klik een blok voor de verantwoordelijkheid. FROST-metingen en runrecords zijn aangesloten. PLC-tags volgen later; momenteel komt alleen storing uit de kast; pijlen leggen geen definitief transportprotocol vast.

A · De edge integreert het werkelijk gemeten debiet en geeft een puls zodra het ingestelde volume is gepasseerd. De puls loopt via de PLC of rechtstreeks naar een digitale uitgang.

Van planning naar uitvoering

  1. Kalender ontvangenDe AQUON-container haalt via SFTP (poort 22) het bestand wsBD_MONSTERNAMETIJDEN.csv op, leest de CSV-kolommen en levert de kalender via een eigen API. Het gedeelde wachtwoord staat in AQUON_SFTP_PASSWORD.
  2. Voorspelling ontvangenDe edge haalt de influentvoorspelling op bij de centrale modeldienst. Het verwachte volume is de basis voor het volgende 24-uursmonster. De edge berekent elk uur een nieuwe verhouding zolang de kast idle is.
  3. Plan berekenenMONSTER berekent de verhouding uit het voorspelde influentvolume, de gewenste monsterinhoud en het volume per deelmonster.
  4. Plan uitvoerenA: de edge maakt pulsen uit het actuele debiet. B: de PLC ontvangt dagelijkse kalenderupdates en tijdig de berekende m³/puls. Na start blijft het geaccepteerde setpoint vast.
  5. Uitvoering vastleggenPlan, status en beschikbare uitvoeringsgegevens gaan via de FROST-adapter naar FROST. De backend gebruikt die gegevens voor inzicht en opvolging.
Vastgelegd: kalender dagelijks doorzetten. Elk uur opnieuw m³/puls berekenen en beschikbaar stellen als de kast idle is. Na iedere start — ook handmatig — geen nieuw setpoint sturen tot stop of uiterlijk 24 uur na start.

De node krijgt een duidelijke taak

MONSTER verwerkt kalender, forecast en runstatus. Koppelingen worden om de node heen ingericht.

In MONSTEROm MONSTER heen
Kalender vertalen en forecast verwerkenAQUON-API en forecast-API aanroepen
Verhouding berekenenRuw analoog signaal naar engineering units schalen vóór de 1-op-1-doorvoer
Edge- of PLC-uitvoering selecterenPLC-transport en directe digitale uitgang aanpassen aan de installatie
Runstatus en grenzen bewakenEVOLV-telemetrie naar FROST vertalen
Starttijd en runsetpoint vastleggenBackend voor inzicht en dashboard
Twee uitvoeringsvormen, één plan. In PLC-modus genereert de edge geen concurrerende bemonsteringspulsen. Een storing bewijst geen start of stop. Zonder running-feedback kan de edge een handmatige PLC-start niet herkennen; zonder actief setpoint kan hij die waarde niet betrouwbaar registreren.

Bij de start wordt het werkelijk geaccepteerde m³/puls samen met het startmoment bewaard voor Z-Info. Ontbrekende terugmelding wordt expliciet als onbekend vastgelegd.

Wat betekent puls / m³?

Illustratief rekenvoorbeeld. Pas de waarden aan om beide schrijfwijzen van de verhouding te zien. Dit zijn voorbeeldinstellingen. De toekomstige fallback gebruikt mediaan debiet van de VPS. De aansluiting is voorbereid; fallback blijft uit.

240deelmonsters / pulsopdrachten
100m³ per puls
0,01pulsen per m³

Aantal deelmonsters = monsterinhoud ÷ deelmonstervolume, afgerond naar een heel aantal. m³ per puls = verwacht influentvolume ÷ aantal deelmonsters. Pulsen per m³ = de omgekeerde verhouding.

Voor de uitvoering: de echte instroom kan afwijken van de voorspelling. Kastcapaciteit, minimaal interval en gedrag bij uitval moeten in beide uitvoeringsvormen worden afgesproken. Een pulsopdracht bewijst nog niet dat een deelmonster is genomen.

Procesoutput naar de PLC

Voorstel: getypeerde OPC UA-tags voor Siemens. LREAL ↔ Double voor m³/puls; BOOL ↔ Boolean voor running/storing; UDINT ↔ UInt32 voor versies; LDT ↔ DateTime voor tijden waar ondersteund. Kalender kan als vaste arrays/velden of UDT worden aangeboden. Concrete PLC-tags volgen later.

{
  "kind": "setpoint",
  "m3PerPulse": 210.52631578947367,
  "predictedVolumeM3": 36000,
  "planVersion": 1,
  "samplePointId": "112150"
}

Siemens datatypebasis: S7-1500 Communication manual. Write-consistentie: OPC UA Write service. Het advies voor losse tags met acceptatie is een ontwerpkeuze; ondersteuning van UDT/arrays/methoden hangt af van CPU, firmware, TIA en client.

m³/puls en kalender worden afzonderlijk bijgewerkt. De PLC moet updates tijdens een run zelf weigeren en de actieve waarde vastleggen: dit voorkomt een start tussen status lezen en setpoint schrijven. Losse OPC UA-writes zijn geen gegarandeerd atomaire planoverdracht; commit/acceptatie moet in het PLC-contract worden afgesproken.

FROST werkt in de VPS-proef

Debiet en andere numerieke waarden zijn met expliciete eenheden opgeslagen via CoreSync. Start- en eindregistraties staan als volledige JSON-objecten in een aparte Datastream, inclusief FeatureOfInterest. Controle gebeurt door de opgeslagen observaties terug te lezen.

Gecontroleerd: 1.800 m³/h zonder afvlakking; aanvaard setpoint 105 m³/puls blijft gelijk bij start, nieuwe forecast, herdeploy en stop. Geen schrijffouten bij de eindcontrole.

Bekijk proef-Thing 196 en de Datastreams · Bekijk opgeslagen JSON-runrecords

De backend kan deze records gebruiken voor Z-Info. Externe Z-Info-aanlevering is nog niet aangesloten. Credentials blijven in de serveromgeving.

De verandering per onderdeel

OnderdeelGewenste werkingStatus
PLC-influentdebietBlijft via analoge of digitale invoer of OPC UA binnenkomen. Measurement geeft het debiet 1-op-1 door, zonder afvlakking of filtering. Analoge schaling naar m³/h blijft mogelijk.Vastgelegd
AQUONDe bestaande bron blijft. Rechtstreeks ophalen uit de veldflow verhuist naar een eigen containerdienst op de VPS, later verplaatsbaar naar Azure.Vastgelegd
InfluentvoorspellingDe bestaande centrale modeldienst wordt gebruikt voor de voorspelling van 24 uur vooruit.Vastgelegd
Weer-APIDe afzonderlijke weerkoppeling en lokale voorspelling op basis van regen verdwijnen uit de MONSTER-keten.Vastgelegd
MONSTERTwee uitvoeringsvormen, vereenvoudigde code en vastlegging van starttijd en geaccepteerd runsetpoint.Vastgelegd
PLC-outputPulsen of afzonderlijke OPC UA-waarden voor m³/puls en kalender. JSON is het interne berichtformaat; PLC-tags en mapping volgen later.Transport / schema open
Dashboard-APIDe bestaande dashboard-API verdwijnt; de backend gebruikt FROST.Vastgelegd
Dbase / InfluxDBDe bestaande databasekoppeling wordt vervangen door output naar FROST.Vastgelegd
Oude codeVerwijderen bij de refactor zodra de functie is vervangen; git bewaart de geschiedenis.Vastgelegd

Keuzes voor de volgende uitwerking

Forecast ↔ kalender

Kalender dagelijks doorzetten. Tijdens idle elk uur de laatste 24-uursforecast verwerken. Bij start het geaccepteerde setpoint vastleggen en updates blokkeren tot stop of maximaal 24 uur.

PLC ↔ plan

m³/puls wordt een getypeerde OPC UA-waarde. PLC-tags, kalenderstructuur en acceptatieprotocol volgen later. Running-feedback is vereist om handmatige starts te herkennen.

Kast ↔ bedrijfsvoering

Haal gegevens zoveel mogelijk uit de kast. Nu is alleen storing beschikbaar. Running, actief setpoint en bevestiging van genomen deelmonsters zijn aanvullende koppelingen.

Hosting: AQUON-service en influentmodel blijven als zelfstandige containers achter stabiele API’s. Het diagram wisselt de hostinglocatie; de concrete Azure-diensten en de plaatsing van FROST en de backend zijn nog te bepalen.

Setpoint tijdens een run vastzetten

Idle · elk uur

Nieuwe forecast ontvangen → m³/puls berekenen → beschikbaar stellen aan de PLC. Kalender dagelijks afzonderlijk doorgeven. Fallback blijft uit.

Start · waarde vastleggen

Automatische of handmatige start terugmelden. Het door de PLC geaccepteerde m³/puls en de starttijd vastleggen. De start zet de blokkering direct aan.

Running · geen nieuw setpoint

Nieuwe forecasts mogen binnenkomen, maar veranderen de actieve runwaarde niet. Pas na stop of uiterlijk 24 uur na start mogen nieuwe waarden uit.

Runregistratie bewaart startmoment + geaccepteerd m³/puls voor Z-Info. Een onbekende waarde wordt als onbekend gemarkeerd. Het gemeten debiet blijft zonder afvlakking beschikbaar.

De VPS-proef bewaart de runvergrendeling in de persistente Node-RED-contextstore monsterRuns. Behoud van run-ID, starttijd en setpoint is bij herdeploy getest. Bij timeout staat de reden “timeout”; dit is geen bevestigde fysieke stop.

Basis en afbakening

Veldafspraken en refactor van 30 september 2026. De proef draait in een nieuwe tab op flow.wbd-rd.nl. Alle bestaande zeven tabs en 149 nodes zijn behouden. De MONSTER-editor en browserbediening zijn gecontroleerd op desktop en mobiel.

De modeldienst POST https://forecast.wbd-rd.nl/predict is de beoogde productiebron. In deze proef gebruiken forecast en PLC-feedback expliciete voorbeelddata. De AQUON-container draait op dezelfde VPS met een fixture-CSV; de SFTP-code en env-configuratie zijn beschikbaar voor echte inloggegevens en latere Azure-hosting. Fysieke PLC-aansturing en Z-Info-import volgen later.

35 MONSTER-tests, 136 measurement-tests, 4 AQUON-tests en 16 controles op Node-RED/FROST geslaagd. De gegevens in FROST zijn herkenbare proefgegevens. MONSTER-project · SensorThings-standaard: OM_Observation voor volledige runobjecten.