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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Rechenoperationen (DINT mit INT)

  1. #1
    Registriert seit
    31.10.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Es gibt ja die möglickeit in den Eigenschaften das man mit einem INT-Format mit einem DINT-Format rechnen kann.
    Ich hatte bis jetzt das Glück, dass das Ergebnis nie größer als ein INT-Format war!
    Mich würde jetzt nur gerne mal interessieren was die SPS anstellt bzw. wie sie vor geht wenn die Zahl größer als ein INT-Format ist (z.B. DINT-Format).
    Dort erscheint irgendwie ein wirkürliches Ergebenis!
    Zitieren Zitieren Rechenoperationen (DINT mit INT)  

  2. #2
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Ich verstehe zwar nicht genau was Du meinst, aber wenn Du DINT-Zahlen mit INT Befehlen bearbeitest wird
    a) wegen des Vorzeichens
    b) wegen nicht berücksichtiger Bits 16-31
    klarerweise ein seltsames Ergebnis entstehen.

  3. #3
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Du kannst den INT-Wert in DINT wandeln und schon gehts weiter. Der AWL-Befehl lautet ITD.

    Zum Zurückwandeln gibts keinen Befehl. Entweder der DINT-Wert ist im Zahlenbereich eines INT, dann transferierst du ganz einfach in einen INT. Ist er DINT ausserhalb passt es sowieso nicht.
    mfG Aventinus

  4. #4
    Registriert seit
    09.08.2006
    Beiträge
    3.629
    Danke
    912
    Erhielt 656 Danke für 542 Beiträge

    Standard

    Zitat Zitat von Aventinus Beitrag anzeigen
    ... der DINT-Wert ist im Zahlenbereich eines INT, dann transferierst du ganz einfach in einen INT.
    Nee, das Vorzeichen steht beim DINT ganz woanders. Das funktioniert nur, wenns positiv ist. Gruß

  5. #5
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Zitat Zitat von ducati Beitrag anzeigen
    Nee, das Vorzeichen steht beim DINT ganz woanders. Das funktioniert nur, wenns positiv ist. Gruß
    Das funktioniert doch, denn wenn du eine negative Zahl > -32768 hast dann sind die Bits 15-31 true und somit ist es egal ob das Bit 31 oder das Bit 15 das Vorzeichen ist. Bei positiven Zahlen ist es ähnlich, ist die Zahl < 32767 sind die Bits 15-31 false.
    mfG Aventinus

  6. Folgender Benutzer sagt Danke zu Aventinus für den nützlichen Beitrag:

    ducati (05.02.2013)

  7. #6
    Son1317 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.10.2012
    Beiträge
    8
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ich starte einfach mal ein Beispiel:
    Int = 16 Bit <-- dort steht die Zahl 15 drinnen -->Binär: 0000 0000 0000 1111
    DInt = 32Bit <-- dort steht die Zahl 70000 drinnen -->Binär:0000 0000 0000 0001 0001 0001 0111 0000

    Sobald die Zahl 15 in den Akku geladen wird, werden die reslichen Bits 16-31 mit nullen gefüllt!
    Somit ist dies doch möglich das ich so rechnen kann oder??
    oder ist es notwendig das ich das INT ind einem DINT wandel??

  8. #7
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    Ist möglich so, aber ab 32767 wirds unangenehm.
    Sprich!
    Was willst Du eigentlich machen.
    Wenn ich eine INT mit einer DINT addieren muss heisst das bei mir:
    L DW
    L DD
    +D
    Warum funktioniert das bei Dir nicht?

    und bedenke dennoch die eventuellen Probleme beim Vorzeichen der INT-Zahl!!!!!!
    Du musst da wissen was Du tust.

  9. #8
    Registriert seit
    19.07.2010
    Beiträge
    1.289
    Danke
    213
    Erhielt 267 Danke für 233 Beiträge

    Standard

    Notwendig ist es nicht, sofern du nur positive Zahlen hast. Denn dann ist das Bitmuster für INT und DINT identisch.

    Bei neagiven Zahlen werden aber eim Laden von z.B. -10 die Bits 15-31 mit False aufgefüllt, als Dint wäre das dann aber 65526.
    mfG Aventinus

  10. #9
    Registriert seit
    08.02.2007
    Ort
    A-2320
    Beiträge
    2.252
    Danke
    244
    Erhielt 332 Danke für 303 Beiträge

    Standard

    bzw machs einfach so wie von Aventinus im Beitrag #3
    L DW
    ITD
    L DD
    +D
    Da geht nie was schief, weil richtig.

  11. Folgender Benutzer sagt Danke zu borromeus für den nützlichen Beitrag:

    Aventinus (05.02.2013)

  12. #10
    Registriert seit
    09.11.2007
    Ort
    Rhein Main (Darmstadt)
    Beiträge
    663
    Danke
    61
    Erhielt 112 Danke für 80 Beiträge

    Daumen runter


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Ich denke, dass man vorher planen sollte und überlegen muss, welchen Wertebereich man ausfüllen wird. Dann kommt eben INT oder DINT raus. Wenn man später sieht, dass es einen Überlauf geben kann, dann sollte man refaktorieren, sprich das Problem konsequent überarbeiten und nicht rumcasten. Basteln macht über kurz oder lang ein System unübersichtlich und instabil.

    Viel schlimmer fallen mir immer wieder Code Schnipsel auf, die in der "Not" anfangen, Typen auf REAL zu casten und später wieder rückwandeln.
    Als Freelancer immer auf der Suche nach interessanten Projekten.
    Zitieren Zitieren Vorher planen  

Ähnliche Themen

  1. Typwandlung DINT -> INT???
    Von Olav im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 19.08.2014, 09:38
  2. Time_of_Day umwandeln in Int oder DInt!?
    Von Chris2k8 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 05.11.2008, 18:22
  3. Int / Dint
    Von Gerri im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 09.07.2008, 11:14
  4. SCL Typumwandlung DINT => INT
    Von fbeine im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 06.02.2006, 14:05
  5. Wandeln von DINT nach INT
    Von Anonymous im Forum Simatic
    Antworten: 3
    Letzter Beitrag: 12.01.2006, 11:20

Lesezeichen

Berechtigungen

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