beginner34:
Danke jurs, diese Version hatte ich schon und hat auch funktioniert. Nur kommen jetzt noch Zeitabfragen und intervaldauer mit dazu.
Um so mehr mußt Du Dein Programm funktionell nach dem EVA-Prinzip aufteilen, damit die Programmlogik überschaubar bleibt.
Eingabe: Stand der Sensoren feststellen, feststellen ob Zeiten und Zeitlimits erreicht sind
Verarbeitung: Verschiedene Zeiten und Zeitlimits neu setzen und Sollzustand der Ausgänge festlegen
Ausgabe ==> Zustand der Ausgänge so setzen wie es dem ermittelten Sollzustand entspricht
Der Trick bei der Abtrennung des Schritts "Verarbeitung" von den anderen Programmschritten ist, dass Du beim Verarbeiten die Sollzustände der Ausgänge während der Verarbeitung beliebig oft modifizieren kannst, mit Hilfe von beliebig vielen Sensordaten, Bedingungen und Zusatzbedingungen, ohne dass tatsächlich etwas geschaltet wird. Erst am Ende des Schritts "Verarbeitung", wenn alles berücksichtigt wurde, steht der zu schaltende Zustand fest. Und zwar für alle zu setzenden Ausgänge gleichzeitig. Und nur dieser eine nach endgültiger Verarbeitung feststehende und für alle Ausgänge zu diesem Zeitpunkt gültige Schaltzustand wird nach diesem Verarbeitungsschritt gesetzt.
Du darfst die "Verarbeitung" der Sensordaten, Zeiten, Bedingungen und Zusatzbedingungen NICHT mit anderen Schritten vermischen, insbesondere darfst Du nach Beginn der "Verarbeitung" von Informationen nicht noch einmal in den Zustand der Informationssammlung (Eingabe) wechseln und Du darfst auch nicht vor dem Ende der "Verarbeitung" eines Schrittes schon tatsächliche Schaltvorgänge ausführen, die sich möglicherweise im weiteren Verlauf der Verarbeitung als falsch herausstellen, wenn noch weitere Bedingungen verarbeitet werden.
Dein Programm ist vom Konzept her grundlegend falsch angelegt, weil es die Schritte vermischt und die "Verarbeitung" der Eingangsdaten und Zeiten von der Verarbeitung der Bedingungen und der Ausgabe der Schaltzustände nicht sauber getrennt ist.