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

Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 32 von 32

Thema: Uhrzeitsyncro - Fehler bei vollen Zahlen

  1. #31
    Registriert seit
    23.07.2009
    Ort
    Österreich
    Beiträge
    2.214
    Danke
    430
    Erhielt 650 Danke für 490 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ähm... Du weißt schon das WinCC einen DATE_AND_TIME komplett auf Gültigkeit prüft oder?

    Das einfache erhöhen einer Stunde geht eigentlich immer, solange der Wert zwichen 0..23 bleibt, geht.
    Code:
     CALL  "READ_CLK"                  //Systemzeit CPU - UTC (gültig und vollständig)
           RET_VAL:=#iINT
           CDT    :="DbSysTime".DT_A        //DB1.DBB0
    
    //Stunde
          L     DB1.DBB    3                //Geht solange die CPU-Stunde <= 22
          BTI                               //Das Datum bleibt bei überschreiten von 23 logischerweies unverändert
          +     1
          ITB   
          T     DB1.DBB    3
    Das geht bei mir im Simulator mit ner 315 und nem MP370 Problemlos.
    In deinem kurzen Code-Beispiel, wo du was ähnliches zeigst, kann ich leider nicht sehen wo die restlichen Teile herkommen.
    Im Simulator sehe ich dann auch das der Zeitstempel als "######" angezeigt wird, sobald irgend ein Teil davon nicht mehr passt.

    Das andere Beispiel in dem du einfach versuchst den Tag im Datum zu ändern, kann nicht gehen.
    Denn dann passt der in Byte8 eingetragene Wochentag nicht mehr dazu.
    Code:
          CALL  "READ_CLK"                  //Systemzeit CPU - UTC
           RET_VAL:=#iINT
           CDT    :="DbSysTime".DT_A        //DB1.DBB0
    
    //Datum-Tag
          L     12                          //Geht so gut wie nie
          ITB                               //Das Datum pass nicht mehr zum Wocchentag im Byte8
          T     DB1.DBB    2
    
          L     DB1.DBB    8                //Wenn man den Wochentag entsprechend korrigiert, dann passt es wieder
          UW    W#16#F0
          L     6                           //Der 12.08.2016 war ein Freitag
          OW    
          T     DB1.DBB    8
    Aber was hilft dir das?
    Du möchtest ja einen DATE_AND_TIME von UTC auf CEST bringen.
    Das heißt dass nicht nur die Stunde addiert werden muss, sondern eventuell auch eine Anpassung von Tag, Monat oder Jahr erforderlich ist.
    Den Wochentag zum passenden Datum musst du auch errechnen. Schon kompliziert.

    Wenn man was zu nem DT addieren will nimmt man die fertige Funktion "AD_DT_TM" aus der Standard-Bibliothek welche all das richtig macht.
    Code:
    CALL  "READ_CLK"                  //Systemzeit CPU - UTC
           RET_VAL:=#iINT
           CDT    :="DbSysTime".DT_A
    
          CALL  "AD_DT_TM"
           T      :="DbSysTime".DT_A        //UTC
           D      :=T#2H
           RET_VAL:="DbSysTime".DT_B        //UTC+2
    Um damit aus deiner NTP-Zeit (UTC und gleich CP-Systemzeit) die CEST zu bekommen, musst du natürlich wissen ob jetzt Sommerzeit ist oder nicht.

    Meiner Meinung nach, zumindest was ich verstanden habe, ist folgendes der einfachste Weg für dich.
    • 2 DT-Variablen einmal für die UTC und einmal für die CEST.
    • Die UTC-Variable wird zyklisch vom READ_CLK mit Systemzeit (UTC) beschrieben.
    • Diese Variable fütterst du dann in den Baustein BT_LT_3 von PN/DP (gibt's hier zum Download)
    • Am Ausgang kommt die Zeit richtig als CEST raus, welche du dann auf die zweite DT-Variable schreibst.

    Der Baustein von PN/DP berechnet auf Grund des Eingangszeitstempels in UTC ob gerade Sommer- oder Winterzeit herrscht, addiert dann mit AD_DT_TM entweder T#1h oder T#2h und schiebt den Zeitstempel auf den Ausgang.
    Geändert von RONIN (17.08.2016 um 07:54 Uhr)
    If at first you don't succeed, you're not Van Damme!
    ... or maybe using TIA!

  2. #32
    Registriert seit
    07.10.2010
    Beiträge
    44
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    jo, danke dafür. Genau der fc1 Baustein aus der Std library war die Lösung. Und nu ist es viel sauberer... Danke für die super Antwort, echt klasse.

Ähnliche Themen

  1. Step 7 Problem bei Berechnung von REAL Zahlen
    Von Erema im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 30.05.2015, 13:04
  2. exponentielle Zahlen verursachen Fehler
    Von Stromtier im Forum CODESYS und IEC61131
    Antworten: 3
    Letzter Beitrag: 02.02.2014, 11:16
  3. nicht vollen Zugriff im Logomenü
    Von ouzo im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 08.02.2013, 10:35
  4. Wandeln von IEEE 754 Zahlen bei der Modbus-RTU Biliothek
    Von WaEv im Forum CODESYS und IEC61131
    Antworten: 0
    Letzter Beitrag: 14.01.2010, 19:26
  5. Impuls zur vollen Stunde
    Von thotrix im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 12.12.2006, 09:57

Lesezeichen

Berechtigungen

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