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

Re: Code verschluckt? Kategorie: Programmierung (von André H. - 7.01.2012 18:46)
Als Antwort auf Code verschluckt? von Rene Schulz - 7.01.2012 17:45
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, 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.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Code verschluckt? (von Rene Schulz - 8.01.2012 10:55)
    Re: Code verschluckt? (von André H. - 8.01.2012 19:12)
        Re: Code verschluckt? (von André H. - 8.01.2012 19:32)
Re: Code verschluckt? (von Rene Schulz - 7.01.2012 19:47)
    Re: Code verschluckt? (von André H. - 8.01.2012 19:28)
        Re: Code verschluckt? (von Rene Schulz - 9.01.2012 19:50)