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 Jörg Hansen - 12.11.2011 16:06)
Als Antwort auf Re: Sekundengenaue Steuerung möglich? von Rene - 12.11.2011 10:14
Ich nutze:
C-Control II Unit, OSOPT V3.1
> > > 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


    Antwort schreiben


Antworten:

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