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

Re: mit Uhrzeiten rechnen Kategorie: Programmierung (von Rene Schulz - 23.12.2011 19:22)
Als Antwort auf Re: mit Uhrzeiten rechnen von ChristianS - 24.08.2011 21:02
Ich nutze:
C-Control II Station, OSOPT V3.1
Hallo Christian und Andre,

ich habe eben den Code gefunden und denke er könnte mir auch Helfen.
Wo müsste man den Einfügen, wenn ich folgenden Thread habe?
Mein Problem ist jeweils die Ausschaltzeit, Rel2 sollte nur für
45 Sekunden schlieÃ?en und ich muss nun irgendwie 15 Sekunden von
angegebener Zeit abziehen.

thread regen
  {
  byte  port;
  byte  Rel;
  byte  day, hour, min, second;
  long  time;

     stports.init();
     lcdext.init();

/*******************************************/
/********   ANSTEUERUNG LCD    *************/
/*******************************************/

     lcdext.line(2);
     lcdext.print("  TERRA: REGEN");
sleep 500;
     lcdext.clear();

/*******************************************/
/*********** Zeitschaltuhr Regen ***********/
/********Es wird jeden Tag geschaltet*******/
/*******************************************/

                loop

     {
     min  = system.minute();
wait system.minute() != min;
     time = system.hour()*100 + system.minute();
     day  = system.dow();

/**************************************************************/
/******** Zeitdefinition Stunden Minuten Sekunden *************/
/*** Ein 07:30:00 und 17:00:00 Aus 07:30:45 und 17:00:45 ******/
/**************************************************************/

if (time >= 0730  and time <= 0731) or (time >= 1700 and time <= 1701)

   stports.setRel(2,1);
else
   stports.setRel(2,0);
 };
release;
};


Danke GruÃ? Rene

> > Hallo Christian,
> >
> > > ich noch mal. Jetzt möchte ich einfach eine beliebige Anzahl von Minuten abziehen. Ich habe mal
> > > versucht die Funktion umzubauen. In Excel scheint es zu funzen.
> > >
> > >
> > > function subTime(int time, int minutes) returns int
> > > {
> > >   minutes= (time%100) - minutes;
> > >   return ((time/100 + minutes/60)%24)*100 + ((minutes*-1)%60);
> > >  }
> > >

> >
> > Für die Subtaktion brauchst Du einen Ansatz. Das einfachste ist, denen Zeitwert
> > in einen Time-Serial umzuwandeln.
> >
> > function subTime(int time, int minutes) returns int
> > {
> >  time=(((time/100)*60 + (time%100) - minutes;
> >  return (time/60)*100 + (time%60);
> > }

> >
> > Genaugenommen ist das sogar die bessere Variante, auch für die Addition:
> >
> > function addTime(int time, int minutes) returns int
> > {
> >  time=((time/100)*60 + (time%100) + minutes;
> >  return ((time/60)%24)*100 + (time%60);
> > }

> >
> > Hier kannst Du auch negative Werte angeben, so da� nur eine Funktion benötigt wird.
> > Allerdings gibt's noch ein kleines Problem. Den Tageswechsel bei einer Subtraktion.
> > Wenn Du nun von 0:30 Uhr  60 Minuten abziehst, erhälst Du -30 statt 23:30.
> > Hier kommt man um eine If-Abfrage (fast) nicht herum:
> >
> > function addTime(int time, int minutes) returns int
> > {
> >  time=((time/100)*60 + (time%100) + minutes;
> >  if time<0 time=1440+time;
> >  return ((time/60)%24)*100 + (time%60);
> > }

> >
> > Man kann natürlich immer 1440 Minuten hinzuaddieren. Dann spart man
> > sich die If-Abfrage. Durch die Moduludivision werden diese ggf. wieder ausgefiltert.
> >
> > MfG André H.
>
> Hallo André,
> Die Lösung mit nur einer Funktion ist klasse und funktioniert super. Besten Dank für die
> ausführlichen Erläuterungen. Ich glaub´ jetzt habe ich es verstanden.
> Jetzt kann ich mich dem nächsten Problem stellen....
>
> PS: Eine Klammer hinter dem Gleichheitszeichen ist zu viel :-)
>
> GruÃ?,
> ChristianS


    Antwort schreiben


Antworten: