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

Re: Sonnenauf- und untergang Kategorie: Programmierung (von Michael - 15.01.2005 19:26)
Als Antwort auf Re: Sonnenauf- und untergang von Hansi - 22.12.2004 22:30
Ich nutze:
C-Control II Unit, CC2-Application-Board, CC2-ReglerBoard, OSOPT V3.0
Danke.

Das nimmt mir mal wieder einige Arbeit ab.

GruĂ? Michael

> Hallo Thomas,
>
> ich habe zwar Formel noch nicht kontrolliert, aber eine Genauigkeit von +/- 5 Minuten sollte jedem
> reichen, ich werde Deinen Source bei mir zur Steuerung meiner Rolladaden verwenden.
>
> Danke!
>
> GruĂ? Hansi
>
>
>
> > Hallo zusammen,
> >
> > fĂĽr die eigene Haussteuerung mussten, damit die Rolladen bei Abwesenheit auf- und abfahren, die
> > Zeitpunkte der Morgen- und Abenddämmerung bestimmt werden.
> >
> > Angeregt durch das Programm zu Jalusie-Steuerung von Axel Rathey sowie der Formeldarstellung
> > unter http://lexikon.astronomie.info/zeitgleichung/ habe ich die Funktionen zur Berechnung von
> > Sonnenauf und -untergang sowie der verschiedenen Dämmerungszeitpunkte in ein Modul zusammen-
> > gefasst.
> >
> > sun.c2
> >
> > Aufruf: sun.rise_set (int day, float breitengrad, float laengengrad)
> >
> > day ist eine Zahl von 1 (1.Januar) bis 365 (31.Dezember) - wir als day Null ĂĽbergeben, so werden
> > die Werte fĂĽr den aktuellen Tag berechnet.
> >
> > Da in c2 keine komlexen Type als Return-Wert möglich sind, werden die Ergebnisse in sun.rs[]
> > gespeichert.
> >
> > Vielleicht kann es jemand gebrauchen.
> >
> > Beste GrĂĽĂ?e
> > Thomas
> >
> > Hier ein Testprogramm und nachfolgend das Modul:
> >
> > thread main {
> >   float Laenge, Breite;
> >   int Tage;
> >
> >   // Berechnung fuer heute
> >   Tage = 0;
> >
> >   // Koordinaten fuer Dortmund
> >   Laenge = 7.45;
> >   Breite = 51.53;
> >
> >   // Aufruf der Berechnung
> >   sun.rise_set (Tage, Breite, Laenge);
> >
> >   float auf, ab;
> >   int aufStd, aufMin, abStd, abMin;
> >   int i;
> >
> >
> >   // Die Ergebnisse stehen in sun.rs[i] fĂĽr
> >   // i=sun.tranit =  Transit,
> >   // i=civil = bĂĽrgerliche Dämmerung
> >   // i=nautical = nautische Dämmerung
> >   // i=astronomical = astronomische Dämmerung
> >  
> >   for i = sun.transit ... sun.astronomical {
> >     auf     = sun.rs[i].riseTime;
> >     ab      = sun.rs[i].setTime;
> >     aufStd  = sun.rs[i].riseHour;
> >     aufMin  = sun.rs[i].riseMinute;
> >     abStd   = sun.rs[i].setHour;
> >     abMin   = sun.rs[i].setMinute;
> >   }
> > }
> >

> >
> > Hier nur das Modul sun.c2:
> >
> > /********************************************************************
> >
> >     sun.c2
> >
> >     release    : 2004/12/15
> >     author     : Thomas Wahle
> >     based on : Axel Rathey, Dr. Roland Brobeck)
> >     requires   : math.c2, system.c2, myconst.c2
> >     version    : 0.1
> >     contents  : routine to calculate transit and twilight
> >    
> >     input:   day 1 = 01.01 ... 356 = 31.12
> >              current date is used if day is eq. 0
> >              latitude (grad)
> >              longitude (grad)
> >
> >     output:  sun.rs[i].riseTime   = sunrise as float
> >              sun.rs[i].setTime    = sunset as float
> >              sun.rs[i].riseHour   = sunrise hour as int
> >              sun.rs[i].riseMinute = sunrise minute as int
> >              sun.rs[i].setHour    = sunset hour as int
> >              sun.rs[i].setMinute  = sunset minute as int
> >              
> >              where i may be:
> >              sun.transit to get the transit
> >              sun.civil to get the civil twilight
> >              sun.nautical to get the nautical twilight
> >              sun.astronomical to get the astronomical twilight
> > ********************************************************************/

> >
> > // Constants for transit and twilight definitions
> > const transit = 0;
> > const civil = 1;
> > const nautical = 2;
> > const astronomical = 3;
> > const h[] = -0.0145444,  // transit
> >             -0.1047197,   // civil twilight
> >             -0.2094395,   // nautical twilight
> >             -0.3141592;   // astronomical twilight
> >
> > // Type to return sunset and sunrise
> > type stimeType {
> >   float riseTime;
> >   int riseHour;
> >   int riseMinute;
> >   float setTime;
> >   int setHour;
> >   int setMinute;
> > }
> >
> > stimeType rs[4];
> >
> > function rise_set (int day, float latitude, float longitude){
> >
> >   if day == 0 {
> >     int mcnt;
> >     for mcnt = 1 ... system.month()-1
> >       day = day + myconst.DOM[mcnt];
> >     day = day + system.day()+1;
> >   }
> >   // convert latizude from grad into rad
> >   latitude = latitude * constant.PI/180.0;
> >   float decl, eqTime, deltaTime;
> >   decl = 0.40954*math.sin(0.0172*(day-79.35));
> >   eqTime = -0.1752*math.sin(0.033430*day+0.5474)-0.1340*math.sin(0.018234*day-0.1939);
> >
> >   int time2utc;
> >   if system.dst() == 0
> >     time2utc = 1;
> >   else
> >     time2utc = 2;
> >  
> >   int i;
> >   for i = transit ... astronomical {
> >     deltaTime = 12*math.acos((math.sin(h[i])-math.sin(latitude)*math.sin(decl))/(math.cos(latitude)
> >        *math.cos(decl)))/constant.PI;
> >     rs[i].riseTime = 12 - deltaTime - eqTime - longitude /15 + time2utc;
> >     rs[i].setTime = 12 + deltaTime - eqTime - longitude /15 + time2utc;
> >     rs[i].riseHour = rs[i].riseTime;
> >     rs[i].riseMinute = (rs[i].riseTime-rs[i].riseHour)*60;
> >     rs[i].setHour = rs[i].setTime;
> >     rs[i].setMinute = (rs[i].setTime-rs[i].setHour)*60;
> >   }
> > }
> >

> >


    Antwort schreiben


Antworten: