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 - 23.11.2011 17:46)
Als Antwort auf Re: Sekundengenaue Steuerung möglich? von Rene Schulz - 12.11.2011 16:21
Ich nutze:
C-Control II Station, OSOPT V3.1
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: