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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Automatische Umstellung Sommer-/Winterzeit

  1. #1
    Registriert seit
    17.12.2010
    Beiträge
    17
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich erhalte vom Kunden über den NTP-Server Datum und Uhrzeit(aber keine Umschaltung auf Sommerzeit).
    Wie kann ich die CPU-Zeit automatisch auf Sommer- und Winterzeit umstellen.
    Die Hardware: CPU 414F-3 PN/DP mit CP443-1 für die Zeitsynchronisation.

    Kann mir bitte jemand helfen.

    Danke
    Artur
    Zitieren Zitieren Automatische Umstellung Sommer-/Winterzeit  

  2. #2
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hi
    Schau mal in OSCAT rein
    In den Zeitfunktionen gibt es ein DST, das macht das gewünschte...
    LG
    Shrimps

  3. #3
    artur ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.12.2010
    Beiträge
    17
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    habe ich nicht gefunden, trotzdem Danke

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.190
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Wenn die CPU-Uhr per NTP synchronisiert wird, dann ist es ziemlich sinnfrei, die Uhr auf Sommerzeit umzustellen, weil sie bei der nächsten Synchronisation wieder auf Winterzeit eingestellt wird...

    Laß die Uhr in Winterzeit laufen und berechne die aktuelle Lokalzeit (Winterzeit/Sommerzeit) für Anzeigezwecke (?), z.B. mit dem FC61 BT_LT (Standard Library > Miscellaneous Blocks)

    Wie kann die aktuelle Lokalzeit (Sommer- bzw. Winterzeit) in der S7-300/400 CPU berechnet und auf dem Panel als Systemzeit verwendet werden?


    Ich benutze einen selbstgeschriebenen Ersatz für den pompösen FC61, welcher ohne Regel-DB auskommt und fest auf Mitteleuropäische Zeit (CET/CEST) eingestellt ist. Hier die Version, wenn die CPU-Uhr mit einem Zeitzonenversatz in CET (UTC+1) läuft (wenn im CPx43-1 ein Zeitzonenversatz eingestellt ist):
    Code:
    FUNCTION "BT_LT_3" : VOID
    TITLE =BT_LT_3: Convert base time to local time (Summertime/Wintertime)
    //Ersatz für FC61 BT_LT aus der S7-Standard-Library auf S7-300, die keinen 
    //Uhrzeitstatus besitzen (Im Uhrzeitstatus der CPU sind die Basiszeit sowie 
    //die für den jeweiligen Ort geltende Zeitzone, eine Sommerzeit-Kennung sowie 
    //eine Kennung für die Ankündigungsstunde hinterlegt und werden von der CPU 
    //aktualisiert.) BT_LT_3 benutzt keinen Regel-DB.
    //
    //Typisches Szenario:
    //Eine S7-300-CPU besitzt keinen Uhrzeitstatus, die CPU-Uhr ist nach der lokalen 
    //Normalzeit (Winterzeit) gestellt und ggf. nach NTP-Verfahren synchronisiert.
    //BT_LT_3 ermittelt, ob der am Eingang BT angegebene Zeitpunkt in der Sommerzeit 
    //liegt und gibt am Ausgang LT die ggf. als Sommerzeit korrigierte lokale Uhrzeit 
    //aus. BT muß ein gültiges DATE_AND_TIME inkl. Wochentag sein.
    //
    //BT_LT_3 berücksichtigt keine Zeitzone, sondern nur den Uhrzeit-Versatz in 
    //der Sommerzeit. Die Sommerzeit gilt vom letzten Sonntag im März 02:00 BT 
    //bis zum letzten Sonntag im Oktober 02:00 BT (03:00 ST).
    //BT_LT_3 benutzt intern die folgende Funktion der S7-Standard-Library – 
    //IEC Function Blocks: FC(1) AD_DT_TM
    AUTHOR : PN_DP
    FAMILY : TIMEFUNC
    NAME : BT_LT_3
    VERSION : 1.0
    
    VAR_INPUT
      BT : DATE_AND_TIME ;       //Basiszeit (z.B. CPU-Clock)
    END_VAR
    VAR_OUTPUT
      LT : DATE_AND_TIME ;       //Lokalzeit
      SUMMER : BOOL ;            //Sommerzeitkennung (0: Winter / 1: Sommer)
    END_VAR
    VAR_TEMP
      AR1_Save : DWORD ;
      AR2_Save : DWORD ;
      tmpBT : DATE_AND_TIME ;
      tmpLT : DATE_AND_TIME ;
      DB_No : INT ;
      LT_Offset : TIME ;
      March : BOOL ;
    END_VAR
    BEGIN
    NETWORK
    TITLE =Basiszeit von IN-Aktualparameter BT in TEMP kopieren
    //DATE_AND_TIME (DT) wird bei FC als 6-Byte-POINTER übergeben und kann nicht 
    //direkt weitergereicht werden. Deshalb IN.BT nach TEMP umkopieren.
    
    //Adressregister sichern
          TAR1  #AR1_Save;
          TAR2  #AR2_Save;
    
    //Pointer auf IN-Aktualparameter BT erstellen
          L     P##BT;             // Adresse IN.BT
          LAR1  ;
          L     W [AR1,P#0.0];     // POINTER.DB_Nr
          T     #DB_No;
          L     D [AR1,P#2.0];     // POINTER.Bereichsadresse
          LAR1  ;                  // AR1: Adresse des IN-DT
          LAR2  P##tmpBT;          // AR2: Adresse des TEMP-DT
    
    //DATE_AND_TIME (8 Byte) BT von IN nach TEMP kopieren
          AUF   DB [#DB_No];
          L     D [AR1,P#0.0];
          T     LD [AR2,P#0.0];
          L     D [AR1,P#4.0];
          T     LD [AR2,P#4.0];
    
    NETWORK
    TITLE =Ermitteln ob Sommerzeit ist und Lokalzeit berechnen
    //Die Sommerzeit gilt vom letzten Sonntag im März 02:00 BT 
    //bis zum letzten Sonntag im Oktober 02:00 BT (03:00 ST)
    
    //AR2: Pointer auf tmpBT
    
    //Der letzte Sonntag im März bzw. Oktober kann auf 25. bis 31. fallen
    //vor 25.03. ist Winterzeit
          L     LW [AR2,P#1.0];    // tmpBT.Monat (BCD) + Tag (BCD)
          L     DW#16#325;         // vor 25.03. ist WZ
          <I    ;
          SPB   WINZ;
    
    //nach 31.10. ist Winterzeit
          POP   ;                  // tmpBT.Monat (BCD) + Tag (BCD)
          L     W#16#1031;         // nach 31.10. ist WZ
          >I    ;
          SPB   WINZ;
    
    //nach 31.03. (= 01.04.) bis vor 25.10. (= 24.10.) ist Sommerzeit
          POP   ;                  // tmpBT.Monat (BCD) + Tag (BCD)
          L     W#16#331;          // bis 31.03. Umschaltwoche zu SZ
          <=I   ;
          =     #March;            // Umschaltwoche WZ zu SZ
          SPB   SPEZ;
    
          POP   ;                  // tmpBT.Monat (BCD) + Tag (BCD)
          L     W#16#1025;         // bis vor 25.10. ist SZ
          <I    ;
          SPB   SOMZ;
    
    //hier nur noch 25.03.-31.03. und 25.10.-31.10.
    //letzter Sonntag ?
    SPEZ: L     LB [AR2,P#7.0];    // tmpBT.Wochentag 1=So ... 7=Sa
          UW    W#16#F;            // nur Bits .0-.3 (4 LSB)
          L     B#16#1;
          -I    ;                  // WoT: 0=So, 1=Mo, ... 6=Sa
          SPZ   SONN;              // jetzt ist der Umschalt-Sonntag
    //Akku1: Wochentag 0=So ... 6=Sa
          L     LB [AR2,P#2.0];    // tmpBT.Tag (BCD)
          BTI   ;                  // Tag (INT)
          TAK   ;                  // Akku1: WoT, Akku2: Tag
          -I    ;
    //Ergebnis 19..24 sind Tage vor Umschalt-Sonntag
          L     25;
          <I    ;
          SPBN  NACH;
    
    //Vor Umschalt-Tag bzw. -Uhrzeit
    VOR:  U     #March;
          SPB   WINZ;              // März: noch ist Winterzeit
          SPA   SOMZ;              // Okt.: noch ist Sommerzeit
    
    //Nach Umschalt-Tag bzw. -Uhrzeit
    NACH: U     #March;
          SPB   SOMZ;              // März: nun ist Sommerzeit
          SPA   WINZ;              // Okt.: nun ist Winterzeit
    
    //es ist jetzt der Umschalt-Sonntag
    SONN: L     LB [AR2,P#3.0];    // tmpBT.Stunde (BCD)
          L     B#16#2;            // vor 02:00 Uhr?
          <I    ;
          SPB   VOR;
          SPA   NACH;
    
    //Signalisierung Sommerzeit oder Winterzeit
    SOMZ: S     #SUMMER;
          L     T#1H;              // 1 Stunde Zeitdifferenz SZ-WZ
          SPA   TLTO;
    
    WINZ: R     #SUMMER;
          L     T#0MS;             // Winterzeit ist Basiszeit
    
    TLTO: T     #LT_Offset;
    
    //Lokalzeit berechnen
          CALL "AD_DT_TM" (
               T       := #tmpBT,
               D       := #LT_Offset,
               RET_VAL := #tmpLT);
    
    NETWORK
    TITLE =Lokalzeit von TEMP in OUT-Aktualparameter LT kopieren
    //DATE_AND_TIME (DT) wird bei FC als 6-Byte-POINTER übergeben, OUT kann nicht 
    //direkt von anderen FC beschrieben werden. Deshalb mit TEMP-Kopie arbeiten.
    
    //Pointer auf OUT-Aktualparameter LT erstellen
          L     P##LT;             // Adresse OUT.LT
          LAR1  ;
          L     W [AR1,P#0.0];     // POINTER.DB_Nr
          T     #DB_No;
          L     D [AR1,P#2.0];     // POINTER.Bereichsadresse
          LAR1  ;                  // AR1: Adresse des OUT-DT
          LAR2  P##tmpLT;          // AR2: Adresse des TEMP-DT
    
    //DATE_AND_TIME (8 Byte) LT von TEMP nach OUT kopieren
          AUF   DB [#DB_No];
          L     LD [AR2,P#0.0];
          T     D [AR1,P#0.0];
          L     LD [AR2,P#4.0];
          T     D [AR1,P#4.0];
    
    //Adressregister wiederherstellen + BIE/ENO auf TRUE setzen
          LAR1  #AR1_Save;
          LAR2  #AR2_Save;
          SET   ;
          SAVE  ;
    
    END_FUNCTION
    Der Baustein benötigt den FC AD_DT_TM aus der Standard Library > IEC Function Blocks

    Und hier die Version BT_LT_3_CET für (PN-)CPUs, wo die CPU-Uhr ohne Zeitzonenversatz in UTC läuft.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    artur ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.12.2010
    Beiträge
    17
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke Harald

  6. #6
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hallo Artur,
    nur der vollständigkeit halber:
    OSCAT BASIC333:
    LG
    Shrimps

    ########## zitat Seite 125 :#########
    12.13. DST
    Type Funktion : BOOL
    Input UTC : DATE_TIME (Weltzeit)
    Output BOOL (TRUE, wenn Sommerzeit)
    Die Funktion DST überprüft, ob im Augenblick Sommerzeit herrscht, oder
    nicht. Sie kann dazu benutzt werden eine vorhandene nicht-Sommerzeit
    fähige Uhr sekundengenau auf Sommer- und Winterzeit umzustellen.
    Die Funktion DST schaltet am letzten Sonntag des März um 01:00 UTC
    (02:00 MEZ) auf Sommerzeit (03:00 MESZ) und am letzten Sonntag des
    Oktober um 01:00 UTC (03:00 MESZ) auf 02:00 MEZ zurück. Der Ausgang
    von DST ist dann TRUE, wenn Sommerzeit herrscht.
    Die Sommerzeit wird aufgrund von UTC (Weltzeit) berechnet. Eine Berechnung
    von Ortszeit nach Sommerzeit ist generell nicht möglich weil im letzten
    Sonntag des Oktobers die Stunde von 02:00 - 03:00 MEZ beziehungsweise
    MESZ doppelt existiert. Die Sommerzeit wird in allen Ländern der EU
    seit 1992 zur selben Sekunde nach Weltzeit umgestellt. In Mitteleuropa
    um 02:00, in England um 01:00 und in Griechenland um 04:00. Durch die
    Berechnung mithilfe der Weltzeit wird die Sommerzeit für alle Europäischen
    Zeitzonen richtig berechnet.

  7. #7
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.686 Danke für 1.225 Beiträge

    Standard

    @PN/DP:
    Wozu eigentlich in einem FC das Sichern und Wiederherstellen der Adressregister, am Anfang und am Ende der Funktion? Meiner Meinung nach ist das unnötig. Wenn ich eine Funktion aufrufe kann ich mich nie darauf verlassen, dass danach meine von mir selbst beschriebenen Registerinhalte unverändert sind.

  8. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.190
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Das Sichern der Adressregister ist in der Tat unnötig bzw. bewirkt nicht das, was beabsichtigt war. Schaden tut es allerdings auch nicht, außer ein paar µs Rechenzeit zu verschwenden.
    "Damals" vor langer Zeit, als ich den Baustein geschrieben habe, war ich noch nicht so perfekt wie heute da habe ich noch "vorsichtshalber" Sachen in Programme eingebaut, wo ich erst später sicher wusste, daß die unnötig waren. Das Sichern war wohl eine Angewohnheit aus meinen Assembler-TSR-Programmierungs-Jahren aus der Vor-SPS-Zeit.

    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #9
    artur ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.12.2010
    Beiträge
    17
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald, musste den SCL-Baustein für den Schichtkalender ändern hat dann super funktioniert.

    Danke Dir

  10. #10
    Registriert seit
    12.03.2015
    Beiträge
    10
    Danke
    2
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,

    ich will das Thema "Sommer-/Winterzeit-Umstellung" nochmals aufgreifen.

    Es gibt hier nun verschiedene Bausteine, die das verwalten können. Da hab ich nun die Frage:

    Muss die Steuerung in der besagten Nacht eingeschaltet sein, damit die Umstellung erkannt wird oder kann die Umstellung auch beim
    nächsten Einschalten erkannt werden und wird dann nachgeholt (also, quasi Montag früh, nach dem Umstellungswochenende) ???

Ähnliche Themen

  1. Step 5 S5 Sommer Winterzeit umstellung
    Von naturhof-Stefan im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 30.03.2015, 12:08
  2. Sommer Winterzeit Umstellung...
    Von Jochen Kühner im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 03.03.2010, 06:57
  3. Sommer- /Winterzeit Umstellung in S7 CPU 315
    Von Bounty1148 im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 26.11.2008, 23:41
  4. Sommer- / Winterzeit
    Von Winnie im Forum HMI
    Antworten: 3
    Letzter Beitrag: 23.01.2007, 13:39
  5. Sommer-/Winterzeit-Umstellung
    Von andre im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 26.02.2005, 09:16

Lesezeichen

Berechtigungen

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