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 Zusammen, > > ich habe Probleme mit einem Thread, der den Systemtimer verwendet. > Nach ca. 14 Tagen funktioniert er nicht mehr richtig, nach vier Wochen > werden die Fehlfunktionen so groß, daß ich einen Reset machen muß. > > Grundsätzlich stehe ich mit der long Variable auf Kriegsfuß; obwohl ich mich > meiner Meinung nach an die Spec halte, gibt es bei großen Zahlenwerten immer Probleme. > > Deshalb glaube ich auch, daß der große Zahlenwert des system.timer() Ursache für die > Probleme dieses Threads sind. Vielleicht erkennt ja einer von Euch sofort, was ich hier falsch mache. > > Anbei der Code. > Grundsätzliche Funktion des Threads: > Mehrere Funktionen nacheinander ausführen. > Beispiel: Jalousien runterfahren und nach 20 Sekunden abschalten > oder > Licht aufziehen, nach einiger Zeit runterdimmen, dann nach weiterer Zeit ganz ausschalten. > > Aktwert[a] ist der Aktor, der gesteuert wird > Aktwert[a+1] ist der Funtkionswert. Im Detail: > 0-9 sind Funktionen rund um Jalousiesteuerung > 10-19 sind Funktionen zur Relaissteuerung > 20-29 sind Funktionen für Lichtdimmung. > Aktwert[a+2] ist ein Parameter ( Wie weit sollen Jalousien fahren, wie hell das Dimmlicht usw.) > Aktzeit ist die Zeit in ms, die vergehen soll, bis die Aktwert-Funktion erneut aufgerufen wird. > > Aktwert[a], Aktwert[a+1] und Aktwert[a+2] werden in einer anderen Funktion befüllt. > Nach deren Befüllung wir das Aktflag auf 1 gesetzt, damit folgender Thread aktiv wird: > > thread Ueberwachung > { > int a,wert; > long wart; // wart ist der Zeitpunkt wann reagiert werden soll. > // Reagiert wird, sobald system.timer() größer wart wird. > a=0; > > wait ((wart - system.timer()<=0) or Aktflag); // Solange wart-wert noch nicht erreicht. > wart = system.timer()+3600000; // jede Stunde zumindest ein Lauf. > Aktflag=0; // Interuptflag zurücknehmen. > > while Aktwert[a]!= ENDE // Schleife durchführen > { > if Aktwert[a] == LEER // Wenn Aktwert[a]==LEER und nächster Eintrag > { // ist ENDE, wir das ENDE um einen Eintrag > if Aktwert[a+3]==ENDE Aktwert[a]=ENDE; // vorgeholt. > } > else > if (Aktzeit[a]-system.timer()) <= 0 // Ist diese Aktzeit überschritten? > { > if Aktwert[a+1] < 10 // Jalousien steuern > { > if Aktwert[a+1] == 0 // Modus 0 = Jalousie hoch bis Endschalter > { > dwmodule.JalAbs(JalZi[Aktwert[a]],Auf); // Jalousie hochfahren > sleep 100; > Aktzeit[a]=system.timer()+30000; // neue Aktzeit = 30 Sec > Aktwert[a+1]=1; // Modus auf 1 hochsetzen > } > else if Aktwert[a+1] == 1 // Modus 1 = Jalousien runterfahren. > { > if Aktwert[a+2] dwmodule.JalAbs(JalZi[Aktwert[a]],Ab); // Jalousie runterfahren, wenn angegeben. > sleep 100; // verhindert das Kleben der Relais > if Aktwert[a+2] == 1 Aktzeit[a]=system.timer()+4000; // Jalousie viertel runterfahren > else if Aktwert[a+2] == 2 Aktzeit[a]=system.timer()+8000; // Jalousie halb runter > else if Aktwert[a+2] == 3 Aktzeit[a]=system.timer()+12000; // Jalousie ganz runter > else if Aktwert[a+2] == 4 Aktzeit[a]=system.timer()+21000; // Jalousie ganz runter > Aktwert[a+1]=2; // Modi auf 2 hochsetzen > } > else if Aktwert[a+1] == 2 // Jalousien stoppen > { > dwmodule.JalAbs(JalZi[Aktwert[a]],Stop); > sleep 100; > Aktwert[a]=LEER; // Auftrag aus Aktwert löschen. > } > } > else if Aktwert[a+1] < 20 // Relais steuern > { > } > else if Aktwert[a+1] < 30 // Dimmer steuern > { > } > } > if (wart-Aktzeit[a]) > 0 wart=Aktzeit[a]; // die kürzeste Wartzeit in wart eintragen > a=a+3; // nächsten Aktwert Eintrag prüfen. > } > }
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB