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

Re: Sekundengenaue Steuerung möglich? Kategorie: CC2-Unit & Appl.Board / CC2-Station (von Rene Schulz - 12.11.2011 16:21)
Als Antwort auf Re: Sekundengenaue Steuerung möglich? von Jörg Hansen - 12.11.2011 16:06

> > > > 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:

Re: Sekundengenaue Steuerung möglich? (von Rene Schulz - 23.11.2011 17:46)