Ich hab mal einen Baustein geschrieben:
Warum?
Meine Bedenken und Überlegungen, vielleicht nicht alles zutreffend aber mal darüber nachdenken:
- Zykluszeit stark beeinträchtigt (RD_SYS_T, T-DIFF)
- ET läuft auch nachdem Zeit abgelaufen ist weiter > Überlauf
- nur TON, nix anderes
- erster Zyklus ignoriert
- Zweiter Timerstart: last ist bereits auf 14 Uhr gesetzt am 4.Mai 2025, da lief er zuletzt. Er ist also ungleich des "Hacks" zum Initialisieren. Delta wird also berechnet mit Stand heute, da now nicht bekannt ist im ersten Zyklus, also auf 1970 steht. Delta ist also >55 Jahre, Timer ist dann wohl damit abgelaufen, also Q sofort an. Allerdings ist ET ja Datentyp Time, das sind etwas über 24 Tage, also ist vielleicht die Berechnung schon ein CPU-Stop, bin mir da nicht sicher.
- Verstellen der Uhrzeit hat zur Folge das sofort alle Timer triggern können -> RD_SYS_T ist ungeeignet, wenn schon, dann Runtime nutzen. Koppel niemals Anlagenfunktionen mit Bedeutung an die Uhrzeit der PLC.
Die Flanke zur Programmlaufzeit soll einiges verhindern. Im ersten Zyklus der CPU ist ein IN mit TRUE keine Flanke, damit nicht ungewollt irgendwelche Timer oder Teile von Programmen sofort losdaddeln. Arbeitet man nicht konsequent mit seinen eigenen Timern sondern gemischt mit IEC, dann sind IEC bei Null und die eigenen abgelaufen.
Ich denke das ist ein schneller Schuss, aber keine Lösung.