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

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> > > > > > 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? > > > > > > ja kann man, warum auch nicht :-) > > > > > > > > > Kann man diese evtl. auch wieder zurücksetzen? > > > > > > ja kann man, macht aber keinen Sinn... > > > > > > > > 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. > > > > > > Timerabfragen sollten eigentlich immer nach folgenden Schema ablaufen: > > > > > > <code> > > > long timer; > > > timer=system.timer(); > > > loop > > > { > > > ... > > > if system.timer()-timer>=500 // Ist die Wartezeit von 500ms um?? > > > { > > > timer=system.timer(); // Timerwert speichern > > > ... // mach etwas > > > } > > > } > > > </code> > > > > > > Solange der Datentyp vom Typ long sind, passiert nichts. > > > > > > nitraM > > > > Hallo NitraM, > > > > ganz verstanden habe ich das noch nicht. > > Gesetzt den Fall, timer erhält bei der Zuweisung den Wert 2147483647. > > 600 ms später komme ich wieder zu der if Anweisung. system.timer() hätte wegen Umlaufs > > den Wert -2147483048? Die Rechenoperation -2147483048 -2147483647 müßte -4294966695 ergeben, > > übersteigt damit den Wertebereich des Typs long um das Doppelte, aber wieso sollte das Ergebnis > > trotzdem 600 werden? > > > > Detlef > > > > > oder konkret zu meinem Beispiel: > > long Aktzeit[20]; // Initialisierung als long. > > ... > > Aktzeit[a]= system.timer() + 20000; // Zuweisung von Aktzeit > > ... > > if (system.timer() - Aktzeit[a]) > 0 // Bedingung > > > wäre dann völlig ausreichend? > > Detlef
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB