Verständnisproblem DOIF (do always)

Begonnen von Leinad, 24 März 2015, 19:03:14

Vorheriges Thema - Nächstes Thema

Leinad

Ich stehe auf dem Schlauch und weiss nicht genau wann ich das "do always" brauche.

Hier mal ein Beispiel:

Über einen Dummy bekomme ich gemeldet ob draussen "hell" oder "dunkel" ist.

Ich habe nun zwei DOIF Schleifen gebastelt, eine prüft ob draussen "hell" ist (und noch andere Dinge) und fährt dann die Rollos hoch.

Die zweite DOIF Bedingung prüft ob draussen dunkel ist und fährt dann die Rollos runter.

Das ganze funktioniert aber jeweils nur einmal?!

Nun meine Vermutung, dass dieses do always genau hier gebraucht wird, weil ja die eine Schleife morgens "aktiviert" wird... abends wird dann auch die zweite Schleife aktiviert, weil es ja "dunkel" wird...

Die erste Schleife bleibt aber in ihrem Zustand stehen? Oder? Daher kann sie dann am nächsten morgen nicht nochmal aktiviert werden?!

Ist das so richtig gedacht? Das heisst hier brauche ich das do always um die Schleife ein zweites mal zu aktivieren?

Das do always heisst nicht, dass die Schleife ständig prüft, ob was passiert und mir irgendwie Rechenleistung klaut, sondern nur, dass sie nochmal "wahr" werden kann?


Wahrscheinlich könnte ich das umgehen wenn ich die zwei Bedingungen irgendwie zusammenlege? Aber ich komme nicht ganz drauf.




MaJu

Warum 2 DOIF-Schleifen für sowas?

Nutze doch folgendes (angepasst an deine Sensoren etc.) im DEF von nur EINEM DOIF:
(draußen ist es hell) (mache Jalousien hoch)
DOELSEIF
(draußen ist es dunkel) (mache Jalousien runter)

Es gibt im DOIF dann 2 "Stati" (nämlich ob es draußen hell oder dunkel ist). Und jeweils beim Eintreten des Anderen wird der Befehl ausgeführt.
Hier brauchst du theoretisch kein do=always, da sich die beiden Stati normalerweise immer abwechseln und nicht auf den Status "es wurde hell draußen" wieder der gleiche Status kommen dürfte.

Das do=always brauchst du zum Beispiel, wenn du auf wiederkehrende Ereignisse regieren willst, zum Beispiel "wenn der Taster3 gedrückt wird, dann mache für 20 Sekunden das Licht an". Das DOIF bleibt auf diesem Status und würde nie wieder auf ein Drücken des Taster3 reagieren, wenn das DOIF nicht durch eine andere zutreffende Bedingung den Status wechselt. Da das Licht aber bei JEDEM Tastendruck auf Taster3 angehen soll, nimmt man do=always, der Befehl wird also IMMER ausgeführt wenn die Bedingung wahr ist.
Erlebnisreiche Grüße aus Leipzig!