STIME Ãœberlauf bit31

Begonnen von joschua, 21. Dezember 2009, 12:37:41

Vorheriges Thema - Nächstes Thema

0 Mitglieder und 1 Gast betrachten dieses Thema.

joschua

Hi,

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.

Danke für die Unterstützung

dalbi

Hallo,

am Baustein STIME liegt das nicht, ich habe da so einen verdacht und werde die Sache "TIMER_2" mal anschauen.

Gruss Daniel

dalbi

Hallo,

tritt das Problem nur bei einem Neustart auf oder ist es während des Betriebs der CPU passiert.

Gruss Daniel 

dalbi

#3
Hallo,

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.
 
Gruss Daniel

[gelöscht durch Administrator]

joschua

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!



[gelöscht durch Administrator]

dalbi

Hi,

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.

Gruss Daniel

joschua

Hey,

vielen Dank für die Info, werde ich anpassen.

Wünsche Euch eine schöne Weihnacht, und nochmals vielen Dank für die Infos!

Gruß
Uwe