Autor Thema: Funktion 'year' liefert ständig 1970..!?  (Gelesen 7838 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

StefanK

  • Gast
Funktion 'year' liefert ständig 1970..!?
« am: 04. Juli 2007, 02:36:38 »
Hallo,
erstmal Lob und Dank an Oskat.

Aber die Funktion 'year' währe genau das richtige, was ich jetzt benötige, doch leider liefert mir die Funktion immer das Jahr 1970.
Ich habe es auf einer älteren 315 und im Plcsim getestet, leider ohne Erfolg. Hat jemand 'ne Idee..??

Danke im voraus

Gruß

Stefan

StefanK

  • Gast
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #1 am: 04. Juli 2007, 12:30:35 »
Außerdem...
in der Funktion steht:

// returs the year of a date 
// the function works for dates from 1970 - 2099

??? der Datentyp DATE beginnt erst bei: 1990-1-1:


Datentyp   Länge (Bit)   Format   Beispiele für das Format
Min.   Max.
DATE   16   Jahr-Monat-Tag   D#1990-01-01   D#2168-12-31

??????????????????????????????????????????????????????????????????????

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #2 am: 04. Juli 2007, 15:02:15 »
das problem ist klar, die funktion wurde streng nach der norm IEC61131-3 geschrieben und die schreibt ein datum als sekunden seit 1.1.1970 vor.
das sich die fa. siemens nicht an den standard hält kann diese funktion nicht funktionieren.
das datumsformat nach iec61131-3 entspricht übrigens dem von unix.
die übersetzung auf siemens machen wir nicht selbt weil wir keine s7 entwicklungsumgebeung haben.
du kannst den fehler beheben wenn du das datum nach siemens umwandelst in ein datum nach iec61131-3 dann funktiioniert year auch einwandfrei.

StefanK

  • Gast
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #3 am: 05. Juli 2007, 13:24:21 »
Danke, is klar...

das heißt: wenn du möchtest das etwas funktioniert, mach's selber....!!!

Hier der SCL- Quellcode der funktioniert...

FUNCTION year : INT
TITLE = 'year'
// gibt das Jahr eines Datentyps DATE zurück

VERSION : '1.0'
AUTHOR  : SKSE
NAME    : YEAR
FAMILY  : Lib03

VAR_INPUT
    idate : DATE;
END_VAR

VAR
END_VAR

VAR_TEMP
  dDate : DINT ;

END_VAR

  year := DINT_TO_INT((((100 * DATE_TO_DINT (idate)) + 50) / 36525) + 1990) ;
                                                                                                                                     
END_FUNCTION




PS: Habe leider keinen Hinweis gefunden, in dem steht, das die S7- Lib nicht wirklich funktioniert. Habe mich wohl von den Kommentare 'getestet von...' in den Quellen blenden lassen.

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #4 am: 05. Juli 2007, 15:25:43 »
ich gebe dir recht das ist nicht gut und es muss auch schnell geändert werden.
wir testen und entwickeln alles auf codesys und sind bisher auf fremde hilfe angewiesen die s7 übersetzungen zu machen.
ich hoffe wir finden bald eine lösung für die s7 lib.

StefanK

  • Gast
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #5 am: 09. Juli 2007, 21:03:52 »
nun denn.....

Ich möchte aber nochmal alle beteiligten für diese Lib danken und loben.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vielleicht gibt es ja eine Möglichkeit, das die Leute, die diese Lib nutzen sie halt auch testen und Korrekturen zurück posten um die Lib zu verbessern.

Ich bin selbstständiger Softwareentwickler, sehr froh das diese Lib existiert und bereit die von mir genutzten Quellen, wenn eine Korrektur notwendig war, zurück zu senden.

Weiter so, gruß
Stefan

Offline hugo

  • Global Moderator
  • *****
  • Beiträge: 2 150
    • Profil anzeigen
Re: Funktion 'year' liefert ständig 1970..!?
« Antwort #6 am: 09. Juli 2007, 21:21:33 »
danke wir sind für jede rückmeldung dankbar und werden unser bestes geben möglichst fehlerfrien code zu entwickeln.