Wozu soll das gut sein?
Zwei Beispiele:
- Der PC-Arbeitsplatz soll zwar tagsüber möglichst viel Licht haben, aber die Sonne soll nie auf den Monitor scheinen können. Es soll also geregelt werden, dass die Schattengrenze ohne eigenes Zutun immer in Höhe des Arbeitstisches unterhalb des Monitors liegt.
- Eine Bank mit Orchideen im Wohnzimmer. Auch dort soll möglichst viel Licht vorhanden sein, aber die Pflanzen dürfen nie direkte Sonne abbekommen. Die Schattengrenze soll etwa in Höhe der Töpfe liegen.
Es gibt verschiedene Gründe, mit dem Positionieren von Rollladenaktoren unzufrieden zu sein. Manch einem stört es aus Prinzip, dass der Rollladen bei einer 50%-Anweisung deutlich weiter zu macht als er soll. Bei mir ist es konkret der Einsatz in einer o.g. Art der Beschattung, die nur möglich ist, wenn sich die Behänge physikalisch hinreichend präzise positionieren lassen.
Ich stelle hier das Projekt in 3 Abschnitten vor:
- Wie erhöhe ich die Positionsgenauigkeit des Behangs, Grundvoraussetzung für das eigentliche Vorhaben. Sicher gibt es dafür auch weitere Einsatzfälle
-> UP für die Transformation der Sollwerte - Wie kann ich trotz „gefakter“ Stellwerte die Rollladenposition als Normalwerte weiterverarbeiten und anzeigen (z.B. in einer App)? Das wird nicht jeder brauchen und kann optional genutzt werden.
-> UP für die Rückgewinnung der Sollwerte zu Anzeigezwecken - Die eigentliche Beschattungsregelung. Wie errechne ich die nötige Behanghöhe, um die Schattengrenze an einer gedachten Linie im Raum konstant zu halten? Das ist sozusagen ein konkreter Einsatzfall für die verbesserte Positionierung nach 1.
-> UP zur Berechnung der notwendigen Behanghöhe
1. Verbesserung der Positionsgenauigkeit von Rollladenantrieben
Jeder der einen Rollladenaktor betreibt, weiß, dass die physikalische Position des Behangs in vielen Situationen deutlich vom zugewiesenen Sollwert abweicht. Die Prinzip bedingten Ursachen sind bekannt:
- Die Walze dreht sich mit konstanter Geschwindigkeit, die Positionierung erfolgt zeitgesteuert. Je weiter aufgewickelt ist, umso größer wird der Wickeldurchmesser und damit die Fahrgeschwindigkeit des Behangs. D.h. bei voll ausgefahrenem Behang bewegt sich dieser relativ langsam, mit zunehmender Höhe aber immer schneller. Die Bewegung ist nichtlinear.
- Die Lamellen (insbesondere bei Kunststoff) haben untereinander ein nicht unerhebliches Längsspiel. Das führt dazu, dass bei einer internen Position von 12 ... 20 % der frei hängende Behang bereits auf dem Fensterbrett aufstößt und der Rest der Bewegung nur noch zum Zusammenschieben der Lamellen führt. Auch dieses Verhalten soll in die Korrektur eingehen.
Um die mathematische Funktion der Behangbewegung zu formulieren, benötigen wir 3 Punkte der Kurve.
Die beiden Endpunkte stehen fest, bei 0% Sollwert ist auch die physikalische Position 0. Das analoge trifft auf 100% zu. Für den dritten Punkt suchen wir uns die Mitte des Fahrwegs aus.
Das Ganze funktioniert umso genauer, je präziser die Fahrzeiten des Antriebs ermittelt und in die Gerätekonfiguration eingetragen sind (ich benutze hier die automatische Kalibrierfahrt bei meinen „dummen“ Antrieben).
Für den dritten Punkt müssen wir die vollständige gestreckte Länge des Rollladens zwischen den beiden Endpunkten des Antriebs kennen. Die zu messen wird meist nicht möglich sein, also müssen wir eine Näherung benutzen.
Wir fahren den Rollladen nach unten, bis kurz vor dem Aufstoßen. Das kann mit der Aktorwippe/-Taste oder auch im Gerätestatus im WebUI geschehen.
Achtung! Nicht mehrfach hin- und herfahren, das verringert die Genauigkeit. Am besten, vor jedem Versuch erneut die Endlagen anfahren zum Rekalibrieren.
Nachdem wir die gewünschte Lage erreicht haben, lesen wir die Istposition im WebUI aus dem Statuskanal (reale Position in %). Diesen Wert werden wir auch noch für den zweiten Korrekturvorgang brauchen, also notieren.
Nun berechnen wir aus dem Wert die wahrscheinliche Gesamtlänge des Fahrwegs, indem wir den Abstand zwischen der jetzigen Behangunterkante zur Position bei voll eingefahrenem Behang messen (also quasi knapp die Fensteröffnung) und prozentual verlängern.
Beispiel: An meiner Balkontür messe ich einen Abstand zwischen den beiden Punkten von 196 cm und eine Ist- Position unten von 16% (Gerätestatus). Dann liegt die Länge also bei etwa:
L = 196 cm * (1 + 0,16) = 228 cm.
Die Mitte (50%) liegt daher bei s_50% = 228 cm/2 = 114 cm.
Diesen Wert markieren wir jetzt ebenfalls am Rahmen, von der Unterkante des voll eingezogenen Behangs aus gemessen. Danach fahren wir den Rollladen an genau diese markierte Stelle. Bezüglich der Genauigkeit gilt wieder das oben gesagte. Mit dem Auslesen der dazugehörigen Istposition aus dem Gerätestatus haben wir nun die Koordinaten des dritten Punktes auf der Kurve. In meinem Beispiel beträgt der Wert 57 %.
1.2. Das Unterprogramm
Anmerkung: Ich arbeite in meiner Anwendung mit Prozentpunkten, also Werten von 0 … 100. Ich speichere das Ergebnis auch so in eine SV und muss den Wert bei Ausgabe an den Aktor noch durch 100 dividieren.
Wer statt auf eine SV direkt auf den Aktor ausgeben will, sollte dann generell mit den reellen Zahlen arbeiten, also im Wertebereich 0 … 1.
1.2.1. Funktionsprinzip der Unterprogramme
Die wichtigen Algorithmen sind als Unterprogramme angelegt, so dass nur ein einziges Programm vorhanden ist, das für alle vorhandenen Rollläden verwendet werden kann.
Zu jedem UP ist eine Systemvariable vom Typ Zeichenkette definiert. In diese wird der Aufruf samt Parametern als String eingeschrieben. Sobald sich der Inhalt der SV ändert, wird das UP getriggert und ausgeführt. Dabei werden die Übergabeparameter wieder aus dem String extrahiert.
Damit keine Aufrufe verloren gehen, muß jeder neue Datensatz/Aufruf an den Inhalt der SV angehängt werden und darf nicht direkt zugewiesen werden!
Das UP ist so aufgebaut, dass es, falls sich inzwischen mehrere Datensätze/Aufrufe in der SV vorfinden, diese nacheinander in einer Loop abarbeitet.
Die Parameter sind durch ‘,‘ getrennt, der Datensatz wird abgeschlossen mit ‘|‘ .
Bsp.: "56.8,SV_WZ_Rolllade_Tür_Höhe_Soll,18,55|"
1.2.2. Bestimmung der quadratischen Funktion
Wir haben jetzt 3 Kurvenpunkte (im Folgenden soll der zur physikalischen Mitte gehörenden Istpositionswert
h_m genannt werden) . Der Parameter h_m ist einer der Parameter, die beim Aufruf des UPs mit übergeben werden müssen.
P1(0|0), P2(100|100), P3(50|57)
P1 und P2 gibt es so in jedem Anwendungsfall, nur P3 wird von Tür zu Fenster und unterschiedlichen Behangdicken individuell ausfallen.
Die Jüngeren unter uns greifen jetzt einfach zum Taschenrechner und tippen die Punkte ein – fertig ist die Lösung.
Alle anderen erstellen daraus folgendes Gleichungssystem der allg. Form f(x) :
Aus der ersten Gleichung ist zu sehen, dass c = 0 sein muß. Damit haben wir die erste Unbekannte und die erste Gleichung kann entfallen.
Die verbleibenden Gleichungen dividieren wir durch je einen gemeinsamen Faktor so, dass b den Faktor 1 erhält, also Gleichung 2 durch 100 und Gleichung 3 durch 50:
Nun ziehen wir die Gleichungen voneinander ab, um b zu eliminieren:
Diesen Wert in die obere Gleichung eingesetzt ( b = 1 – 100a ) ergibt die Lösung für b.
Damit haben wir die benötigte Gleichung
Damit kann jetzt im UP der Wert errechnet werden, der an den Aktor ausgegeben werden muß, damit der Behang auf der korrekten Position steht.
Für das obige Beispiel des Rollladens einer Tür ergebe sich also:
Für meine Fenster ergibt sich auf diesem Weg der Punkt P3(50|55) und damit die Formel
1.2.3. Berücksichtigung des Lamellenspiels
Wir wissen aus den ersten Messungen, dass für die Bewegung zwischen offen und Aufstoßen auf dem Fensterbrett ein Stellwertebereich von beispielsweise nur 100 … 16% erforderlich ist. Um das zu kaschieren, muß der Bereich der Vorgabe linear gestaucht werden. Ich habe dazu folgende Variante umgesetzt:
Da ich im Normalfall nur bis zum Aufstoßen ( h_r = 16% ) fahren möchte, aber auch die Möglichkeit des kompletten Verschließens nicht vermissen will, habe ich folgende Festlegung getroffen:
Reale Positionswerte kleiner als h_r (hier <16 %) sind kaum sinnvoll, denn was nützt mir ein teilweise voll verschlossener Rollladen? Ich lege also fest, dass alle Vorgabewerte von 100% … 2% in den Fahrweg von 100% .... h_r(16%) transformiert werden sollen, alle Werte < 2% aber sollen immer zum vollständigen Verschluss führen (0%). Der Stellwertebereich h_r … 1% wird also gar nicht benutzt.
Der oben errechnete Stellwert muß also noch einmal gestaucht werden.
Der dazu nötige Faktor errechnet sich aus
Der Stellwert berechnet sich dann mit Hilfe von Faktor F:
Stellwert = (Vorgabewert – 100) * F + 100
Im Beispiel mit 16% als kleinstem Stellwert und 2% als kleinstem Vorgabewert:
So ergibt sich ein Stellwert = (Vorgabewert – 100) * 0,857 + 100