@linuxluder
Vom Prinzip her kommen für mich zwei Ansätze in Frage:
1. Auslesen der Zeit aus der CPU (SFC1 oder im OB1-Kopf) und Ablegen der Start- und Stop-Zeit im Format "Time and Date". Dann müßte man diese Formate jedesmal auseinanderpuzzeln und über einzelne Vergleicher ermitteln, ob Jahr, Tag, Stunde, Minut, Sekunde die Bedingungen erfüllen, einen Nocken zu schalten oder nicht.
2. Auslesen der Zeit wie oben, Ablegen in zwei Variablen a) Date, b) Time of Day.
Date:
Datentyp Länge (Bit) Format Beispiele für das Format
Min. Max.
DATE 16 Jahr-Monat-Tag D#1990-01-01 D#2168-12-31
MSB: Most Significant Bit
LSB: Least Significant Bit
Das Datum wird als vorzeichenlose Ganzzahl in Tagen dargestellt, wobei der erste Tag der 1. Jan. 1990 ist.
Time of Day:
Datentyp Länge (Bit) Format
TIME_OF_DAYoder TOD 32 Tageszeit in Stunden:Minuten:Sekunden.Millisekunden
Beispiele für das Format (oberer und unterer Grenzwert)
TOD#00:00:00.000
TOD#23:59:59.999
Stunden, Minuten und Sekunden müssen angegeben werden. Die Angabe der Millisekunden ist nicht erforderlich.
MSB: Most Significant Bit
LSB: Least Significant Bit
Hinweis:
Der Datentyp TOD wird als vorzeichenlose Ganzzahl in Millisekunden gespeichert, wobei Null gleich Mitternacht ist.
Die Start- und Stopzeit für die Schaltuhr legst du ebenfalls jeweils in diesen zwei Variablenformaten ab.
Nun kannst du mit 4 Vergleichsoperationen entscheiden, ob deine Schaltuhr den zugehörigen Ausgang schalten soll oder nicht.
Wenn
1. Aktuelles Datum > Einschaltdatum
UND
2. Aktuelle Zeit > Einschaltzeit
UND
3. Aktuelles Datum < Ausschaltdatum
UND
4. Aktuelle Zeit < Ausschaltzeit
DANN
Schaltausgang auf 1
Die Formate für Date und "Time of Date" sind 16 bzw. 32 Bit, können also direkt mit Vergleichern benutzt werden.
Die 2. Variante würde ich wohl vorziehen.
Das Programm würde ich in 4 Teile gliedern:
1. Eingabe der Daten (Start-, Stopzeit) am OP, umwandeln in die gewünschten Formate und eintragen in einen Datenbaustein.
2. Ein Baustein, der fortlaufend die aktuelle Zeit ausliest, in das benötigte Format wandelt.
3. Ein Baustein, der für ein Pärchen (Start-, Stopzeit) die Vergleichsoperationen durchführt und den Schaltausgang schaltet.
4. Wenn nötig, den Baustein von 3. für mehrere Schaltnocken wiederverwenden, z.Bsp. in einem übergeordneten FB für 6 Schaltausgänge.