Automatische Chemikaliendosierung und Regelung

Ziel:

Über die erfassten Messwerte pH-Wert und Redox-Wert soll die Chemikaliendosierung von pH Minus und Chlor automatisch erfolgen. Dabei sollen entsprechende Sollwerte im Pool gehalten werden. Über entsprechende Verriegelungen soll die Dosierung abgesichert werden (Dosierung nur bei laufender Poolpumpe, ein maximaler Tageswert an Chemikalien soll nicht überschritten werden, usw.).

Umsetzung:

Kern der Umsetzung ist die neue Ablaufsteuerung. Diese wird über die Eingänge des Bausteins mit den notwendigen Informationen versorgt und setzt dann entsprechend ihre Ausgänge. Dabei läuft in der Ablaufsteuerung permanent die Dosierlogik ab. Die gesamte Regelung besteht aus folgenden Bausteinen:

Diese gehen wir nun der Reihe nach durch:

1 - Ablaufsteuerung Teil 1

Zunächst fügt ihr eine Ablaufsteuerung der Programmierung hinzu. Zum eigentlichen Programm kommen wir später. Aktuell reicht es den Baustein in die Config zu ziehen und Kategorie und Raum auf “Nicht verwenden” zu setzen. Sonst wird der Baustein visualisiert, was sinnlos ist. Die Steuerung und Visualisierung erfolgt mit einem Statusbaus (siehe 6).

2 - Freigabe zur Dosierung

An den Eingang AI1 der Ablaufsteuerung werden über einen UND-Baustein alle Bedingungen gesetzt, die zur Freigabe der Dosierung relevant sind. Die Ablaufstuerung wartet später im Programm darauf, dass dieser Eingang auf EIN (1) gesetzt wird. Vorher startet die Dosierung nicht. Ich habe folgende Bedingungen bei mir zur Freigabe herangezogen.

  1. Virtueller Eingang “Automatik ein”: Dieser Virtuelle Eingang (Schalter) ist bei mir visualisiert und ich kann damit die automatische Dosierung über die Config ein- und ausschalten.
  2. Die Filterpumpe muss laufen. Damit die Filterpumpe nicht während der Dosierung manuell oder automatisch ausgeht, setzen wir später noch einen Merker, der verhindert, dass die Pumpe aus Versehen während eines Dosierschrittes ausgeschaltet wird.
  3. Der Filter muss in “Filterbetrieb” laufen. Ich habe das AquaStar-Ventil für den Filter. Dieses darf z. B. nicht auf Rückspülen stehen.
  4. Der pH-Wert und der Redox-Wert ^müssen aktuell sein, siehe Prüfen ob Messwerte aktuell sind
  5. Die Dosierpumpe pH minus ODER die Dosierpumpe Chlor dürfen nicht laufen (Negierung am UND-Baustein beachten!). Das verhindert, dass die Ablaufsteuerung ggf. schon wieder gestartet wird, während die Pumpen noch mit der letzten Dosierung beschäftigt sind.

Diese Bedingungen werden über den UND-Baustein an den Eingang AI1 gelegt. Zusätzlich setze ich noch einen entsprechenden Merker zur Weiterverwendung in anderen Logiken.

3 - Vorgaben

An AI2 - AI8 kommen die Vorgaben für die Steuerung:

AI2: Dieses ist der aktuelle pH-Wert von der Atlas Scientific Messung

AI3: Dieses ist der aktuelle Redox-Wert von der Atlas Scientific Messung

AI4: Hier wird über ein Baustein “2 Auswahltasten” der pH Sollwert vorgegeben. Der Baustein wird nicht visualisiert. Wir verlinken ihn später über einen Status-Baustein zur Bedienung. Die Remanenz muss unbedingt eingeschaltet werden, sonst ist der Sollwert nach einen MS-Neustart verloren.

AI5: Hier wird analog zu AI4 ebenfalls ein “2 Auswahltasten”-Baustein für die Sollwert-Vorgabe des Redoxwertes angeschlossen. Gleiche Eigenschaften wie der Baustein an AI4.

AI6: AI6 wird auf EIN gesetzt, wenn eine der Dosierpumpen läuft - siehe unter “Freigabe zur Dosierung”.

AI7: An AI7 wird der Tagesverbrauch an pH Minus als Analogwert gehängt, siehe Chemikalienverbrauch erfassen. Tagesverbrauch greift man am AQ1-Ausgang des Verbrauchszählers ab.

AI8: An AI8 wird analog zu AI7 der Tagesverbrauch an Chlor gehängt.

4 - Start der Ablaufsteuerung

Die Ablaufsteuerung der Dosierung läuft normalerweise “unendlich” in einem Loop. Wird dieser Loop unterbrochen, z. B. bei einem Miniserver-Neustart, wird die Ablaufsteuerung über einen Monoflop neu gestartet, wenn die Filterpumpe eingeschaltet wird. Dieser EIN-Impuls kommt an “S1”.

5 - Ausgänge

Die Ausgänge des Bausteins werden wie folgt beschaltet:

AQ1: Dosierbefehl für die Dosierpumpe pH Minus. Bei Atlas Scientific lautet der entsprechende Virtuelle Ausgangsbefehl für die Dosierpumpe publish poolmanager/set/command 103:d,<v>. Damit wird an die Dosierpumpe mit der Adresse 103 (anpassen!) der Dosierbefehl “d” zur Dosierung von <v> ml gesendet. <v> wird dabei von der Ablaufsteuerung über den Ausgang gesetzt.

AQ2: Analog zu AQ1, aber für die Chlor-Dosierpumpe.

AQ3: An AQ3 wird ein Merker angeschlossen. Dieser wird auf EIN gesetzt, wenn die Dosierung läuft (also eine der Dosierpumpen läuft oder gerade dosiert hat). Mit diesem Merker verhindern wir, dass die Filterpumpe ausgeschaltet werden kann. Diese Bedingung muss in die Logik der Filterpumpe eingebaut werden!

6 - Visualisierung

An den Ausgang TQ wird ein Status-Baustein gehängt. Dieser Baustein wird visualisiert und gleichzeitig für die Bedienung der Dosierautomatik verwendet. Die Logik des Status-Bausteins wird wie folgt konfiguriert;

Zusätzlich werden die 2 Auswahltasten”-Bausteine sowie noch die aktuellen IST-Werte pH und Redox über die Eigenschaften des Bausteins an den Baustein verlinkt:

Damit sieht die Visualisierung später in der App wie folgt aus:

1 - Ablaufsteuerung Teil 2

Das Programm der Ablaufsteuerung wird nun wie folgt programmiert:

// Dosierschritt pH- und Chlor (in ml)
set value1 = 50
 
// Hysterese pH Wert
set value4 = 0,1
 
// Hyterese Redox-Wert
set value5 = 10
 
// Wartezeit nach Dosierschritten
set value3 = 180
 
// Maximale tägliche Dosiermenge pH- und Chlor (ml)
set value2 = 2000
 
// Programmablauf
 
// Auf Freigabe warten
if AI1 = 0
    set AQ3 = 0
    set TQ = " Warte auf Freigabe... "
    waitcondition AI1 > 0
endif
 
// Dosierung auf aktiv setzen
set AQ3 = 1
 
// Dosierung pH Minus
if AI7 > value2
    set TQ = " Maximalmenge pH- erreicht... "
    goto 41
endif
if AI2 - value4 - AI4 > 0 // Differenz Soll  / IST: Dosierung?
    set TQ = " Dosiere pH-... "
    set AQ1 = value1
    sleep 15 s // Gateway Zeit geben Pumpen-Status zu aktualisieren
    waitcondition AI6 < 1
    set TQ = " Wartezeit pH-... "
    sleep value3 s
endif
 
// Dosierung Chlor
if AI8 > value2
    set TQ = " Maximalmenge Chlor erreicht... "
    goto 55
endif
if AI5 - value5 - AI3 > 0 // Differenz Soll  / IST: Dosierung?
    set TQ = " Dosiere Chlor... "
    set AQ2 = value1
    set TQ = " Wartezeit Chlor... "
    sleep 15 s // Gateway Zeit geben Pumpen-Status zu aktualisieren
    waitcondition AI6 < 1
    sleep value3 s
endif
 
// Von vorne...
set TQ = " Pausiere... "
set AQ1 = 0
set AQ2 = 0
set AQ3 = 0
sleep value3 s
 
goto 1
end

Das Programm sollte über die Kommentare mehr oder weniger selbst erklärend sein. Zu Beginn werden einige Sollwerte gesetzt. Hier müsst ihr ggf. für Euch und Eure Bedingungen die Werte entsprechend anpassen. Ich dosiere mit jedem Dosierschritt 50 ml (das erhöht bei mir pH um ca. 0,1 und Redox um ca 25 mV). Das hat bei mir eine recht ruhige Regelung bei ausreichender Geschwindigkeit gegeben. Ich habe einen 25 m³ großen Pool. Die Mengen sind definitiv abhängig von eurem Pool und eurer Wasserbelastung. Zudem erlaube ich eine kleine Hysterese bei pH und Redox, innerhalb der die Dosierung noch nicht aktiv wird. Auch hier könnt ihr spielen. Nach jedem Dosierschritt warte ich 180s, bevor ich die Automatik fortsetze. Nach diesem Wert haben sich die dosierten Chemikalien ausreichend im Pool verteilt und das “frische” Wasser ist auch wieder bei den Messsonden angekommen. Setzt ihr den Wert zu kurz, wird die Automatik überdosieren, weil sie den Effekt der letzten Dosierung noch nicht mitbekommen hat. Die maximale Dosiermenge pro Tag habe ich auf 2000 ml gesetzt. Ist diese erreicht, wird nicht weiter dosiert, auch wenn es die Werte ggf. erfordern. Damit verhindere ich eine Überdosierung, falls die Regelung nicht mehr funktioniert (Problem an den Sonden z. B.).

Der Ablauf der Dosierung ist nun wie folgt:

  1. Warten auf die Freigabebedingungen
  2. Prüfen, ob die maximale Dosiermenge pH Minus heute schon erreicht ist. Wenn ja: Überspringe pH Minus Dosierung.
  3. Wenn die Differenz von IST-Wert abzüglich Hystere zu SOLL-Wert größer Null ist, starte einen Dosierschritt pH Minus
  4. Warte, bis die Dosierung beendet ist (Dosierpumpe aus)
  5. Warte die eingestellte Wartezeit (zur “Verteilung der Chemikalien im Pool)
  6. Nun folgt der identische Ablauf für Chlor
  7. Nach Beendigung der Schleife wird noch einmal 3 Minuten gewartet, dann die Automatik erneut gestartet