Intro:
Wie viele andere Häuslebauer auch will ich den Füllstand in meinem Regenwassertank messen. Die Auswertung des Sensors erfolgt mit einer Siemens Logo. Die Umrechnung von der Füllstandshöhe in das Füllvolumen konfrontierte mich mit der etwas schwerfälligen Umsetzung von Rechnungen in der Logo, was ich weiter unten thematisieren möchte.
Sensor:
Ich habe mich für einen "China-Sensor" entschieden, der einen sehr robusten Eindruck macht und bisher einwandfrei seine Arbeit verrichtet.
Der Sensor funktioniert nach dem 4-20mA Standard und ist eigentlich ein Drucksensor. 4mA entspricht also 0bar und 20mA entsprechen bei diesem Sensor 0,5bar. Durch einen Trick misst der Sensor den Relativdruck zur Umgebungsluft. Über ein dünnes Röhrchen im Inneren des Anschlusskabels wird der atmosphärische Druck zum Sensor unter Wasser geführt. So wird nur der durch die Wassersäule aufgebaute hydrostatische Druck von 0,0981bar pro Meter gemessen. Der Sensor kann also Füllhöhen bis ungefähr 5m messen.
Der Sensor wird wie folgt mit einem analogen Logo-Eingang verbunden:
Da mein 5000l Wassertank nur eine maximale Füllhöhe von 120cm hat, werden maximal 120cm/500cm * 16mA + 4mA = 7,84mA fließen. Um die Messgenauigkeit zu erhöhen, habe ich deshalb einen 1kΩ statt eines 500Ω-Widerstands verwendet. Somit steigt die Eingangspannung ungefähr bis auf 7,84mA * 1000Ω = 7,84V an, statt nur bis auf 3,92V.
Füllhöhe in der Logo berechnen lassen:
Die maximale Eingangspannung von 10V wird in der Logo mit einem Wert von 1000 abgebildet. Da der Zusammenhang zwischen Füllhöhe und Eingangswert mit diesem Sensor linear ist, reichen zwei Messpunkte um die entsprechende Kennlinie sowie die Umrechnungsformel zu erhalten. Bei mir liest die Logo den Wert 394 ein wenn der Sensor im Freien liegt (dies entspricht ungefähr den 4mA) und den Wert 752 wenn der Tank bis auf 120cm gefüllt ist.
Mit Hilfe der Freeware Geogebra kann man auch ohne Mathematikkenntnisse die Umrechnungsformel erhalten. Unter Umständen muss aber noch über den Menüpunkt Einstellungen/Runden die Genauigkeit der angezeigten Dezimalzahlen erhöht werden. Hier könnt ihr euch die Geogebradatei herunterladen und an euren Sensor anpassen.
Aus Geogebra können wir also ablesen, dass:
In der Logo lässt sich dies wie folgt umsetzen:
Den analogen Eingangswert AI4 gebe ich zunächst auf einen Mittelwert-Block um die Messwertschwankungen des Sensors zu glätten. Ich lasse die Logo innerhalb von 5 Sekunden 5 Messungen machen und anschließend mitteln. Wenn man den Enable-Eingang invertiert, dann ist der Block daueraktiv.
Den gemittelten Wert gebe ich dann auf den Block "Arithmetische Anweisung". Dieser Block ist etwas gewöhnungsbedürftig. Prinzipiell lassen sich damit drei aufeinanderfolgende Rechenoperationen zwischen 4 Werten durchführen. Über die Priorität kann man die Position der Klammern beeinflussen. Die 4 Werte können entweder fest eingegeben oder von anderen analogen Blöcken übernommen werden. Die genaue Rechnung wird zur Kontrolle in der letzten grünen Zeile unter dem Block angezeigt. Auch an diesem Block kann man den Enable Eingang invertieren.
Nun muss man noch wissen, dass der arithmetische Block intern zwar Ergebnisse mit Kommazahlen darstellen kann, aber die Eingangs-, Ausgangs- und Parameterwerte müssen ganze Zahlen sein. In unserem Fall muss also die Zahl 0,335 zunächst durch die Division von 335 mit 1000 berechnet werden, bevor das Resultat davon mit dem Eingangswert multipliziert werden kann. Zum Schluss wird noch 132 abgezogen und somit haben wir die Formel erfolgreich umgesetzt.
Die Simulation bestätigt (siehe oben), dass der Eingangswert 752 in den Ausgangswert Aq 120(cm) umgerechnet und im analogen Merker AM2 gespeichert wird. Der analoge Merker AM1 ist nur nötig, da es sonst beim Hochladen des Programms in die Logo zu einer Fehlermeldung kommt.
Den analogen Wert AM2 kann man nun z.B. auf dem Display der Logo oder dem Textdisplay LOGO! TDE anzeigen lassen. Zeitgemäßer ist es aber eher den Wert z.B. mit Hilfe von LogoControl über Netzwerk auslesen zu lassen und auf dessen Webseite anzuzeigen.
Füllhöhe in Füllvolumen umrechnen: (für Fortgeschrittene)
Wenn der Tank nicht gerade zur Kategorie quadratisch, praktisch, gut gehört, ist das Umrechnen von Füllhöhe in Füllvolumen mit der Logo eine kleine Herausforderung. Netterweise hat mir der Hersteller meines Tanks die Füllkurve zugesendet, aus der ich anschließend Stützpunkte ermittelt habe.
Mit Hilfe der Trendlinien-Funktion in Excel habe ich aus den Stützpunkten die ungefähre Funktion ermitteln können, die die Abhängigkeit zwischen Füllhöhe h und Füllvolumen V beschreibt. Um ein Bestimmtheitsmaß R2 nahe 1 zu erhalten, war ein Polynom dritten Grades nötig. Anleitungen zum Einfügen und Parametrieren der Trendlinie findet ihr im Internet.
Jeder der programmieren kann weiß, dass in egal welcher Programmiersprache nur eine einzige Zeile benötigen wird, um diese Funktion umzusetzen. So sehr die grafische Programmierung der Logo viele Aufgaben der Automatisierung auch vereinfacht, hier macht das Blockkonzept aus einer Mücke einen Elefanten. Trotzdem möchte ich im Folgenden zeigen wie man dieses Polynom in der Logo umsetzen kann.
Wie bereits oben beschrieben können die Eingangs-, Ausgangs- und Parameterwerte des Bausteins "Arithmetische Anweisung" nur ganze Zahlen zwischen -32768 und 32767 sein. Diesen Wertebereich muss man im Auge behalten, wenn man halbwegs korrekte Werte erhalten will.
Sollten die zu verrechnenden Werte deutlich größer oder kleiner sein als der angegebene Bereich, dann müssen diese Werte zunächst künstlich vergrößert oder verkleinert werden und das Ergebnis entsprechend korrigiert werden.
Wenden wir uns nun aber dem oberen Polynom zu. Ich werde die drei Terme des Polynoms zunächst einzeln berechnen lassen und abschließend summieren. Die Multiplikation mit -0,0051 im ersten Term muss mit Hilfe von ganzen Zahlen ausgedrückt werden. Dies geht ganz einfach indem man -51 durch 10.000 teilen lässt. Alternativ kann man die Multiplikation mit -0,0051 auch durch eine Division mit 1/(-0,0051) = -196 ersetzen. Dies hat den Vorteil, dass für die Berechnung des ersten Terms nur 4 Zahlen benötigt werden und somit nur eine arithmetische Anweisung dafür benötigt wird. Hier die Umsetzung:
Der analoge Eingang AI8 kann nicht direkt mit den Werteeingängen der arithmetischen Anweisung verbunden werden, da der Wertebereich nicht passt. Daher schalte ich einfach einen Analogverstärker mit einer Verstärkung von 1 dazwischen. Das Ergebnis des ersten Polynoms liegt beim maximal zu erwartendem Eingangswert von 120 bei -8816. Das ist innerhalb des Wertebereichs und somit valide.
Verfährt man analog für die beiden anderen Terme erhält man folgende Rechenschaltung, die aus dem Füllstand von 120 cm das korrekte Füllvolumen von 5451 Liter berechnet.
Falls ihr das Füllvolumen in LogoControl anzeigen lassen wollt, ist es deutlich einfacher die Umrechnung direkt dort durchzuführen. Die ganze Polynomschaltung kann dann komplett entfallen.