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

Ergebnis 1 bis 7 von 7

Thema: Umwandeln DINT in 2 INT

  1. #1
    Registriert seit
    27.03.2008
    Beiträge
    12
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich würde gerne einen DINT Wert in 2 INT aufteilen und habe dazu nichts finden können.
    Diese sollen den DINT Wert in DEZ aufgeteilt auf 2 MW ausgeben.
    Leider passiert folgendes:

    In einer VAT:

    DB31.DBD 64 DEZ L#9015400

    Code:
    L   DB31.DBW    64
    T  MW6
    L   DB31.DBW    66
    T  MW8
    In einer VAT sieht es dann so aus.

    MW6 DEZ 137
    MW8 DEZ -28568

    Kann mir jemand helfen den Wert so umzurechnen, dass es so dargestellt werden kann?

    MW6 DEZ 901
    MW8 DEZ 5400

    Vielen Dank im Voraus für Hilfe.
    Pit
    Zitieren Zitieren Umwandeln DINT in 2 INT  

  2. #2
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Dividiere durch 10000, den Quotient schreibe in das eine MW und den Divisionsrest in das andere MW.
    /D und MOD sind Deine Freunde.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    friendo (02.03.2016)

  4. #3
    eike ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.03.2008
    Beiträge
    12
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Harald,

    coole Sache, funktioniert einwandfrei, Danke.
    Jetzt würde ich nur gerne noch eines wissen, wieso durch 10000 dividiert wird?

    Danke
    Pit

  5. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Das "sieht" man doch!
    Ehrlich, so simple Mathematik mag ich eigentlich nicht erklären... Zahlenzerlegung und Ziffernabspaltungen sollten zum Grundwissen eines Programmierers gehören.
    Letzte Ziffer abspalten = MOD 10
    4 letzte Ziffern abspalten = MOD 10000

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  6. #5
    Registriert seit
    11.03.2011
    Beiträge
    384
    Danke
    32
    Erhielt 80 Danke für 69 Beiträge

    Standard

    Das muss auch so sein. Wenn Du im Unterricht aufgepasst hast, weist Du, dass 9015400dez=899068hex sind.
    Wenn Du nun die beiden Worte einzeln betrachtest, hast Du 89hex=137dez und 9068hex=-28568dez

    Warum teilst Du nicht einfach durch 10000 und schiebst das Ergebnis in MW8 und errechnest dann den Wert für MW6?
    Also MW8 laden mit 10000 multiplizieren und zwischenspeichern, den Ausgangswert laden, und Zwischenwert abziehen und Ergebnis in MW6 speichern.

    Soll das tatsächlich irgendwo eingesetzt werden, musst Du checken, ob der Ausgangswert nicht größer als 327670000 ist, weil sonst der "Rest" nicht mehr in MW6 passt.
    Und dann checkst Du noch, ob das auch alles für negative Ausgangswert funktioniert und wo hier die Grenze liegt.

    -----------
    Ja, MOD macht es leichter, daran hatte ich nicht gedacht

  7. #6
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.291 Danke für 2.660 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    so simple Mathematik mag ich eigentlich nicht erklären...
    Sorry, ich stand grade am Bahnsteig. Jetzt sitz ich beim ersten Bierchen und habe Muße für die Erklärung.

    Bei Division von Dezimalzahlen durch eine Zehnerpotenz wird nur das Dezimalkomma nach links verschoben, um so viele Stellen wie der Divisor Nullen hat. Bei Ganzzahl-Division gehen dabei die Nachkommastellen verloren. (Übrig blieb Deine 901)

    Bei modulo-Division durch eine Zehnerpotenz gehen alle Ziffern oberhalb der Nullen des Divisors verloren. Es bleiben nur die unteren Ziffern erhalten, so viele wie der Divisor Nullen hat. (übrig blieben Deine 5400)

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

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

    friendo (02.03.2016)

  9. #7
    eike ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    27.03.2008
    Beiträge
    12
    Danke
    6
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Alles klar.

    Vielen Dank euch beiden.
    Habs kapiert. Prost.

    Bis denn
    Pit

Ähnliche Themen

  1. INT oder DINT in CHAR/BYTE Umwandeln
    Von MAVI im Forum Simatic
    Antworten: 41
    Letzter Beitrag: 29.04.2016, 12:51
  2. Typwandlung DINT -> INT???
    Von Olav im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.08.2014, 09:38
  3. Antworten: 10
    Letzter Beitrag: 05.12.2013, 18:33
  4. Time_of_Day umwandeln in Int oder DInt!?
    Von Chris2k8 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 05.11.2008, 18:22
  5. Int / Dint
    Von Gerri im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.07.2008, 11:14

Lesezeichen

Berechtigungen

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