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

Re: noch mal threads Kategorie: Programmierung (von ChristianS - 1.12.2010 19:33)
Als Antwort auf Re: noch mal threads von nitraM - 28.11.2010 16:10
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo,
danke für die Antwort, kann aber noch nicht ganz folgen...ich warte auf eine steigende Flanke
oder einen kurzen Impuls und setzte mein "busy". Das "busy" schaltet dann über die Funktion
"light()" das Licht ein, und der der Timeout-Timer startet. I.d.R kommt aber direkt nach der
steigenden Flanke die fallende Flanke. Dadurch wird der Timer für die Ausschaltverzögerung
gestartet. Das geschieht über detect=1.  Wenn jetzt aber die steigende Flanke nur
über den Impuls erkannt wird, dann gibt es keine fallende Flanke und ich warte bis in alle Ewigkeit.
Also, irgendwie kann ich noch nicht folgen mit dem "Verodern" Hier mal der Code:

thread Monitoring
/******************************************************************************/
/*                    IR-Port-Ã?berwachung                                     */
/******************************************************************************/
{
 run 100;
 wait (ports.get(ir) or ports.getcount(ir)>0) and !busy;     //warten auf Unterbrechung
  t1=system.timer();              //Zeitpunkt der steigenden Flanke in Variablen
  busy=1;
 wait !ports.get(ir)and busy;     //warten auf Freigabe
  t2=system.timer();              //Zeitpunkt der fallenden Flanke in Variablen
  ports.getcount(ir);             //Zähler am Port zurücksetzen
  busy=0;
  detect=1;                       //Impuls erkannt!
}
...
function light ()
{
 ......
  }
 if global.t2<=0                           //nur wenn Timer 2 inaktiv
  {
   if ((check.Night() and(reed.busy or ir.busy)) or schalter.Read(0,1))
    {
     time.Reset(1);                        //Timer zurücksetzten
     global.set=1;                         //Licht "an" setzten
    }
   if check.Night()
    if reed.detect or ir.detect             //fallende Flanke an IR oder Reed
     global.t1=global.timer1;               //Timer 1 nur bei Nacht starten
   reed.detect=0;                           //Flag zurücksetzetn
   ir.detect=0;
  }
 if global.tflag1 or global.tflag2 or(!schalter.Read(0,1) and schalter.flag[0])
   {
    time.Reset(1);
    time.Reset(2);
    global.set=0;                             //Licht "aus" setzen
    schalter.Reset(0);
   }

  if global.set
  {
   hsrel8.On(hsrel8.aussenlicht);
  }
  else
  {
   hsrel8.Off(hsrel8.aussenlicht);
  }
 }


GruÃ?,
ChristianS.




> > Hallo,
> > ich habe die Sache jetzt umgestrickt und es funzt auch zu 98% ganz gut. Das fuchst micht
> > natürlich, da 100% das Ziel ist und es doch noch vorkommt, dass man durch die IR geht und
> > das Licht nicht einschaltet.Deshalb geht mir die Sache mit dem Zähler nicht aus dem Sinn.
> > Der ist so rattenschnell, dass selbst ein Schuss durch den Lichtstrahl, z.B. aus einer Schleuder,
> > erkannt wird. Das hätte ich nicht gedacht.
> >
> > Allerdings kann ich das in der Form nicht gebrauchen, da ich auf "fallende" und "steigende"
> > Flanke reagieren muss..
> > Das Licht wird bei einer High-Flanke einschaltet,und bei der Low-Flanke starten ein Timer
> > der die Ausschaltverzögerung bestimmt. Da kann ich mit einem Zählimpuls erstmal nichts anfangen.
> > AuÃ?erdem messe ich noch die Zeit zwischen "High" und "Low"-Flanke, da der Lichtstrahl auch
> > unerwünscht unterbrochen werden kann, wenn z.B. Gegenstände dazwischengestellt werden,
> > oder, wie im letzten Winter, der Schnee zu hoch wird. Dann soll es später einen Timeout geben
> > und das Licht geht so lange aus, bis der Fehler behoben ist. Zusätzlich zur IR, gibt es einen
> > Reed-Kontakt an der Haustür (reed) und einen Schalter (ist ein Taster, deshalb schalter.flag)
> > der das Licht schaltet.
>
> Hallo Christian,
> so wie jetzt dein Problem verstehe reicht es doch wenn du die beiden Sachen "veroderst"...
> => bei sehr kurzen Impulsen Zählt dein Zähler => Licht für die entsprechende Zeit ein
>    ODER
> => bei erkannten Flanken => Licht ein
>
> Bei blockierter LS kein Zähler und keine fallende Flanke... => kein Licht...
>
>
> nitraM


    Antwort schreiben


Antworten: