Ü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.).
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:
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).
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.
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.
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.
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”.
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!
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:
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: