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

Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 12 von 12

Thema: FB für Sommer-Winterzeit

  1. #11
    Antonio ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    22.11.2006
    Beiträge
    186
    Danke
    2
    Erhielt 12 Danke für 12 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von Ralle Beitrag anzeigen
    Nur nicht aus der Ruhr bringen lassen, auch wenn dieser oder jener nicht immer alles gut findet. Muß er ja auch nicht; denke ich mal.
    Diese Kritik empfinde ich auch als nicht so schlimm, ich wollte halt was nützliches posten, ich behaupte mal,es ist insgesamt gut angekommen, wem das nicht gefällt gebe ich ein tip:

    Einfach nicht Downloaden
    Ciao

    Antonio
    ________________________________
    nicht in Problemen, sondern in Lösungen denken

  2. #12
    Registriert seit
    10.08.2010
    Beiträge
    774
    Danke
    1
    Erhielt 14 Danke für 13 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Poste auch mal meinen Baustein

    Code:
    (*****************************************************************************************************************************************************)
    DATA_BLOCK AKTUELLE_ZEIT
    (*****************************************************************************************************************************************************)
    
        STRUCT
              
        DatumUhrzeit                          :DT;
        DatumUhrzeit_set                      :DT;
        Datum                                 :DATE;
        Lokalzeit                             :TOD;
        UTC                                   :TOD;
        UTC_Zeitzone                          :TIME:=T#1H;// Berlin
        Zeitzone                              :TIME:=T#1H; //Lokalzeit +1 Winterzeit
        Jahr                                  :INT;
        Jahres_Tag                            :INT;
        Monat                                 :INT;
        Monats_Tag                            :INT;
        Wochen_Tag                            :INT;
        Stunde                                :INT;
        Minute                                :INT;
        Sekunde                               :INT;
        Umstellungs_Sommerzeit                :DT;
        Umstellungs_Winterzeit                :DT;
        Sommerzeit                            :BOOL;
        Winterzeit                            :BOOL;
        P_Sommerzeit                          :BOOL;
        P_Winterzeit                          :BOOL;
        Edge_flag_pos1                        :BOOL;
        Edge_flag_pos2                        :BOOL;  
        HMI_Uhr_Stellen                       :BOOL;
        SOMMER_TO_WINTER                      :BOOL;    
                
        END_STRUCT
    BEGIN
     
    
    END_DATA_BLOCK
    
    
    FUNCTION UHRZEITEN : VOID
    
    VAR_TEMP
        
        TEMP_INT                      :INT;
        TEMP_SFC0                     :INT;
        AKT_DT                        :DT;
        DT_TIME                       :DT;
        DT_TIME1                      :DT;
        Umstellung_Time               :TIME;
    
        Jahr_anfang_DATE              :DATE;
        Timer1                        :TOD;
        TAG_Sommerzeit                :INT;
        TAG_Winterzeit                :INT;
            
        AT_AKT_DT AT AKT_DT:
                  STRUCT 
                    JAHR             : BYTE;
                    MONAT            : BYTE;
                    TAG              : BYTE;
                    STUNDE           : BYTE;
                    MINUTE           : BYTE;
                    SEKUNDE          : BYTE;
                    MS_MSD           : BYTE;                          
                    MS_LSD           : BYTE;
                END_STRUCT;
                
         AT_DT_TIME AT DT_TIME:
                 STRUCT 
                    JAHR             : BYTE;
                    MONAT            : BYTE;
                    TAG              : BYTE;
                    STUNDE           : BYTE;
                    MINUTE           : BYTE;
                    SEKUNDE          : BYTE;
                    MS_MSD           : BYTE;                          
                    MS_LSD           : BYTE;
                END_STRUCT;
        
        AT_DT_TIME1 AT DT_TIME1:
                 STRUCT 
                    JAHR             : BYTE;
                    MONAT            : BYTE;
                    TAG              : BYTE;
                    STUNDE           : BYTE;
                    MINUTE           : BYTE;
                    SEKUNDE          : BYTE;
                    MS_MSD           : BYTE;                          
                    MS_LSD           : BYTE;
                 END_STRUCT;
            
                
                
           
           
    
    END_VAR
    
        BEGIN
        
        // Uhr Manuell Stellen
        IF AKTUELLE_ZEIT.HMI_Uhr_Stellen THEN    
           TEMP_SFC0:=SET_CLK(PDT :=AKTUELLE_ZEIT.DatumUhrzeit_set);
           AKTUELLE_ZEIT.HMI_Uhr_Stellen:=False;
        END_IF;
    
            
        // Aktuelle Systemzeit lesen
        TEMP_INT := READ_CLK(CDT := AKT_DT);
        
        // Aktuelles Datum
        AKTUELLE_ZEIT.Datum :=DT_DATE(IN :=AKT_DT); 
        
        // Datum und Zeit in DB verschieben
        AKTUELLE_ZEIT.DatumUhrzeit :=AKT_DT;
        
        // Lokalzeit Berechnen
        AKTUELLE_ZEIT.Lokalzeit:=DT_TOD(IN :=AKT_DT); 
    
        
        // Jahr in DB verschieben
        AKTUELLE_ZEIT.Jahr:=BCD_TO_INT (AT_AKT_DT.JAHR);   
            
        // Jahrestag Berechnen und in DB verschieben
        Jahr_anfang_DATE:=D#2010-01-01;
        DT_TIME:=D_TOD_DT(IN1 :=Jahr_anfang_DATE,IN2 := Timer1);                   // Jahres anfang auslesen und in DT umwandeln T=Platzhalter
        AT_DT_TIME.JAHR  := AT_AKT_DT.JAHR;                                        // Aktuelle Jahreszahl in AT Sicht Jahr schreiben
        Jahr_anfang_DATE  :=DT_DATE(IN :=DT_TIME);     
        AKTUELLE_ZEIT.Jahres_Tag:=DINT_TO_INT (DATE_TO_DINT (AKTUELLE_ZEIT.Datum) - DATE_TO_DINT (Jahr_anfang_DATE))+1;
        
        // Monat in DB verschieben
        AKTUELLE_ZEIT.Monat:=BCD_TO_INT (AT_AKT_DT.MONAT);
        
        // Monats Tag in DB verschieben
        AKTUELLE_ZEIT.Monats_Tag:=BCD_TO_INT (AT_AKT_DT.TAG);
    
        // Wochentag in DB verschieben
        AKTUELLE_ZEIT.Wochen_Tag :=DT_DAY(IN :=AKT_DT);
        
        // Stunde in DB verschieben
        AKTUELLE_ZEIT.Stunde:=BCD_TO_INT  (AT_AKT_DT.STUNDE);
    
        // Minute in DB verschieben
        AKTUELLE_ZEIT.Minute:=BCD_TO_INT (AT_AKT_DT.MINUTE);
        
        // Sekunde in DB verschieben
        AKTUELLE_ZEIT.Sekunde:=BCD_TO_INT (AT_AKT_DT.SEKUNDE);
        
           
        // Berechnung der UmstellungsTag Sommerzeit
        DT_TIME1:=DT#2013-03-31-02:00:00.000;// Achtung Datum muss immer ein Sonntag sein sonst fehler in der Berechnung der Zeit
        AT_DT_TIME1.JAHR:=WORD_TO_BYTE(INT_TO_BCD (AKTUELLE_ZEIT.Jahr));
        TAG_Sommerzeit:=31 -((AKTUELLE_ZEIT.Jahr + 5 + (AKTUELLE_ZEIT.Jahr/4)) MOD 7);
        AT_DT_TIME1.TAG:=WORD_TO_BYTE(INT_TO_BCD (TAG_Sommerzeit));
        AKTUELLE_ZEIT.Umstellungs_Sommerzeit:=DT_TIME1;
        
        // Berechnung der UmstellungsTag Winterzeit
        DT_TIME:=DT#2013-10-27-03:00:00.0; // Achtung Datum muss immer ein Sonntag sein sonst fehler in der Berechnung der Zeit
        AT_DT_TIME.JAHR:=WORD_TO_BYTE(INT_TO_BCD (AKTUELLE_ZEIT.Jahr));
        TAG_Winterzeit:=31 -((AKTUELLE_ZEIT.Jahr + 2 + (AKTUELLE_ZEIT.Jahr/4)) MOD 7);
        AT_DT_TIME.TAG:=WORD_TO_BYTE(INT_TO_BCD (TAG_Winterzeit));
        AKTUELLE_ZEIT.Umstellungs_Winterzeit:=DT_TIME;
        
        // Umstellung von Sommer auf Winterzeit von 3:00 auf 2:00 Uhr. Nach umstellung Bit von 2:00 bis 3:00 Uhr setzten damit Zeit nicht wieder auf Sommerzeit springt  
        AKTUELLE_ZEIT.SOMMER_TO_WINTER:=AKTUELLE_ZEIT.Winterzeit AND (AKT_DT > AKTUELLE_ZEIT.Umstellungs_Winterzeit+-T#1H AND AKT_DT < AKTUELLE_ZEIT.Umstellungs_Winterzeit);
         
        
         //  Sommerzeit 
        IF (AKT_DT>AKTUELLE_ZEIT.Umstellungs_Sommerzeit AND AKT_DT < AKTUELLE_ZEIT.Umstellungs_Winterzeit) AND NOT AKTUELLE_ZEIT.SOMMER_TO_WINTER THEN
           AKTUELLE_ZEIT.Sommerzeit:=TRUE;
           AKTUELLE_ZEIT.Winterzeit:=FALSE;
           AKTUELLE_ZEIT.Zeitzone:=AKTUELLE_ZEIT.UTC_Zeitzone+T#1H;
           Umstellung_Time:=T#1h;
        ELSE // Winterzeit
           AKTUELLE_ZEIT.Sommerzeit:=FALSE;
           AKTUELLE_ZEIT.Winterzeit:=TRUE; 
           AKTUELLE_ZEIT.Zeitzone:=AKTUELLE_ZEIT.UTC_Zeitzone;
           Umstellung_Time:=T#23h;
                                        
        END_IF;
        
        // Flankenmerker   
        //Bildung der positiven Flanke  //get the positive pulse
         AKTUELLE_ZEIT.P_Sommerzeit  := AKTUELLE_ZEIT.Sommerzeit AND NOT AKTUELLE_ZEIT.Edge_flag_pos1;
         AKTUELLE_ZEIT.Edge_flag_pos1   := AKTUELLE_ZEIT.Sommerzeit;
         
         AKTUELLE_ZEIT.P_Winterzeit  := AKTUELLE_ZEIT.Winterzeit AND NOT AKTUELLE_ZEIT.Edge_flag_pos2;
         AKTUELLE_ZEIT.Edge_flag_pos2   := AKTUELLE_ZEIT.Winterzeit;
    
       
        // Uhr Umstellung Sommer Winterzeit
        IF AKTUELLE_ZEIT.P_Sommerzeit OR AKTUELLE_ZEIT.P_Winterzeit THEN
           AKTUELLE_ZEIT.Lokalzeit:=AKTUELLE_ZEIT.Lokalzeit+Umstellung_Time;
           AKTUELLE_ZEIT.DatumUhrzeit:=D_TOD_DT(IN1 :=AKTUELLE_ZEIT.Datum,IN2 := AKTUELLE_ZEIT.Lokalzeit);
           TEMP_SFC0:=SET_CLK(PDT :=AKTUELLE_ZEIT.DatumUhrzeit); 
        END_IF ; 
         
         //UTC Berechnen
          AKTUELLE_ZEIT.UTC:=AKTUELLE_ZEIT.Lokalzeit +- AKTUELLE_ZEIT.Zeitzone;
    
        
                
              
        
           
           END_FUNCTION

Ähnliche Themen

  1. Sommer Winterzeit
    Von siqo im Forum Simatic
    Antworten: 49
    Letzter Beitrag: 23.06.2011, 23:34
  2. Sommer Winterzeit Umschaltung
    Von Montancy im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 11.04.2011, 19:16
  3. Sommer Winterzeit Umstellung...
    Von Jochen Kühner im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 03.03.2010, 06:57
  4. Sommer- / Winterzeit
    Von Winnie im Forum HMI
    Antworten: 3
    Letzter Beitrag: 23.01.2007, 13:39
  5. Sommer-/Winterzeit in S7 CPU
    Von psum im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 08.08.2005, 14:56

Lesezeichen

Berechtigungen

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