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

Re: Code verschluckt? Kategorie: Programmierung (von Rene Schulz - 8.01.2012 10:55)
Als Antwort auf Re: Code verschluckt? von André H. - 7.01.2012 18:46
Ich nutze:
C-Control II Station, OSOPT V3.1
> Hallo Rene,
>
> > Kann es sein das der Code "verschluckt" wird?
>
> Nein.
>
> > Ich meine man kennt ja diverse komische Bugs etc., nicht
> > unbedingt vor der CC2 aber wie gesagt, nichts scheint unmöglich.
>
> Derzeit sind keine Bugs beim aktuellen OS bekannt.
>  
> > 2 Tage lief die Anlage mit dem Code und dann begann der Murks
> > ohne das am Code etwas geändert wurde.
>
> DaÃ? die Routine schonmal fehlerfrei lief bezweifle ich:
>
> > wait sec!=system.second();                     // Warten auf neue Sekunde
> >      min =system.minute();                     // Wenn neue Minute, dann gleichsetzen und abarbeiten
>

> Was fällt Dir hier auf?
> Du wartest auf einen Sekundenwechsel.
> die Variable sec wird aber nirgends gesetzt.
> Dann setzt Du die Variable mit mit der aktuellen Minute.
> Diese Variable wird aber nirgendwo ausgewertet.
>
> Und ich hatte es schonmal erwähnt: Bitte auf einheitliches Einrrücken achten.
>
>
> > /**************************************************************/
> > /******** Zeitdefinition Stunden Minuten Sekunden *************/
> > /*** EIN 07:30:00 AUS 07:30:45 EIN 17:30:00 AUS 17:30:45 ******/
> > /**************************************************************/
> >
> >    {
> > if system.hour()==07 and system.minute()==30   // bei 7.30 Uhr
> >    stports.setRel(2,1);                        // schalte ein
> >    sleep 30000; sleep 15000;                   // warte 45 sec
> >    stports.setRel(2,0);                        // schalte aus
> >    }
> >    {
> > if system.hour()==17 and system.minute()==30   // bei 17.30 Uhr
> >    stports.setRel(2,1);                        // schalte ein
> >    sleep 30000; sleep 15000;                   // warte 45 sec
> >    stports.setRel(2,0);                        // schalte aus
> >   }
> >  }
> > }

>
> Hier mit sleep zu arbeiten, kann ungünstig sein. Besonders, wenn der Thread
> später einmal mehr können soll.
> Besser wäre es, für die Laufzeiten einen Count-Down-Timer zu programmieren:
>
> const schaltzeiten[]= 073000, 173000, -1; //7:30:00, 17:30:00
> const schaltdauer= 45;// in Sekunden
> int sectimer;
> thread xy
> {
>  long timeserial;
>  int i;
>  byte second;
>  second=system.second();
>  loop
>  {
>   wait second!=system.second();
>   second=system.second();
>   timeserial=cast.intLong(system.hour())*10000 + system.minute()*100 + system.second();
>   i=0;
>   do
>   {
>    if timeserial==schaltzeiten[i]
>     {
>      sectimer=schaltdauer;
>      stports.setRel(2, 1);
>     }
>    if timeserial==-1 i=-1; else i=i+1;
>   } while i >= 0;
>   if sectimer>0 sectimer=sectimer-1;
>   else
>   if sectimer==0
>    {
>     stports.setRel(2, 0);
>     sectimer=-1;
>    }
>  }
> }
>

>
> Statt einem Timer könnte man natürlich auch Ausschaltzeiten definieren.
>
>
> MfG André H.

Hallo André,

leider scheint der Code von Dir auch nicht zu Funktionieren,
heute morgen 07:30 wurde das Relais nicht angesprochen.
Ich habe jetzt auch kaum noch Zeit, da ich ab morgen wieder
Arbeiten muss und dann erst in 14 Tagen wieder daheim bin.
Dennoch danke für Deine Hilfe.

GruÃ? Rene


    Antwort schreiben


Antworten:

Re: Code verschluckt? (von André H. - 8.01.2012 19:12)
    Re: Code verschluckt? (von André H. - 8.01.2012 19:32)