Habe es im Prinzip wie den OB1 im S7 - Manager aufgebaut.
Also ein Skript das eine do while Schleife beinhaltet und die anderen Skripte aufruft.
Das Skript wird zeitgesteuert ausgelöst.
Das Skript jede Minute ausgeführt und über die Schleife aktiv gehalten.
Bei Sekunde 59 wird das Skript wieder beendet und über den Aufgabenplaner neu gestartet.
Die Variable sek wird von der Steuerung übergeben und beinhaltet die akutelle Sekunde.
Die Sekunde kann von der S7 im OB ausgelesen werden, dort wird diese in die Variable sek gespeichert.
Die Uhrzeiten werden über Bereichszeiger abgeglichen.
D.h. im Aufgabenplaner das Skript mit dem Zyklus 1 Minute festlegen.
Das Skript sieht dann so aus:
do while sek < 59
<Anweisungen>
loop
Das Skript bricht bei 59 Sekunden ab, um nicht mehrmals gestartet zu werden, sonst habe ich nach 10 Minuten das gleiche Skript 10x laufen.
Soll das Skript nicht ständig, sondern in einem festen Intervall (z.B. alle 5 Sekunden) ausgeführt werden, kann man den Zeitpunkt der letzten Ausführung zwischenspeichern, die Differenz berechnen und bei der übereinstimmenden Differenz (z.B. Differenz > 5) die Aufgabe erneut starten.
Das wäre dann eine if - Bedingung innerhalb der Schleife.
Auf die Überläufe ist allerdings zu achten (letzte Ausführung 56, neuer Start bei 61 -> Zustand wird nie erreicht!). Bei Werten über 60 sind 60 abzuziehen, um die richtige Zeit zu erhalten.
Alles klar, oder habe ich es zu verwirrend erklärt?