Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 6 von 6

Thema: Schneider Unity Pro XL: Unix Zeitstempel in Datum/Zeit Format bringen

  1. #1
    Registriert seit
    22.04.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich bekomme einen Zeitstempel als Unixzeit, z.B.: 1470211418

    Wie kann ich diese Unixzeit in ein Format 'TT-MM-JJJJ hh:mm:ss' überführen.

    Mit DATE_AND_TIME (DT) komme ich hier nicht weiter.

    Gruß
    Zitieren Zitieren Schneider Unity Pro XL: Unix Zeitstempel in Datum/Zeit Format bringen  

  2. #2
    Registriert seit
    14.11.2014
    Beiträge
    9
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ein paar mehr Details wären nicht schlecht (Unity Version, welche Hardware, welche Programmiersprache etc.)
    Bzw. wo ist das genaue Problem??
    Weisst Du nicht wie Du die Zeit aus SPS ausliest? Hast Du die Zeit, weißt aber nicht wie Du sie konvertieren kannst?

    Mit DT hast Du ja im Prinzip das Format JJJJ-MM-TT-hh:mm:ss (z.B. DT#1990-10-2-12:02:30 )
    Mit der Funktion DT_TO_STRING kannst Du auch in eine Zeichenkette konvertieren.

    Die aktuellen Werte der Echtzeituhr liegen in der Regel in Systemwörtern ab (z.B. %SW48 bis %SW53)

  3. #3
    00.Schneider ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    22.04.2016
    Beiträge
    2
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Koerg,

    Version: Unity Pro XL Version 10.0
    Hardware: TSX RKY 6EX, TSX PSY 2600M, TSX P57 5634M
    Programmiersprache: ST

    Ich will nicht die SPS-Zeit auslesen, sondern bekomme über Ethernet Datenaustausch einen Zeitstempel als Unixzeit (die Sekunden ab 01.01.1970 00:00:00).

    Diesen versuche ich in ein lesbares Zeitformat zu konvertieren.

  4. #4
    Registriert seit
    25.02.2010
    Beiträge
    492
    Danke
    27
    Erhielt 97 Danke für 88 Beiträge

    Standard

    Hallo Schneider.
    Erstmal ein paar Grundsätzliche Gedanken

    Unixzeit beginnt am 01.01.1970 00:00:00 und endet am 19.01.2038 mit einer Zeitbasis von 1 Sekunde
    Unityzeit beginnt am 01.01.1990 00:00:00 mit einer Zeitbasis von 1 Millisekunde
    alle Rechenoperationen im Zusammenhang der Zeit in Unity enden mit einer Variable vom Type "TIME" (UDINT) In ihr sind maximal 49 Tage darstellbar.
    Unity stellt nicht in allen Versionen und allen Plattformen einen LINT (64 bit zur Verfügung)

    Da die Unix Zeit schon weit vorangeschritten ist, kannst du aber nicht mehr in DINT rechnen.
    UnixZeit * 1000 (für mSek in DT) würde DINT überschreiten.

    Eine Möglichkeit die mir eingefallen ist, ist die Berechnung einer Referenzzeit in Unix, so dass man auf vernünftige Zahlen kommt.
    Diese Referenzzeit sollte nicht weiter als 49 Tage von der zu erwartenden Zeit von Unix entfernt sein.

    Code:
    1.  Auslesen der aktuellen DT (2016-08-04-15:30:00)
    2.. Tag, Monat & Jahr merken
    3. Referenzzeit basteln in DT (2016-08-01-00:00:00)
    4. Von dieser Referenzzeit die UnixZeit bestimmen
    
    Code:
    2016 - 1970 = Anzahl Jahre (46)
    Anzahl Jahre / 4 = Anzahl Schaltjahre (11)
    Differenzzeit Jahre = Anzahl Jahre * 365 * 86400 (Ergibt die Differenz in Sekunden)
    Differenz2 = (Anzahl Schaltjahre + Tag des Referenzdatums (1.8. = 213) ) * 86400 
    (Ist  das aktuelle Jahr ein Schaltjahr und befindet sich das Referenzdatum  nach dem 29.02. muss der Tag mit berücksichtigt werden)
    Unixreferenz = Differenz Jahre + Differenz2 (1470009600)
    
    Unixdifferenz (=201818) = Unixzeit (=1470211418) - Unixreferenz (=1470009600)
    Unixdifferenz * 1000 -> konvertiert nach Zeit = 2d_8h_3_m_38s -> Addiert zur Referenzzeit = 2016-08-03-08:03:38
    Da die Unixzeit immer UTC ist noch 2h drauf für die Lokalzeit
    Bleibt noch das Jahr 2038 Problem

    Holger

  5. #5
    Registriert seit
    14.11.2014
    Beiträge
    9
    Danke
    1
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Ui, puh, also...

    das ist tatsächlich nicht so trivial. So spontan gibt es dafür nichts in Unity.

    Und eine Umrechnung ist tatsächlich nicht so einfach. Wenn man die Schaltjahre seit 1970, die verschiedenen Monatslängen generell, die UTC usw. berücksichtigen muss.

    Die Idee von holgermaik mit der Referenzzeit könnte ein vielversprechender Ansatz sein, etwas einfacheres zu programmieren. Wenn man aber bedenkt das die Anlage ein paar Jahre laufen soll, wird das auch immer komplizierter oder man müsste mit mehreren Referenzzeiten arbeiten, die man sich vorher berechnet und im Programm als Konstanten quasi hinterlegt.

    Hättest Du denn Einfluss auf die Gegenseite, die die Zeit über Ethernet sendet? Vielleicht ist es dort einfacher in DATE_AND_TIME (viele Plattformen können das in diese Richtung von haus aus) zu konvertieren und das dann als Array oder so per Ethernet zu senden..... Nur mal so als vielleicht pragmatischer Ansatz.

  6. #6
    Registriert seit
    25.02.2010
    Beiträge
    492
    Danke
    27
    Erhielt 97 Danke für 88 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Da mich das Problem interessiert hat, habe ich mal einen DFB gemacht. Für alle ohne Unity ist ein Ausdruck dabei.
    Warum in FUP? - Weil es viele User gibt, die ausschließlich in FUP programmieren.

    Holger
    Anhang 33594
    Angehängte Dateien Angehängte Dateien
    Geändert von holgermaik (06.08.2016 um 05:16 Uhr) Grund: Falsche Anhänge hochgeladen

  7. Folgende 2 Benutzer sagen Danke zu holgermaik für den nützlichen Beitrag:

    Bl000b3r (09.08.2016),Koerg (06.08.2016)

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 04.08.2016, 20:24
  2. Step 7 Unix Zeit
    Von jens1987 im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 21.04.2016, 20:55
  3. Step 7 Umwandlung von EIB/KNX Datum und Zeit in Step7 Format
    Von emis80 im Forum Simatic
    Antworten: 16
    Letzter Beitrag: 17.06.2013, 20:48
  4. Schneider Electric M340 über das Internet mit Unity Pro verbinden
    Von skyracer im Forum Sonstige Steuerungen
    Antworten: 3
    Letzter Beitrag: 03.04.2013, 11:54
  5. Unity Pro - Schneider
    Von Koopi im Forum Sonstige Steuerungen
    Antworten: 4
    Letzter Beitrag: 11.03.2008, 11:25

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •