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

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

Thema: SCL: Problem beim Vergleich von zwei Datenwerten

  1. #11
    Registriert seit
    23.09.2010
    Beiträge
    19
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich habe es vorhin sogar probiert, den einzelnen Bytes einen expliziten Wert zuzuweisen.

    Beispiel:

    arrayCmpDateTime.Jahr := INT_TO_BYTE(14);
    arrayCmpDateTime.Monat := INT_TO_BYTE(2);
    arrayCmpDateTime.Tag := INT_TO_BYTE(5);
    arrayCmpDateTime.Stunde := INT_TO_BYTE(0);
    arrayCmpDateTime.Minute := INT_TO_BYTE(0);
    arrayCmpDateTime.Sekunde := INT_TO_BYTE(0);
    arrayCmpDateTime.MS_UND_WDAY := INT_TO_WORD(1);

    Klappt aber trotzdem nicht

  2. #12
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.718
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    ... jetzt müßte man dann wissen, wie der GE_DT genau funktioniert.
    Es gibt nämlich auch noch die Möglichkeit, dass dein Datum in sich zwar OK ist, der angegebene Wochentag aber dazu nicht passt. Damit hatte ich in Verbindung mit Bereichszeigern bei Flex schon mal Probleme bekommen.
    Ansonsten habe ich dazu keine weiteren Ideen mehr (außer, dass ich genau wie PN/DP, das auch anders lösen würde).

    Gruß
    Larry

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

    Beogradjanin (06.09.2013)

  4. #13
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    Hab grad mal den GE_DT angeschaut. Ein falscher Wochentag stört nicht.
    Es werden die einzelnen Bytes miteinander verglichen. Da die Millisekunden in der höherwertigen Stelle des Bytes sitzen, hat ein falscher Wochentag keinen Einfluss auf das Ergebnis (außer die Zeiten sind bis auf die Millisekunde identisch). Der Wochentag wird auch nicht separat überprüft.

  5. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Beogradjanin (06.09.2013)

  6. #14
    Registriert seit
    29.03.2004
    Beiträge
    5.735
    Danke
    143
    Erhielt 1.685 Danke für 1.225 Beiträge

    Standard

    In dem Code aus deinem Eingangspost ist auf jeden Fall ein Fehler.
    Das Jahr wird BCD codiert gespeichert. Beim Lesen machst du es richtig, aber beim Schreiben weist du den Wert ohne Wandlung der Variable zu.
    Du musst das Jahr darum nach der Berechnung wieder in BCD wandeln.

    Probier mal
    Code:
    thisYear := BCD_TO_INT(arrayDateTime.Jahr);
    //next Year
    arrayCmpDateTime.Jahr := WORD_TO_BYTE(INT_TO_BCD(thisYear+1));
    Funktioniert dank WORD_TO_BYTE sogar im Jahre 1999.

  7. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Beogradjanin (06.09.2013)

  8. #15
    Registriert seit
    23.09.2010
    Beiträge
    19
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Thomas_v2.1 Beitrag anzeigen
    In dem Code aus deinem Eingangspost ist auf jeden Fall ein Fehler.
    Das Jahr wird BCD codiert gespeichert. Beim Lesen machst du es richtig, aber beim Schreiben weist du den Wert ohne Wandlung der Variable zu.
    Du musst das Jahr darum nach der Berechnung wieder in BCD wandeln.

    Probier mal
    Code:
    thisYear := BCD_TO_INT(arrayDateTime.Jahr);
    //next Year
    arrayCmpDateTime.Jahr := WORD_TO_BYTE(INT_TO_BCD(thisYear+1));
    Funktioniert dank WORD_TO_BYTE sogar im Jahre 1999.
    Hallo,

    ich habe den Code von Thomas gerade getestet. Leider funktioniert die Wandlung nicht. Was ich auch hier nicht so ganz verstehe, ist, warum das "INT_TO_BCD(thisYear+1)" nicht für eine Wertwandlung von INT nach BCD ausreicht?

  9. #16
    Registriert seit
    23.09.2010
    Beiträge
    19
    Danke
    11
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Stoppppppppppppp!!! Wer lesen kann, ist klar im Vorteil!

    Es klappt doch so, wie es Thomas gesagt hat. Mein Fehler war eben, dass ich bei dem Code
    Code:
    thisYear := BCD_TO_INT(arrayDateTime.Jahr);
    //next Year
    arrayCmpDateTime.Jahr := WORD_TO_BYTE(INT_TO_BCD(thisYear+1));
    In der letzten Zeile "arrayCmpDateTime.Jahr := WORD_TO_BYTE(INT_TO_BCD(thisYear+1));" noch INT_TO_BYTE stehen hatte. Glücklicherweise ist es mir eben noch aufgefallen und jetzt klappt es auch mit der Funktion GE_DT etc.

    Juhuuuuuuuuu

    Vielen lieben Dank an alle Beteiligte!

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 16.05.2013, 15:11
  2. Pointer Vergleich AWL -> SCL??
    Von Carsten77 im Forum Simatic
    Antworten: 10
    Letzter Beitrag: 16.08.2011, 14:21
  3. Vergleich von zwei Programmen "TOOL"
    Von Rdata im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 29.08.2008, 15:22
  4. Vergleich AWl <--> SCL
    Von nobug im Forum Programmierstrategien
    Antworten: 6
    Letzter Beitrag: 11.03.2008, 20:11
  5. Antworten: 9
    Letzter Beitrag: 16.12.2007, 21:20

Lesezeichen

Berechtigungen

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