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

Ergebnis 1 bis 10 von 10

Thema: Die Kalenderwoche aus einer CPU318 auslesen

  1. #1
    Registriert seit
    18.10.2004
    Beiträge
    49
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hallo leute,
    weiß jemand wie man die kalenderwoche aus einer cpu 318 ausgelesen werden kann? habe dies über einen eigenen fc versucht und festtellen müßen das dies nicht so einfach ist. wäre für jeden tipp und lösungsansatz dankbar.
    mfg uwe
    Zitieren Zitieren Die Kalenderwoche aus einer CPU318 auslesen  

  2. #2
    Registriert seit
    22.06.2003
    Beiträge
    242
    Danke
    9
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Habe da zwar schon lange nicht mehr dranrumgespielt aber ein Lösungsansatz war, sofern die Uhr einmal richtig justiert wird, die Wochentage (letztes Byte der Tod-Befehle) hochzuzählen. Immer wieder Montags beginnt die neue KW ...
    Die richtige Voreinstellung des Wochentages ist wichtig, denn sonst gibts keinen 'Montag' in der CPU !

    Oder es ging auch alle Tage durch 7 geteilt zu zählen ... (Modulo)

    Als 'Absolutwert' ohne Zähler errechnet sich die KW in der Ganzzahldivision des ausgelesenen (((Monat -1) * 30,5) + Datum) / 7); die '30,5' kann man dabei etwas angleichen - je nachdem ob Schaltjahr oder nicht ... Da wie gesagt die Kalenderwoche fast immer Montags beginnt brauchts dabei nur einmal je Woche (Montag morgen) eingelesen zu werden. Das spart Zykluszeit.
    In der Step7 Onlinehilfe ist zu SFC01 (Read_Clock) ein AWL Beispiel zur Übergabe der #Parameter abgebildet. Das funktioniert schon unverändert fast dafür.

    mfG
    tobias

  3. #3
    Registriert seit
    06.10.2003
    Beiträge
    3.409
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Grundlegend wichtig ist zunächst erst einmal die Definition der ersten Kalenderwoche.
    Siehe DIN 1355 (ISO/R 2015-1971).

    Gruss, Onkel

  4. #4
    Registriert seit
    22.06.2003
    Beiträge
    242
    Danke
    9
    Erhielt 19 Danke für 19 Beiträge

    Standard

    Zitat Zitat von onkel
    Grundlegend wichtig ist zunächst erst einmal die Definition der ersten Kalenderwoche.
    Siehe (...)
    Stimmt. Stelle eben fest das seinerzeit nie berücksichtigt zu haben. Begann den Versuch Anfang 2005 - und rechnete es per Taschenkalender hoch. KW1/2005 begann genau am ersten Montag (03.01), was ich dann mit ca. " INC(0_am_ersten_Montag_neues_Jahr)" für 'alle Ewigkeit' übernahm..

    Ist ja spannend, auf 'ne Norm darüber kam ich nicht. Versuchte es wegen des Abgleiches einiger Abrechnungszeiträume die kein Datum sondern ...bis einschl. KW30 enthielten da in die Nähe zu kommen. Das passte dann, zufällig genau!
    Gruss

  5. #5
    Registriert seit
    06.10.2003
    Beiträge
    3.409
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo tobias,

    Kalenderberechnung ist schon richtig was Feines. Wenn du Interesse hast, dann sieh dir mal das text-file auf "Frequently Asked Questions about Calendars" an.

    Gruss, Onkel

  6. #6
    Registriert seit
    16.12.2004
    Ort
    Schleswig-Holstein
    Beiträge
    400
    Danke
    21
    Erhielt 23 Danke für 20 Beiträge

    Standard

    Vor einer Woche ist dieselbe Frage in einem anderen Forum aufgetaucht und da hat RolfB eine sehr interessante Lösung gezeigt. Du kannst sie here downloaden.

    Zip-datei einfach unzippen und dann mit Simatic Manager öffnen.
    Zitieren Zitieren Komisch wie die Zufälle sich häufen!  

  7. #7
    Registriert seit
    24.09.2003
    Beiträge
    122
    Danke
    0
    Erhielt 8 Danke für 7 Beiträge

    Standard

    Hallo,
    ich glaube schon, das die Norm ISO 8601 auch für
    Deutschland zutrifft. siehe:
    ISO 8601 - Realisierung
    --------------------------------------------------------------------------------
    Der international Standard ist ISO 8601:1988, er ersetzt ISO 2014, ISO 2015, ISO 2711, ISO 3307 und ISO 4031.

    Andere Normungsinstitutionen haben den Standard übernommen:

    European Norm: EN 28601:1992
    USA Standard: ANSI X3.30-1985(R1991)
    USA Standard: NIST FIPS 4-1
    Japan: JIS X 0301-1992
    Canada: CSA Z234.5:1989
    Australia: AS 3802:1997
    South Africa: ARP 010:1989
    Mindestens folgende europäische Länder haben diese Norm realisiert (Stand 1998-10-22):
    Belgien, Dänemark, Deutschland, Finnland, Frankreich, Griechenland, Großbritanien, Irland, Island, Italien, Luxemburg, Niederlande, Norwegen, Österreich, Polen, Portugal, Schweden, Schweiz, Spanien, Tschechische Republik.
    Kalenderberechnung ist schon ziemlich tricky, aber bei
    der Berechnung der KW kann man so Sachen wie Schaltjahre
    etc. außer Acht lassen, weil man sich nur auf das betreffende Jahr
    bezieht.

    Ups. ich sehe gerade, dass RMA auf einen Beitrag von mir aus einem
    anderen Forum hinweist.
    Den habe ich eben ein wenig überarbeitet und hänge den mal hier an.

    Das könnte ein Lösungsansatz sein. Für die Gültigkeit des Datums
    bzw. eine Überprüfung müßte man noch ergänzen.

    mfg.

    Rolf
    Angehängte Dateien Angehängte Dateien

  8. Folgender Benutzer sagt Danke zu RolfB für den nützlichen Beitrag:

    Waldi1954 (16.05.2011)

  9. #8
    Registriert seit
    06.10.2003
    Beiträge
    3.409
    Danke
    449
    Erhielt 504 Danke für 407 Beiträge

    Standard

    Hallo Rolf,

    Zitat Zitat von RolfB
    ...ich glaube schon, das die Norm ISO 8601 auch für
    Deutschland zutrifft....
    ja, stimmt wohl. Ich hatte meinen Beitrag, auf den sich deiner bezieht, gerade eben korrigiert, bzw, gekürzt.


    Gruss, Onkel

  10. #9
    Registriert seit
    18.10.2004
    Beiträge
    49
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    hallo leute,
    besten dank für die vorschläge,ich habe mich für rolfs lösung entschieden funktiort super danke rolf.
    mfg uwe

  11. #10
    Registriert seit
    20.06.2003
    Ort
    Sauerland.NRW.Deutschland
    Beiträge
    4.850
    Danke
    78
    Erhielt 800 Danke für 543 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    hier mal noch eine etwas andere lösung

    1 mal editiert.
    habe den code nochmal etwas gekürzt.

    Code:
    FUNCTION FC 22 : VOID
    TITLE =
    // KW  
    AUTHOR : Lischnew
    FAMILY : Datum
    NAME : KW
    VERSION : 1.1
    
    
    VAR_INPUT
      datum_in : DATE ; //Eingangsdatum
    END_VAR
    VAR_OUTPUT
      kw : INT ;    //Kalenderwoche
    END_VAR
    VAR_TEMP
      datum_in_dt : DATE_AND_TIME ; //Eingangsdatum
      datum_in_dt_1_1 : DATE_AND_TIME ; //Datum 1.1.xxxx
      datum_in_d_1_1 : DATE ;   //Datum 1.1.xxxx
      wochentag_4_1 : INT ; //Wochentag des 4.1
      erster_tag_kw1 : DATE ;   //Datum des 1. Tages der 1. KW
      tage_1_1_to_1kw1 : INT ;  //Differenz vom 1.1 bis 1. Tag der 1. KW
      tageszahl : INT ; //Tagnummer des Eingangsdatum
    END_VAR
    BEGIN
    NETWORK
    TITLE = 
    
          CALL FC     3 (//eingangsdatum wandeln in dt 
               IN1                      := #datum_in,
               IN2                      := TOD#0:0:0.0,
               RET_VAL                  := #datum_in_dt);
    
          CALL FC     3 (//vorbelegen eines 1.1.xxxx dt 
               IN1                      := D#2000-1-1,
               IN2                      := TOD#0:0:0.0,
               RET_VAL                  := #datum_in_dt_1_1);//1.1 
    
          L     LB     0; 
          T     LB     8; // jahr in #datum_in_dt_1_1 auf gewünschtes setzen 
    
          CALL FC     6 (//dt -> d 
               IN                       := #datum_in_dt_1_1,
               RET_VAL                  := #datum_in_d_1_1);//1.1 des gewünschten jahres 
    
    
          CALL FC     7 (
               IN                       := #datum_in_dt_1_1,
               RET_VAL                  := #wochentag_4_1);//wt vom 1.1 
    
    //wochentag anpassen 
          L     #wochentag_4_1; 
          L     3; 
          +I    ; //wt vom 4.1
          L     1; 
          -I    ; 
          T     #wochentag_4_1; 
          L     7; 
          <=I   ; 
          SPB   wt1; 
          L     #wochentag_4_1; 
          L     7; 
          -I    ; 
          T     #wochentag_4_1; 
    wt1&#58;  NOP   0; 
    
    
    //ermitteln welcher tag der erste tag der ersten kw ist 
          L     #datum_in_d_1_1; // 1.1
          L     3; 
          +I    ; // 4.1
          L     #wochentag_4_1; 
          -I    ; 
          L     1; 
          +I    ; 
          T     #erster_tag_kw1; 
    
    //ermitteln der differenz zwischen 1.1 und erste tag der ersten kw 
          L     #erster_tag_kw1; 
          L     #datum_in_d_1_1; 
          -I    ; 
          L     1; 
          +I    ; 
          T     #tage_1_1_to_1kw1; 
    
    //ermitteln der wievielte tag es ist 
          L     #datum_in; 
          L     #datum_in_d_1_1; 
          -I    ; 
          L     1; 
          +I    ; 
          T     #tageszahl; 
    
    //kw ermitteln 
          L     #tageszahl; 
          L     #tage_1_1_to_1kw1; 
          -I    ; 
          L     7; 
          +I    ; 
          L     7; 
          /I    ; 
          T     #kw; 
          L     0; 
          <>I   ; 
          SPB   kwOK; 
          L     53; 
          T     #kw; 
    kwOK&#58; NOP   0; 
    END_FUNCTION
    .
    mfg Volker .......... .. alles wird gut ..

    =>Meine Homepage .. direkt zum Download

    Meine Definition von TIA: Total Inakzeptable Applikation

Ähnliche Themen

  1. Kalenderwoche in Wincc
    Von Trocellen im Forum Hochsprachen - OPC
    Antworten: 10
    Letzter Beitrag: 03.01.2011, 22:06
  2. MPI und Profibus DP an einer CPU318-2 PN/DP
    Von reini69 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 08.06.2009, 16:44
  3. Kalenderwoche berechnen
    Von Simatics im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.05.2007, 21:59
  4. Antworten: 6
    Letzter Beitrag: 12.04.2005, 11:44
  5. Kalenderwoche
    Von PLC JOE im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.07.2004, 00:21

Lesezeichen

Berechtigungen

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