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

Ergebnis 1 bis 7 von 7

Thema: Festellen ob gerade oder ungerade Kalenderwoche

  1. #1
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen,


    ich benutze bereits die Kalenderfunktion. Ich bekomme auch die aktuelle Arbeitwoche angezeigt.
    Ich möchte aber nun einfach feststelen ob es eine gerade oder ungerade Kalenderwoche ist.
    Mir fehlt derzeit die Erfahrung mit der Programmierung von codesys und würde mich freuen wenn mir jmd helfen könnte.
    Zitieren Zitieren Festellen ob gerade oder ungerade Kalenderwoche  

  2. #2
    Registriert seit
    24.02.2009
    Beiträge
    1.244
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    Hier ist die Modulo Operation dein Freund und Helfer.

    KW MOD 2 = 1 ==> ungerade Woche
    KW MOD 2 = 0 ==> gerade Woche
    Sänd from mei Kombjudder mitse Dastadurr.

  3. Folgender Benutzer sagt Danke zu MasterOhh für den nützlichen Beitrag:

    Kiter11 (19.07.2015)

  4. #3
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Code:
    KW AND 1 = 1  ==> ungerade Woche
    KW AND 1 = 0  ==> gerade Woche
    wird vermutlich schneller ausgeführt.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #4
    Registriert seit
    10.07.2008
    Beiträge
    47
    Danke
    19
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo und danke für eure antworten.

    Ich kenne noch aus Schulzeiten die Funktion /2 .... wen Rest > 0 dann ....
    Ich habe mit codesys aber bisher nur FUP gemacht und mir fehlt die syntax...

    Ich weiß also a nicht was KW AND 1 = 1 bedeutet und b wo und wie ich das in mein codesys Projekt bekomme

  6. #5
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard

    Zitat Zitat von Kiter11 Beitrag anzeigen
    Ich weiß also a nicht was KW AND 1 = 1 bedeutet und b wo und wie ich das in mein codesys Projekt bekomme
    Ach, das ist kein großes Problem, das kann man leicht im Codesys-Handbuch und in der Codesys-Hilfe nachlesen.


    Mit AND kann man Werte bitweise UND-Verknüpfen. Bei allen ungeraden Zahlen ist das niederwertigste Bit 1, bei allen geraden Zahlen ist es 0. Diese Eigenschaft kann man ausnutzen und das niederwertigste Bit abfragen, indem man den Wert mit der Zahl 1 UND-verknüpft (ausmaskiert) und schaut, ob das Ergebnis 1 oder 0 ist. Oder einfacher: gleich oder ungleich 0 ist. Außerdem kann man das Bit sogar direkt abfragen (Slice).
    Code:
    //ausführliches Schul-Mathe
    Woche_ist_ungerade := (Woche AND 1) = 1 ;
    
    //oder mit implizitem Vergleich auf <>0 :
    Woche_ist_ungerade := Woche AND 1 ;
    
    //oder das niederwertigste Bit direkt abfragen: (was der Compiler vermutlich wie Variante 2 löst)
    Woche_ist_ungerade := Woche.x0 ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  7. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Kiter11 (19.07.2015)

  8. #6
    Registriert seit
    29.03.2004
    Beiträge
    5.797
    Danke
    144
    Erhielt 1.707 Danke für 1.239 Beiträge

    Standard

    Von der Kompatibilität der Datentypen und der Logik her, ist MOD allerdings vorzuziehen. Dann passen die Datentypen schon zusammen, da die Woche üblicherweise ein Werttyp wie Integer ist, und kein Wort oder Doppelwort.
    Außerdem muss ich mir bei Modulo keine Gedanken um die binäre Repräsentation eines Integers im Speicher zu machen.

  9. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.314
    Danke
    932
    Erhielt 3.329 Danke für 2.688 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Das ist alles richtig, jedoch:
    • Codesys erlaubt den Zugriff auf einzelne Bits von Ganzzahl-Variablen. Da gibt es kein Datentyp-Problem. Doch gut, es könnte ja Compiler geben, welche in der Grundeinstellung den Bitzugriff auf INT (korrekterweise) abweisen.
    • Es schadet nichts, wenn man den Aufbau von Datentypen kennt. Und es ist eher unwahrscheinlich, daß sich irgendwann die binäre Repräsentation eines Integers ändert - die ist schon mehr als 100 Jahre so.
    • Zusätzlich behaupte ich mal, daß bei den meisten bestehenden Computerprogrammen das gerade/ungerade-Problem durch Abfrage des niederwertigsten Bits gelöst ist. Das funktioniert in jeder Programmiersprache.


    Wenn man sich für MOD zur Prüfung entscheidet, dann sollte man allerdings wissen, daß man das Ergebnis eines "MOD 2" nicht auf "gleich 1" sondern nur auf "gleich/ungleich 0" prüfen sollte, weil die Funktion 3 Ergebnisse haben kann: 0, 1 und -1. Ein "ungerade := (KW MOD 2) = 1 ;" ist unvollständig.

    Mit MOD müßte man also korrekterweise so prüfen:
    Code:
    Woche_ist_gerade   := (Woche MOD 2) = 0 ;
    Woche_ist_ungerade := (Woche MOD 2) <> 0 ;
    
    //oder
    Woche_ist_gerade   := (Woche MOD 2) = 0 ;
    Woche_ist_ungerade := NOT Woche_ist_gerade ;
    Harald
    Es ist immer wieder überraschend, wie etwas plötzlich funktioniert, sobald man alles richtig macht.

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. Folgender Benutzer sagt Danke zu PN/DP für den nützlichen Beitrag:

    Kiter11 (19.07.2015)

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 31.03.2014, 10:00
  2. Gerade od. Ungerade das ist hier die Frage
    Von Anonymous im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 05.02.2014, 15:07
  3. Gerade oder Ungerade?
    Von WL7001 im Forum Simatic
    Antworten: 12
    Letzter Beitrag: 16.03.2013, 11:02
  4. Antworten: 12
    Letzter Beitrag: 11.12.2007, 07:43
  5. gerade oder Ungerade Anzahl der Ausgänge
    Von Otto im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 31.10.2006, 09:17

Lesezeichen

Berechtigungen

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