Re: Code verschluckt? Kategorie: Programmierung (von Rene Schulz - 7.01.2012 19:47) | |
Als Antwort auf Re: Code verschluckt? von André H. - 7.01.2012 18:46
| |
> 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 Andre, also Du überschätzt mich da ganz arg, ich habe erst begonnen mich mit der CC2 näher zu Beschäftigen, da bin ich sicher noch nicht so weit um mal schnell einen Timer zu Programmieren. ;) Also der gepostete Code lief gestern durch und heute morgen hat er auch für die Schaltung gesorgt, nur heute Abend ging es mal wieder nicht. Nach dem ich gelesen habe was Du hier schreibst, könnte es ja an der variablen sec. liegen. Danke für Deine Hilfe Gru� Rene | |
Antwort schreiben Antworten: Re: Code verschluckt? (von André H. - 8.01.2012 19:28) Re: Code verschluckt? (von Rene Schulz - 9.01.2012 19:50) |