Kommunalt vann og avløp

Den leste anleggets reguleringsregler ut av målingene, på to centimeter nær

Ett lite SCADA-system, en RTU som når fjerntliggende stasjoner over radio, og en integrator som satte opp navngivingen og siden har gått av med pensjon.

INNTAKråvannBEHANDLINGdosering, filtreHØYDEBASSENGnivå, turbiditetNETTPUMPERtrykksonerFJERNSTASJONERRTU over radioett lite SCADA-system · en RTU-punktliste · én integrator, pensjonert

Det dårligst dokumenterte anlegget på denne siden, og det regelverket nå stiller de vanskeligste spørsmålene til.

Hva som faktisk går galt

Et kommunalt vannverk har det minste ingeniørmiljøet og de eldste navnekonvensjonene av alt på denne siden. Personen som satte opp tagnavnene, var en integrator på et prosjekt for femten år siden. Vedkommende kommer ikke tilbake, og det de visste, ble aldri skrevet ned noe sted som har overlevd.

To ting gjorde dette presserende og ikke bare rotete. NIS2 legger rapporteringsplikter på virksomheter som ikke har noen til å skrive rapporten, og angrepet på demningen i Bremanger i 2025 flyttet OT-robusthet fra en lysbildepresentasjon til et styrespørsmål. Begge stiller det samme første spørsmålet: hva har dere egentlig, og virker det fortsatt?

Det spørsmålet kan besvares ut fra tagger, verdier og det papirarbeidet som har overlevd, og det er nettopp det kompilatoren spiser. Denne siden sa før at vi ikke hadde kjørt på vann og ikke kom til å late som noe annet. Nå har vi kjørt på vann.

Nettet er C-Town, publisert sammen med BATADAL-konkurransen under CC BY 4.0: et referansedatasett for et distribusjonsnett basert på en virkelig mellomstor by, med et år med SCADA-målinger per time simulert fra den hydrauliske modellen, og modellen publisert ved siden av. Det er ikke data fra et vannverk i drift, og vi har ennå ikke kjørt på et. 43 tagger, 7 tanker, 11 pumper. Modellfilen er papirarbeidet, og kompilatoren åpner den aldri. Den brukes til å rette svarene, slik HAI-manualen gjør på riggsiden.

Det vanlige resultatet først. Uten noen vann-connector plasserer kompilatoren ingenting og avviser alle 43 taggene, som er det samme svaret den gir for enhver sektor den aldri har sett, og som er den ærlige formen på dette produktet. Med en connector, som er en tekstfil på 78 linjer og ikke en ny versjon, plasserer den 39 av 43 og får hver maskin riktig. Navnematching får også hver maskin riktig, fordi dette nettet skriver elementnavnene sine inn i taggene, og på størrelsen slår den oss 100 mot 93. Det kriteriet ble ikke oppfylt, og det rapporteres som ikke oppfylt.

Grunnen til at det ikke ble oppfylt, er den mer interessante halvdelen. De tre taggene vi mistet, er F_PU3, F_PU5 og F_PU9, og alle tre står flatt på null i hver eneste av de 4 177 timene. Det er reservepumper som aldri starter. Kompilatoren leser verdier i tillegg til navn, og en serie som ikke er annet enn null, ser nøyaktig ut som et av-signal, så den kalte dem statuser. Navnematching har rett om dem bare fordi den aldri ser etter: den leser F-en og sier strømning, og på en død kanal treffer den gjetningen tilfeldigvis.

Så kommer delen ingen konkurrent har. Hvilken pumpe som fyller hvilken tank, står ikke i noe tagnavn. F_PU2 og L_T1 har ikke ett tegn til felles som betyr noe, så ingen regulære uttrykk, ingen ordbok og ingen språkmodell som leser navn kan koble dem sammen. Svaret ligger i tallene: en tank som stiger mens en pumpe går, i et helt år. Med modellfilen lukket fikk kompilatoren seks av seks på det spørsmålet, og styringslogikken skrevet av dem som bygde nettet er enig i hver eneste en.

Én tank skulle den ha avvist, og det gjorde den ikke. T6 har ingen overvåket pumpe, og kompilatoren pekte på PU10 med en korrelasjon på 0,53. Det er ikke støy: PU10 leverer fem rør fra T6 og ti fra T7, tanken styringen faktisk nevner, så T6 ligger på hovedledningen PU10 pumper inn i. Svaret beskriver hydraulikken riktig og motsier styringsregelen, og kriteriet sa avvis. Det er ført opp som en feil, fordi det er det det er.

Den feilen er nå rettet, og rettelsen ga noe bedre enn det den rettet. Korrelasjon svarte på feil spørsmål: den finner området, og en tank som en pumpe fyller ser utenfra helt lik ut som en tank som bare ligger nedstrøms for en. Men en styrt tank gjør noe en nedstrøms tank ikke kan. Den kommanderer pumpen, og kommandoen er en terskel, så ved hver eneste innkobling står nivået i den styrende tanken på nesten samme verdi, mens nivået i alle andre tanker står der det tilfeldigvis står. Kjennetegnet er ikke korrelasjon, det er hvor tett verdiene ligger.

Tettheten gir tilbake tallet i tillegg til paret. Ikke bare at PU2 henger sammen med T1, men at PU2 starter når T1 faller forbi 1,0 meter og stopper ved 4,5. På en fil den aldri hadde sett, ble 5 av 5 pumper som går av og på ofte nok til å testes, koblet til tanken som styrer dem, T6 ble avvist, og de 10 gjenfunne tersklene lå i median 2 centimeter fra tallene i nettets egen modell. 3 av de 10 traff det oppgitte tallet på centimeteren.

Det tok tre forhåndsregistrerte kjøringer å komme dit, og én av dem feilet. Den første estimatoren var skjev, alltid mot midten av tanken, fordi i det øyeblikket en pumpe starter slutter tanken å falle og begynner å stige, så målingen etter innkoblingen ligger over der tanken var på vei. Rettelsen av den skjevheten ga mer støy, og det samme tallet ble brukt både til å velge tank og til å oppgi terskelen, så den nøyaktige versjonen begynte å avvise pumper den skjeve hadde koblet riktig. Å velge krever et stabilt tall og å rapportere krever et forventningsrett tall, og det er ikke det samme tallet. Hver kjøring er skrevet ned, også den som gikk bakover.

Kjøringen, på et nett ingen her har tegnet

C-Town, publisert med BATADAL-konkurransen under CC BY 4.0. Et år med simulerte SCADA-data per time til venstre for streken der svarene vurderes, nettets egen hydrauliske modell til høyre for den. Kompilatoren åpner aldri modellen; det er den som retter svarene.

r 0.63r 0.82r 0.90r 0.56r 0.85r 0.53r 0.64PU1PU2PU3PU4PU5PU6PU7PU8PU9PU10PU11V1V45V47V2T3T1T7T6T5T2T4

C-Town slik den egne modellen tegner det: 429 hovedledninger, 7 tanker, 15 pumper og ventiler, på koordinatene referansedatasettet oppgir. De buede linjene er kompilatorens svar på hvilken strøm som fyller hvilken tank, med korrelasjonen som ga hvert svar. Seks er riktige. Den gule er T6, som skulle vært avvist.

Plassering av taggene

oppsettplassertstørrelsemaskin
ingenting: ingen connector, ingen modell0 av 4328%0%
ingen connector, men elementlisten11 av 4328%67%
vann-connectoren, bare tagger42 av 43100%100%
vann-connectoren og listen42 av 43100%100%
navnematching, referansen—100%100%

Vurdert mot elementet nettets modell nevner, aldri mot tagteksten. Uten vann-connector plasserer kompilatoren ingenting, og det er den ærlige formen på en kjerne som ikke kjenner bransjen. Connectoren er 78 linjer tekst, og ingen kode i kompilatoren ble endret.

Hvilken pumpe fyller hvilken tank

tankkompilatoren sastyringen sier korrelasjonvurdering
T1PU2PU1 eller PU20.63enig
T2V2V20.82enig
T3PU4PU4 eller PU50.90enig
T4PU7PU6 eller PU70.56enig
T5PU8PU80.85enig
T6PU10ingenting overvåket0.53bom
T7PU10PU10 eller PU110.64enig

Bare fra verdiene, med modellfilen lukket. 6 av 6 tanker riktig på data holdt utenfor. Navnematching får null her og kan ikke få noe annet, fordi forholdet mellom en pumpe og tanken den fyller ikke står i noen av navnene. T6 har ingen overvåket pumpe og skulle vært avvist; det ble den ikke, og det kriteriet er ført opp som ikke oppfylt.

Hvor langt vi har kommet

merkelappen på denne historien

målt

C-Town, publisert med BATADAL-konkurransen under CC BY 4.0. Uten vann-connector plasserer den 0 av 43 tagger; connectoren er en fil på 78 linjer, og ingen kode i kompilatoren ble endret. Fire forhåndsregistrerte kjøringer, hver på data den forrige ikke hadde sett, og de to som feilet står på denne siden.

les videre

Tallene, også de som bommet

Fire forhåndsregistrerte kjøringer, P17 og P22 til P24, hver på data den forrige ikke hadde sett. Rapportene ligger i auge_plant/, også de to kriteriene som ikke ble nådd og kjøringen som gikk bakover. Alt kan gjenskapes med tre curl-kommandoer og to moduler.