Algorithmus für Sonnenauf/-untergang für S5

Miha

Level-1
Beiträge
9
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
hat jemand von euch den Algorithmus des Astrotimers (Berrechnung des Sonnenaufgangs und des Sonnenuntergangs aus der akt. Zeit und Datum) schon mal für S5-95U umgesetzt und könnte mir dies zur Verfügung stellen? Kenne die Funktion aus der OSCAT.lib - CoDeSys (Sun_Time) - tue mir aber sehr schwer dies ohne strukt. Text und mit altem Gerät umzusetzen.
Evtl. auch die Funktion zur Berrechnung von Feiertagen (Holiday)?

Bin für jede Hilfe dankbar !
 
Hallo du kennst ja die funktionen in oscat, ich kenne selbst die soiemens entwicklungsumgebung nicht.
aber unter codesys kann ich per knopfdruch zwischen den verschiedenen sprachen übersetzen. sowas gibts sicher auch bei siemens.
ich könnte zwar das ganze im codesys nach awl wndeln ist lediglich ein knopfdruck ob es dir aber hilft weis ich nicht. hier der baustein sun_time in awl wie ihn codesys auf knopfdruck umwandelt.



(* @PATH := '' *)
(* @SYMFILEFLAGS := '2048' *)
FUNCTION_BLOCK awl_sun_time
VAR_INPUT
latitude : REAL; (* latitude of geographical position *)
longitude : REAL; (* longitude of geographical position *)
utc : DT; (* world time *)
END_VAR
VAR_OUTPUT
sun_midday : TOD; (* astrological midday in hours when sun stand at south direction *)
sun_rise : TOD; (* sun rise for current day in local time *)
sun_set : TOD; (* sun set for current day in local time *)
sun_declination : REAL; (* sun declination at midday in degrees *)
END_VAR
VAR
T: INT; (* day in the year *)
DK: REAL; (* sun declination at midday *)
delta: REAL; (* delta from midday for sunrise and sunset *)
h: REAL;
B: REAL;
offset : REAL;
END_VAR

(*
version 1.2 17 apr 2007
programmer hugo
tested by tobias

this FUNCTION block calculates the sun rise, sun set, sun offset at midday sun declination for a given date
for performance reasons the algorithm has been simplified and is accurate within a few minutes only
the times are calculated in utc and have to be corrected for the given time zone
this correction is not done within sun_time because it would be a problem on days where dst is enabled or disabled

execution time on wago 750-841 is 30 us
*)
VAR
_REAL_0:REAL;
_REAL_1:REAL;
_LREAL_0:LREAL;

END_VAR

(* @END_DECLARATION := '0' *)
LD latitude
Rad
ST B

LD -0.0145
ST h

LD utc
DT_TO_DATE
day_of_year
ST T

LD 0.018234
MUL T
SUB 0.1939
SIN
ST _REAL_0
LD 0.1340
MUL _REAL_0
ST _LREAL_0
LD 0.033430
MUL T
ADD 0.5474
SIN
ST _REAL_0
LD -0.1752
MUL _REAL_0
SUB _LREAL_0
ST offset

LD longitude
DIV 15
ST _REAL_0
LD 12
ADD offset
SUB _REAL_0
hour_to_tod
ST sun_midday

LD T
SUB 79.35
ST _LREAL_0
LD 0.0172
MUL _LREAL_0
SIN
ST _REAL_0
LD 0.40954
MUL _REAL_0
ST DK

LD DK
deg
ST sun_declination

LD DK
COS
ST _REAL_0
LD B
COS
MUL _REAL_0
ST _REAL_0
LD DK
SIN
ST _REAL_1
LD B
SIN
MUL _REAL_1
ST _REAL_1
LD h
SIN
SUB _REAL_1
DIV _REAL_0
ACOS
ST _REAL_0
LD 12
MUL _REAL_0
DIV PI
ST delta

LD longitude
DIV 15
ST _REAL_0
LD 12
SUB delta
SUB offset
SUB _REAL_0
hour_to_tod
ST sun_rise

LD longitude
DIV 15
ST _REAL_0
LD 12
ADD delta

SUB offset
SUB _REAL_0
hour_to_tod
ST sun_set


END_FUNCTION_BLOCK
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@hugo: Ist sicher lieb von Dir gemeint. Aber viele S5 Steuerungen können von Haus aus nicht mal die vier Grundrechenarten komplett.
 
Zuletzt bearbeitet:
Hallo,
hat jemand von euch den Algorithmus des Astrotimers (Berrechnung des Sonnenaufgangs und des Sonnenuntergangs aus der akt. Zeit und Datum) schon mal für S5-95U umgesetzt und könnte mir dies zur Verfügung stellen? Kenne die Funktion aus der OSCAT.lib - CoDeSys (Sun_Time) - tue mir aber sehr schwer dies ohne strukt. Text und mit altem Gerät umzusetzen.

Code:
* @PATH := '\/Time&Date' *)
FUNCTION_BLOCK sun_time
TITLE = 'sun_time'
//
// this FUNCTION block calculates the sun rise, sun set, sun offset at midday sun declination for a given date 
// for performance reasons the algorithm has been simplified and is accurate within a few minutes only 
// the times are calculated in utc and have to be corrected for the given time zone
// this correction is not done within sun_time because it would be a problem on days where dst is enabled or disabled
//
// Uses: oscat/Time&Date/hour_to_tod
//       oscat/Time&Date/day_of_year
//       S7/Standard Library/IEC Function Blocks/D_TOD_DT
//       S7/Standard Library/IEC Function Blocks/DT_DATE
//
VERSION : '1.2'
AUTHOR  : hugo
NAME    : SUNTIME
FAMILY  : TIDT
VAR_INPUT
    latitude : REAL;                (* latitude of geographical position  *)
    longitude : REAL;               (* longitude of geographical position  *)
    utc : DT;                       (*  world time              *)
END_VAR
VAR_OUTPUT
    sun_midday : TOD;           (*  astrological midday in hours when sun stand at south direction  *)
    sun_rise : TOD;             (*  sun rise for current day in local time *)
    sun_set : TOD;              (*  sun set for current day in local time *)
    sun_declination : REAL;       (*  sun declination at midday in degrees    *)
END_VAR
VAR
    T: INT;                         (* day in the year   *)
    DK: REAL;                       (* sun declination at midday *)
    delta: REAL;                    (* delta from midday for sunrise and sunset  *)
    h: REAL;
    B: REAL;
    offset : REAL;
END_VAR
CONST
    PI := 3.14159265;
END_CONST
(*
    version 1.2    17 apr 2007
    programmer     hugo
    tested by      Bitverbieger
*)
B := 0.0174532925199433 * latitude;
h := -0.0145;
T := day_of_year(DT_DATE(utc));
offset := -0.1752 * SIN(0.033430*T + 0.5474) - 0.1340*SIN(0.018234*T - 0.1939);
sun_midday := hour_to_tod(12+Offset);
DK := 0.40954 * SIN(0.0172 * (T-79.35));
sun_declination := 57.29577951308232 * DK; //deg(DK);
delta := 12*ACOS((SIN(h) - SIN(B) * SIN(DK)) / (COS(B) * COS(DK)))/PI;
sun_rise := hour_to_tod(12 - delta - offset - longitude/15);
sun_set := hour_to_tod(12 + delta - offset - longitude/15);
(* revision history
rev 1.1    hm    20.1.2007
    deleted unused variables sun_rineR and sun_setR
rev 1.2 hm 17.4.2007
    coorected error while sun:midday would not be corrected for longitude.
*)
END_FUNCTION_BLOCK

Die Funktion Sun_Time aus der OSCAT.lib rechnet mit Gleitpunktzahlen sowie diversen Winkelfunktionen (Sinus, Cosinus, Arkuscosinus).

Die S5-95U kann weder mit Gleitpunktzahlen noch mit Winkelfunktionen (Sinus, Cosinus, Arkuscosinus) rechnen.

Ich glaube also nicht, dass Du die Funktion Sun_Time auf einer S5-95U zum laufen bekommst.

Gruß Kai
 
uups sorry und ich dachte immer meine 32bit steuerung ist das unterste ende der fahnenstange. man lernt eben nie aus.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
eigentlich schade...
- oder hat sich doch jemand schlaues die Mühe gemacht ?
Wenn nicht bleibt mir wohl nichts anderes übrig als was moderneres einzusetzen - aber bestimmt nix vom großen "S"
 
Zurück
Oben