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

Ergebnis 1 bis 1 von 1

Thema: FB_Weihnachtszeit

  1. #1
    Registriert seit
    12.03.2011
    Ort
    Erzgebirge
    Beiträge
    247
    Danke
    77
    Erhielt 29 Danke für 27 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    FB_Weihnachtszeit

    Bei mir zu Hause steuert bisher eine kleine CControl neben ein paar weiteren Dingen die „Weihnachtsbeleuchtung“.
    Am Samstag vor dem 1.Advent 16Uhr muss sie „rituell“ das erste Mal einschalten. An Samstagen und Weihnachtsfeiertagen schaltet sie spät aus. An den Advents- Sonntagen schaltet sie sehr zeitig ein usw.
    Wie auch immer- ich benötige die Information ob und welcher Advent/ Adventswoche aktuell ist. Zum errechnen dieser Informationen habe ich nun den folgenden S7- SCL- Baustein geschrieben (habe auch einige Simulationen durchgeführt – funktioniert soweit prima).
    Code:
    FUNCTION_BLOCK FB_Weihnachtszeit
    
    TITLE = 'Weihnachtszeit'
    
    // Weihnachtszeit V01.01P Freeware
    // (c) 04.11.2013..17.11.2013  Holger Reither 
    // ( holger.reither@web.de
    //   http://reither.ohost.de/sps.htm )
    // 
    // Wichtig !!!!!
    // =============
    // Der Einsatzt dieses Bausteines erfolgt auf eigene 
    // Gefahr!
    //
    // Wer Änderungen vornimmt, wird gebeeten, diese
    // in der History (siehe unten) zu vermerken.
    //
    // Fehlermeldungen, Änderungswünsche, können Sie gerne
    // an oben genannte Mail-Adresse senden.
    //
    // Viel Erfolg mit diesem Programm!
    //
    // ===================================================
    //
    // Erforderliche S7-Bausteine:
    //  FC7     DT_DAY
    //
    // ===================================================
    // History:
    //
    //   Änderung:         ...............................
    //   Geändert durch:   ...............................
    //   Datum:            ..........
    //   Kurzbeschreibung: ...............................
    //                     ...............................
    //                     ...............................
    //                     ...............................
    //                     ...............................
    //
    // ===================================================
    
    AUTHOR:   HReither  //  max. 8 Zeichen
    FAMILY:   DateTime  //  max. 8 Zeichen
    NAME:     WZeit     //  max. 8 Zeichen 
    VERSION:  '01.01'   //  max. 15.15
    
    VAR_INPUT
     DatumZeit: DATE_AND_TIME; ArrayDatumZeit AT DatumZeit: ARRAY[0..7] OF BYTE;  
    END_VAR
        
    VAR_OUTPUT  
     SaVorErsterAdvent:     BOOL; // Sa vor erstem Advent
     ErsterAdvent:          BOOL; // 1.Advent
     ZweiterAdvent:         BOOL; // 2.Advent
     DritterAdvent:         BOOL; // 3.Advent
     VierterAdvent:         BOOL; // 4.Advent
     AdventsWoche1:         BOOL; // So..Sa
     AdventsWoche2:         BOOL; // So..Sa
     AdventsWoche3:         BOOL; // So..Sa
     AdventsWoche4:         BOOL; // So..Sa oder 24.12.
     Advent:                BOOL; // 1.Advent bis 24.12.
     Weihnachtswoche:       BOOL; // 24.12. bis 31.12.
     NeujahrBisHochneujahr: BOOL; // 1.1. bis 6.1.
     Weihnachtszeit:        BOOL; // 1.Advent bis 6.1.
     Monat,
     Tag,
     Wochentag,
     Stunde,
     Minute:INT;
    END_VAR
    
    VAR_TEMP    
     ISaVor1AdvDay,ISaVor1AdvMonth,
     TageBisWeihnachten,
     Wochentag24ster,
     TageBis4erAdvent,
     tmp:INT; 
     IOffset: TIME;
    END_VAR
      
    // Begin ---------------------------------------------------------------------------------------------------------------
    
     // Zerlegen von DatumZeit
     Monat:=BCD_TO_INT(BYTE_TO_WORD(ArrayDatumZeit[1]));
     Tag:=BCD_TO_INT(BYTE_TO_WORD(ArrayDatumZeit[2]));
     Stunde:=BCD_TO_INT(BYTE_TO_WORD(ArrayDatumZeit[3]));
     Minute:=BCD_TO_INT(BYTE_TO_WORD(ArrayDatumZeit[4]));
     Wochentag:=DT_DAY (IN := DatumZeit    // IN: DATE_AND_TIME
                                           );  // INT
     // 1=Sonntag / 2=Montag / 3=Dienstag / 4=Mittwoch / 5=Donnerstag / 6=Freitag / 7=Samstag
    
     SaVorErsterAdvent:=false;   ErsterAdvent     :=false; ZweiterAdvent    :=false; DritterAdvent    :=false; VierterAdvent    :=false;
     AdventsWoche1    :=false; AdventsWoche2    :=false; AdventsWoche3    :=false; AdventsWoche4    :=false;
     // ermittle Wochentag des 24.Dezember
     IF (Monat>=11) THEN 
      IF Monat=11 THEN
       TageBisWeihnachten:=24+30-Tag; 
      ELSE 
       TageBisWeihnachten:=24-Tag;  
      END_IF; 
      IF TageBisWeihnachten>=0 THEN   
       tmp:=TageBisWeihnachten MOD 7;
       Wochentag24ster:=Wochentag+tmp;
       IF Wochentag24ster>7 THEN
        Wochentag24ster:=Wochentag24ster-7;
       END_IF;   
       tmp:=(Wochentag24ster-1);// Differenz zwischen 24stem und 4. Advent
       TageBis4erAdvent:=TageBisWeihnachten-tmp;   
       CASE TageBis4erAdvent OF
        -7..-1: AdventsWoche4    :=true;
        0     : AdventsWoche4    :=true; VierterAdvent:=true;
        1..6  : AdventsWoche3    :=true;
        7     : AdventsWoche3    :=true; DritterAdvent:=true;
        8..13 : AdventsWoche2    :=true;
        14    : AdventsWoche2    :=true; ZweiterAdvent:=true;
        15..20: AdventsWoche1    :=true;
        21    : AdventsWoche1    :=true; ErsterAdvent :=true;
        22    : SaVorErsterAdvent:=true;   
       END_CASE;   
      END_IF;
     END_IF;
     Advent:=(AdventsWoche1=true) OR (AdventsWoche2=true) OR (AdventsWoche3=true) OR (AdventsWoche4=true);
     Weihnachtswoche:=(Monat=12) AND (Tag>=24) AND (Tag<=31);
     NeujahrBisHochneujahr:= (Monat=1) AND (Tag<=6);
     Weihnachtszeit:= Advent OR Weihnachtswoche OR NeujahrBisHochneujahr;
     
    END_FUNCTION_BLOCK
    // --------------------------------------------------------------------------------------------------------
    Freut mich falls jemand Verwendung für diesen Baustein hat
    Gruß Holger
    Zitieren Zitieren FB_Weihnachtszeit  

  2. Folgender Benutzer sagt Danke zu holgero für den nützlichen Beitrag:

    Hohlkörper (18.11.2013)

Lesezeichen

Berechtigungen

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