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

Timer und kein Ende! Kategorie: Programmierung (von ChristianS. - 15.03.2004 14:16)
Ich nutze:
C-Control II Station, OSOPT V3.0
Hallo,
irgenwie verstehe ich mein Programm nicht. Offensichtlich mache ich etwas falsch, aber was?
Ich glaube es liegt ein grundsätzlicher Denkfehler vor. Das Programm soll bei Betätigung eines
Schalters, H-L-Flanke, einen Timer anstoÃ?en, der eine bestimmte Zeit an Sekunden
wartet, bevor er eine Meldung ausgiebt. (Derzeit ,später soll ein Relais bei
steigenden Flanke eingeschaltet werden, und bei fallender Flanke zeitverzögert ausgeschlatet werden).
Soweit funktioniert das Prog auch so wie es soll, aber wenn ich die Zeilen
hwcom.print("...starte Timer");
hwcom.ret();
im Thread "nachlauf" auskommentiere, dann läuft der Timer nur genau ein mal ab! Dann tut sich
nix mehr! Erst habe ich geglaubt es liege an der Geschwindigkeit und habe stattdessen
einen sleep von 50, dann 100, 200 und schlie�lich 1000ms eingefügt, aber das hilft auch nicht.

Hat irgendjemand eine Idee? Oder ist der ganze Ansatz irgendwie nix. Ich habe so die Vermutung,
es liegt an der Flankengeschichte, ev. funktioniert das nicht ganz richtig! ...aber event. sehe ich
auch den Wald vor lauter Bäumen nicht....

Ich wäre dankbar für eine Antwort (oder einen neuen Ansatz).

hier das Prog.

const schalter=10; // Eingang P2, PIN48
const wartezeit=5; // in Sekunden

int flanke;
int timerflag;

thread nachlauf
{
 long timer;
 hwcom.print("...starte Timer"); // mit diesen Einträgen funzt das Programm
 hwcom.ret();                          // ohne läuft der Timer nur ein Mal
 timerflag=0;
 timer=system.timer();
 wait system.timer()- timer>(wartezeit*1000);
 timerflag=0xFF;
 reset;
}


function SCHALTER () returns int
/*******************************************************/
/** Auswertung des SCHALTER-Kontaktes                  */
/*******************************************************/
{
if ports.get(schalter)xor flanke //reagiert auf steigende und fallende Flanke
{
 flanke=ports.get(schalter); //Pegel am Port speichern
 return 0xff;                //flanke=0, d.h. L->H; flanke=-1, d.h. H->L
 }
return 0;
}


thread main
{
 stports.init();
 lcdext.init();
 lcdext.clear();
 stports.LCDlight(0);
 run waithost; // ACHTUNG: die Routine habe ich mal ´rausgeschmissen, ist aber die von A.H.
 sleep 5000;
 hwcom.clr();
 hwcom.print("starte Programm....");
 hwcom.ret();
 
 loop
{
if SCHALTER()
  {
   if flanke
   {
    hwcom.print(" L->H Flanke");
    hwcom.ret();
   }
   else
   {
    hwcom.print(" H->L Flanke");
    hwcom.ret();
    run nachlauf;
   }
  }
if timerflag
{
  hwcom.print("Timer abgelaufen");
  hwcom.ret();
  timerflag=0;
}
}
}


    Antwort schreiben


Antworten:

Re: Timer und kein Ende! (von marcell - 15.03.2004 20:10)
    Re: Timer und kein Ende! (von ChristianS - 15.03.2004 21:30)
        Re: Timer und kein Ende! (von André H. - 21.03.2004 11:06)
        Re: Timer und kein Ende! (von marcell - 16.03.2004 22:40)
            Re: Timer und kein Ende! (von ChristianS - 17.03.2004 20:33)