Re: Sekundengenaue Steuerung möglich? Kategorie: CC2-Unit & Appl.Board / CC2-Station (von Rene Schulz - 23.11.2011 17:46) | ||
Als Antwort auf Re: Sekundengenaue Steuerung möglich? von Rene Schulz - 12.11.2011 16:21 | ||
| ||
So ich habs hinbekommen, die läuft nun Sekundengenau und macht das was sie soll. ;) //////////////////////////////////////////////////////////////////////// ////////////////////////Zeitschaltuhr Regen///////////////////////////// //////////////////////////////////////////////////////////////////////// thread regen { string s; byte led; byte outport; byte port; byte hour, min, sec; int time; stports.init(); lcdext.init(); /*******************************************/ /******** ANSTEUERUNG LCD *************/ /*******************************************/ lcdext.print(" C-CONTROL II"); lcdext.line(2); lcdext.print(" STATION"); sleep 2000; lcdext.clear(); /*******************************************/ /******** ANSTEUERUNG RELAYS *************/ /*******************************************/ lcdext.print(" TERRA: REGEN"); sleep 5000; lcdext.clear(); /*******************************************/ /*********** Zeitschaltuhr Regen ***********/ /********Es wird jeden Tag geschaltet*******/ /*******************************************/ loop { min = system.minute(); wait system.second() != sec; time=system.hour()*100 + system.minute()*100 + system.second(); /************************************************************/ /********Zeitdefinition Stunden Minuten Sekunden*************/ /***Ein 07:30:00 und 17:00:00 Aus 07:30:45 und 17:00:45******/ /************************************************************/ if time >= 073000 and time <= 073045 or time >= 170000 and time <= 170045 stports.setRel(2,1); else stports.setRel(2,0); }; }; Gru� Rene > > > > > Hallo Leute, > > > > > > > > > > ist es mit folgendem code möglich eine Zeitschaltuhr zu | > > > > > Programmieren, oder mache ich hier etwas grundsätzlich falsch? > > > > > > > > > > Wenn ja wäre es nett wenn mir jemand hilft. > > > > > > > > > > Viele Dank > > > > > Gru� Rene > > > > > > > > > > byte ZSUR; > > > > > > > > > > thread schaltuhr1 > > > > > { > > > > > byte sek, min, day, Nr; > > > > > int time; > > > > > > > > > > min = system.minute(); > > > > > wait system.minute() != min; > > > > > time=system.hour()*100 + system.minute(); > > > > > day=system.dow(); > > > > > > > > > > if time >= 8000000 and time < 8000030 > > > > > // zwischen 08:00:00 und 08:00:30 > > > > > // nicht über Tageswechssel schalten > > > > > > > > > > ZSUR = 1; // EIN > > > > > else > > > > > ZSUR = 0; // AUS > > > > > } > > > > > > > > > > Ich habe diese Schaltuhr im net gefunden, sie ist | > > > > > ursprünglich von Malte Alpers und ich versuche sie | > > > > > für mich umzuschreiben oder anzupassen. > > > > > > > > > > > > > > > > Sekunden genaues Schalten Nein. > > > > > > > > Dein Thread wird blos einmal die Minute abgearbeitet. Theoretisch zumindest, praktisch müsstet > > > > Du noch bei jeden Durchgang die Vari min wieder gleichsetzen, aber bei genauer Betrachtung wird > > > > die Vari min sowieso immer neu gestartet. Da fehlt noch ein Loop. > > > > > > > > Also so kann es nicht funktionieren, brauchst Du jetzt eine Zeitschaltuhr für Schaltvorgänge > > > > im Minuten oder Sekundenbereich? > > > > > > > > Rene > > > > > > Danke schon mal für Deine Antwort, > > > > > > ich benötige eine im Sekundenbereich, diese soll für 30 | > > > Sekunden Laufen und dann wieder Abschalten, das ganze 2 | > > > mal am Tag zu einer vorher definierten Zeit. > > > > > > Ist für eine Beregnungsanlage im Terrariumbereich. > > > > > > Gru� Rene > > > > > > Hallo Rene, > > > > ich habe in meiner Rolladensteuerung auch eine Timerroutine von Malte Alpers verwendet > > ( von mir auf 16 Timer erweitert), damit kannst Du genaue Schaltvorgänge steuern: > > > > > > /* Geändert : 25. Juni 2005 Malte Alpers (malte.alpers@gmx.de) */ > > /* Geändert : 16 Timer, 5.Mai 2008 Jörg Hansen(joerg@hansen-leinesser.de) */ > > /* Getestet : ja */ > > /* Benötigt : math.c2; constant.c2 */ > > /* Bemerkungen: Function verwaltet 16 Timer (Nummer 0...15) */ > > /* Kann für allgemeine Verzögerungesaufgaben verwendet werden */ > > /****************************************************************************/ > > /* Universaltimer auf Basis des Systemtimers im Millisekundentakt */ > > /* */ > > /* Rückgabewert=timerstatus */ > > /* */ > > /* Parameter: */ > > /* num.......timernummer */ > > /* start.....wenn gesetzt, wird startzeit gespeichert */ > > /* res.......setzt status auf 0 */ > > /* time......Laufzeit in Millisekunden */ > > /****************************************************************************/ > > > > long t[15]; //speicher für startzeit > > int state[15]; //speicher für status > > > > function t_v(int num,int start,int res,long time) returns int > > { > > long t1,t2; > > t1=system.timer(); //aktuelle zeit speichern > > if start > > { //wenn start gesetzt, zeit speichern > > t[num]=t1; //und status setzen > > state[num]=constant.ON; > > } > > t2=math.labs(t1-t[num]); //absolutdifferenzbildung > > if t2 > time state[num]=constant.OFF; //zeitüberprüfung > > > > if res state[num]=constant.OFF; //reset wenn res > > return state[num]; > > } > > > > > > > > Hier noch die Aufrufe beim Starten (z.B. mittels Tastendruck): > > > > > > > > if (tastenvorzustand[i] == 0) and(tastenzustand[i] == 1) and (relaiszustand[i]== 0) // Taste rauf betätigt > > { > > rollladenrelais(i,1); //Rollladenrelais rauf einschalten > > timer.t_v(i,-1,0,Laufzeitrauf[i]); // Timer starten > > relaiszustand[i] =1; // merken das das Relais angesteuert ist > > tastenvorzustand[i] = 1; // Tastenzustand in Vorzustand übernehmen > > break; > > } > > > > > > > > ... sowie ein Codeausschnitt der Schleife zur Abfrage des Timerablaufs: > > (geht natürlich auch als eigener Thread, den man stoppen kann solange kein Timer gestartet ist) > > > > loop > > { > > //prüfen ob ein Timer abgelaufen ist > > for i = 0...maxRollladen > > { > > if (relaiszustand[i]== 1) > > { if !(timer.t_v(i,0,0,Laufzeitrauf[i])) > > { timer.t_v(i,0,-1,0); //timer stoppen > > relaiszustand[i] = 0; // Relaiszustand AUS merken > > rollladenrelais(i,0); //Rolladenrelais ausschalten > > }; > > }; > > }; > > }; > > > > > > > > Laufzeitrauf[] ist ein globales Konstantenarray z.B. 20000 für 20 Sekunden : > > > > const Laufzeitrauf[] = 20000, 20000, 20000, 20000, 27000, 27000; // Laufzeitdefinition je Rolladen > > const Laufzeitrunter[] = 18500, 18000, 19000, 18000, 23500, 17000; // Laufzeitdefinition je Rolladen > > > > > > > > Ich hoffe damit kommst Du weiter > > > > Viele Grü�e Jörg > > Hallo Jörg, > > Danke Dir, das hilft mir sicher weiter, darauf kann ich > aufbauen. > Ich bin eh eben am Testen und brauche dazu sicher noch > ein Weilchen. > Als Laie gehts halt nur Stück für Stück ;) > > Gru� Rene | ||
Antwort schreiben Antworten: |