habe in meiner Haussteuerung eine CPU318-2 von Siemens eingesetzt, u.a. verwende den Timer_2.
Jedoch funktioniert dieser Timer nun nicht mehr, die Ursache:
die CPU erzeugt einen Überlauf, dieser wird durch den Baustein STIME erkannt und im DB64 im bit31 abgelegt.
Als ich dieses Bit nullte, funktionierte der Timer wieder.
Im OB1 habe ich nun vorsorlich das bit31 ständig genullt, leider bin ich mir nicht sicher ob diese Vorgehensweise richtig ist.
Was muss ich in der Software tun, um den erkannten Überlauf korrekt abzufangen ohne das die Timer stehen bleiben?
Im OB100, löschen von den jeweiligen init Bits bei Neustart/Wiederanlauf ist programmiert.
so habe es gefunden, das Problem ist der TIMER_2 und nicht der Baustein STIME die Stat-Variable “last_check” im TIMER_2 wird bei einem Neustart der CPU nicht 0, daher läuft der Baustein erst nach 24 Tagen wieder an. :
STIME hat auch noch einen kleinen Bug die Stat-Variable Bit31 wird bei einem Neustart nicht 0.
Anbei die korrigierten SCL-Quellen.
TIMER_2 muss jetzt nicht mehr im OB100 mit Init = false Initialisiert werden.
Hey,
habe die Bausteine entsprechend angepasst.
Im Anhang der Ausdruck vom OB1 und OB100, was kann/sollte hier angeasst werden, bezüglich TIMER_2 und STIME.
Vielen Dank für die schnelle Hilfe!
es können alle Initialisierungen für STIME u. TIMER_2 im OB100 eingespart werden, ebenfalls die Zeilen im OB1
NETWORK
TITLE =Überlaufbit für STIME löschen, sonst stehen alle Timer
CLR ;
= "IDB_STIME".bit31;
entfernen.
Die Bausteine erkennen selber ob die CPU neu gestartet wurde. Wichtig ist nur das sie zyklisch durchlaufen und nicht bedingt im Programm aufgerufen werden.