Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Timerüberlauf Kategorie: Programmierung (von Detlef - 29.06.2009 20:48)
Als Antwort auf Re: Timerüberlauf von reneforster - 29.06.2009 19:45
Ich nutze:
C-Control II Station, OSOPT V3.0
> > Hallo,
> > ich habe mal eine Frage zur Timervariable.
> >
> > Die Systemtimervariable ist vom Typ long und wird ca. alle 24 Tage überlaufen. Die Frage ist, wie geht
> > man mit dieser Variable nun um? Ich habe beispielsweise zyklische Ã?berwachungen programmiert,
> > wo sich ein Proze� solange schlafen legt, bis system.timer() + X überschritten ist. Funktioniert auch
> > prima, gehe aber nun davon aus, da� in einem ünglücklichen Moment das Ganze auch mal
> > nach hinten losgehen kann.
> > Wie kann man diese Variable überhaupt sicher verwenden?
> > Kann man diese evtl. auch wieder zurücksetzen?
> Zurück setzen / verändern geht da nicht.
>
> Ich habe einen ähnlichen Anwendungsfall wie Du. Bei mir ist es eine Spannungsfrei Schaltung für
> Rolladenmotore.
>
> Ich habe eine zweite Variable (eigener Timer) genommen, welche im Sekundentakt hochgezählt wird.
> Diese benutze ich das als eigene Timer Variable. Um hier jetzt einen Ã?berlauf zu verhindern, wird die
> eigene Timervariable immer um 4.00 Uhr zurückgesetzt. Die Wahrscheinlichkeit, das früh um 4.00 Uhr
> Rolläden bedient werden, ist bei mir unwahrscheinlich. Aber man könnte auch hier noch entgegen
> wirken, und den Rolladen Thread einfach um 4.00 aussetzen.
>
> Ob diese Lösung bei Dir anwendbar ist, weis ich nicht. Vielleicht hilfst irgendwie als Lösungsansatz.
>
>
> Rene

Hallo Rene
vielen Dank für die Antwort.
inst ja mal interessant, ein Anwendungsfall des Threads mit dem Timer ist tatsächlich auch die
Jalantriebe wieder spannungsfrei zu schalten...

Habe jetzt erstmal folgenden Lösungsansatz gewählt, frage mich aber, ob das nicht auch eleganter
geht.

      if (Aktzeit[a] <= system.timer() and Aktzeit[a]-360000000 < Aktzeit[a])      
       or (((Aktzeit[a]-360000000) > system.timer()) and Aktzeit[a] > 360000000)    

Aktzeit[a] wird durch andere Funktionsteile gesetzt, und ist system.timer() + eine Wartezeit X.

Normalerweise reicht ja der Vergleich

    Aktzeit[a] <= system.timer()

um ein Ereignis auszulösen, aber wegen des Zählerumlaufs habe ich das um
 
   Aktzeit[a]-360000000 < Aktzeit[a] erweitert. Dieser Ausdruck bleibt nämich negativ, wenn

Aktzeit[a] umgelaufen ist.

Au�erdem wir sofort ausgelöst, wenn Aktzeit[a] - 100 Stunden immernoch grö�er ist als
system.timer() obwohl Aktzeit[a] schon grö�er ist als 100 Stunden. dann ist nämlich
system.timer() umgelaufen, und das Ereignis mu� sofort ausgelöst werden.

Viele Grü�e

Detlef


    Antwort schreiben


Antworten:

Re: Timerüberlauf (von nitram - 30.06.2009 7:10)
    Re: Timerüberlauf (von Detlef - 30.06.2009 9:54)
        Re: Timerüberlauf (von Detlef - 30.06.2009 11:24)
    Re: Timerüberlauf (von Detlef - 30.06.2009 8:12)
        Re: Timerüberlauf (von Detlef - 30.06.2009 8:36)
        Re: Timerüberlauf (von nitram - 30.06.2009 8:30)
            Re: Timerüberlauf (von reneforster - 30.06.2009 15:01)
                Re: Timerüberlauf (von nitram - 30.06.2009 21:16)
            Re: Timerüberlauf (von Detlef - 30.06.2009 9:21)
            Re: Timerüberlauf (von Detlef - 30.06.2009 8:45)