Bedingungen
Im Folgenden werden die Formen der Bedingungen in wenn-Anweisungen beschrieben, nicht die Wenn-Anweisung selber.
Details zu dieser Anweisung finden Sie im Kapitel wenn-Anweisungen.
In wenn-Anweisungen wird aufgrund von Bedingungen entschieden welche weiteren Anweisungen ausgeführt werden. Eine Bedingung ist entweder WAHR oder FALSCH. Bedingungen können mit UND bzw. ODER verknüpft werden.
Bedingungen sind folgendermaßen aufgebaut:
wenn Operand1 Vergleichsoperator Operand2
Beispiel:
wenn Temperatur kleiner 21,5
Wenn die Operanden unterschiedlichen Typs sind, findet soweit möglich eine automatische Konvertierung statt. Dazu ist es erforderlich, dass das in der Bedingung abgefragte Objekt bzw. die Variable ímmer Operand1 in der Vergleichsabfrage ist, wie es der üblichen Logik einer Abfrage entspricht. Nur dann ist eine korrekte Konvertierung möglich. Wenn also für ein Objekt mit Zuständen eine Abfrage des Zustands in Textform (als Konstante oder Variable) erfolgen soll, muss der Text immer als zweiter Operand stehen. So kann der Operand2 dann entsprechend des Typs des ersten Operanden in einen Zustand dieses Typs konvertiert werden. Dabei ist wichtig, dass der Text einem tatsächlich vorhandenen Zustand des Typs entspricht (auch Gross/Kleinschreibung), sonst ist eine Konvertierung nicht möglich und das Ergebnis des Vergleichs ist unbestimmt und somit falsch.
Wenn einer der Operanden eine Konstante ist muss diese immer Operand2 sein damit eine Konvertierung auf den Typ des abzufragenden Objekts/Variablen durchgeführt werden kann.
Beispiel einer Uhrzeitabfrage:
Richtig: wenn Uhrzeit = "15:15:00" dann
Falsch: wenn "15:15:00" = Uhrzeit dann
Standard-Vergleichsoperatoren
= oder gleich
<> oder ungleich
< oder kleiner
> oder groesser
<= (kleiner oder gleich)
>= (grösser oder gleich)
Vergleichsbedingungen
Bei Vergleichen von Zuständen können die Zustandstexte in Hochkomma oder der Index eines Zustands verwendet werden, wobei der erste Zustand den Index 0 hat. Die Abfrage ob eine Lampe ausgeschaltet ist kann also mit der Anweisung
wenn Lampe = "aus" dann
oder auch
wenn Lampe = 0 dann durchgeführt werden. Bitte unbedingt beachten:
Wenn bei Bedingungen Text für die Abfrage des Zustands verwendet wird muss dieser (auch in der Schreibweise) einem gültigen Zustand des Objekttyps entsprechen, sonst kann der intern verwendete Zustandsindex nicht ermittelt und die Bedingung kann nicht korrekt ausgewertet werden. Wenn Text verwendet wird, der keinem gültigen Zustand des Objekttyps entspricht ist das Ergebnis der Abfrage unbestimmt.
Schlüsselwörter in Vergleichsbedingungen
Bei Vergleichen können für bestimmte Objekttypen auch Schlüsselwörter benutzt werden.
wenn Lampe eingeschaltet
hat die gleiche Wirkung wie
wenn Lampe = "an"
bzw.
wenn Lampe = 1
wenn Lampe ausgeschaltet
hat die gleiche Wirkung wie
wenn Lampe = "aus" bzw. wenn Lampe = 0
weitere besondere Schlüsselwörter für Bedingungen sind
GEÖFFNET und GESCHLOSSEN für Tür/Fensterkontakte (nicht für Rollladen, Jalousien, KeyMatic, Winmatic !),
also z.B.:
wenn Fenster geoeffnet dann
Um bei einer Fernbedienungstaste festzustellen ob diese kurz oder lang gedrückt wurde kann z.B. folgende Abfrage verwendet werden:
WENN FBWohnenTaste2 = "lang" dann
Stehlampe einschalten
SONST
Stehlampe ausschalten
ENDEWENN
Zeit-Vergleiche
Bei Zeitvergleichen ist zu beachten, dass die Uhrzeit im 5-Sekunden-Takt aktualisiert wird, die Sekunden der Uhrzeit bei der Prüfung auf Zeitgleichheit also immer durch 5 teilbar sein müssen.
Wenn Uhrzeitvergleiche verwendet werden, muss sichergestellt sein, dass das Makro zu dem Zeitpunkt zu dem die Bedingung zutrifft könnte auch ausgeführt wird. Wenn also die Vergleichszeit volle Minuten hat, muss das Zeitintervall für das Makro mindestens auf 1 x in der Minute gesetzt sein, wenn es eine durch 5 Sekunden teilbare Uhrzeit ist muss das Ausführungsintervall auf 5 Sekunden gesetzt werden.
wenn Uhrzeit = "HH:MM:SS" .....
bei dieser Bedingung ist zu beachten, dass die Uhrzeit in Hochkommas gesetzt wird. Weiterhin müssen die Sekunden durch 5 teilbar sein, da die Bedingung sonst nie zutrifft.
wenn Datum = "TT.MM.JJJJ"
bei dieser Bedingung ist zu beachten, dass das Datum in Hochkommas gesetzt wird und das Jahr vollständig, also 4-stellig mit Jahrtausend angegeben werden muss.
wenn Wochentag = "Wochentag"
Prüfung auf einen Wochentag. Der Wochentag wird in Hochkommas gesetzt und muss mit einem Großbuchstaben und nachfolgenden Kleinbuchstaben geschrieben werden.
Beispiel : wenn Wochentag = "Freitag" dann
wenn Monat Vergleichsoperator Zahl
Beispiel :
wenn Monat groesser 4 und Monat kleiner 10 dann
bewirkt, dass die folgenden Anweisungen nur zwischen Mai und September ausgeführt werden.
Vergleichsoperator =* für Vergleiche mit Jokerzeichen
Beim Vergleich von Uhrzeit und Datum mit einer Konstanten können auch Jokerzeichen verwendet werden. Als Vergleichsoperator muss dann =* verwendet werden. Operand2 muss eine Konstante in Hochkommas sein.
Beispiele:
Um Anweisungen jede volle und halbe Stunde auszuführen:
wenn Uhrzeit =* "**:00:00" oder Uhrzeit =* "**:30:00" dann
......
Um Anweisungen immer am Ersten eines Monats auszuführen:
wenn Datum =* "01.**.****" dann
Bedingung für Bereiche
Mit diesem besonderen Bedingungstyp ist es möglich z.B. Aktionen nur innerhalb bestimmter Bereiche und Zeiträume auszuführen.
wenn Prüfwert zwischen Startwert und Endwert dann
......
Beispiele für Zeiträume:
wenn Uhrzeit/Datum zwischen "Zeitkonstante" und "Zeitkonstante" dann
wenn Uhrzeit zwischen "23:00:00" und "05:00:00" dann
wenn Monat zwischen 5 und 9 dann
ist wahr von Mai bis September
wenn Monat zwischen 10 und 4 dann
ist wahr von Oktober bis April
wenn Monat zwischen 6 und 6 dann
ist nur im Juni wahr
Dieser Bedingungstyp kann nicht nur für Zeiträume, sondern grundsätzlich für alle Werte benutzt werden.
wenn Temperatur zwischen 18,0 und 21,0 dann
ist von 18,0 bis 21,0 Grad wahr
Bitte beachten - grundsätzlich gilt:
wenn der Startwert kleiner ist als der Endwert ist die Bedingung wahr wenn der Prüfwert im zu prüfenden Bereich liegt, also auch wenn er gleich mit dem Start- oder Endwert ist.
wenn der Startwert grösser ist als der Endwert ist die Bedingung wahr wenn der Prüfwert nicht zwischen Startwert und Endwert liegt.
Diese Verfahrensweise bietet die grösste Flexibilität und ergibt auch bei Bedingungen für Zeiträume mit Tageswechsel wie z.B. "wenn Uhrzeit zwischen "23:00:00" und "05:00:00" dann" das richtige Ergebnis, aber es muss genau darauf geachtet werden in welcher Reihenfolge Start- und Endwert angegeben werden.
Vergleichsoperator =+ für Vergleiche mit Wochenmaske
Mit diesem Vergleichsoperator ist es möglich Anweisungen nur an bestimmten Wochentagen ausführen zu lassen. Als Operand2 muß eine 7-stellige Konstante oder Variable vom Ty Zeichen bestehend aus Nullen und Einsen in Hochkommas verwendet werden. Jede Stelle steht für einen Wochentag, beginnend mit Sonntag. Die Bedingung ist wahr wenn an der Stelle des aktuellen Wochentags eine Eins steht.
Beispiel : Es soll geprüft werden, ob der aktuelle Tag ein Freitag, Samstag oder Sonntag ist.
wenn Wochentag =+ "1000011" dann
|