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

Ergebnis 1 bis 9 von 9

Thema: Integer in Double Integer umwandeln

  1. #1
    Registriert seit
    26.11.2009
    Beiträge
    41
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe einen Integer-Wert den ich in einen Datenbaustein transferieren möchte.
    Die Varibale im DB ist als Double Integer deklariert.
    Kann ich meinen Integer-Wert direkt in die Double Integer Varibale des DB's transferieren oder muss er vorher mit Hilfe von ITD umgewandelt werden?

    Gruß
    Anger
    Zitieren Zitieren Integer in Double Integer umwandeln  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    Hallo,
    wenn die Zahl auch negativ werden kann dann solltest du das mit dem ITD machen ...

    Gruß
    Larry

  3. #3
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard

    Solltest Du mit ITD umwandeln, ansonsten bekommst Du Probleme, sobald Du mit negativen Zahlen arbeitest.
    Das Vorzeichen ist immer das höchstwertige Bit, bei Integer also Bit 15, bei Double Bit 31. Wenn Du nur verschiebst, bleibt das Vorzeichenbit an Stelle 15 und wird nicht auf 31 verschoben. Damit hast Du eine ganz andere (positive) Zahl.

  4. #4
    Anger ist offline Benutzer
    Themenstarter
    Registriert seit
    26.11.2009
    Beiträge
    41
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Meine Zahl kann nicht negativ werden, was passiert jedoch wenn die Zahl größer als 32767 wird?

  5. #5
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    Zitat Zitat von Anger Beitrag anzeigen
    Meine Zahl kann nicht negativ werden, was passiert jedoch wenn die Zahl größer als 32767 wird?
    Wenn die Zahl ein Integer "INT" ist, dann ist das schlicht und ergreifend nicht möglich, das ginge nur bei UINT.
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  6. #6
    Anger ist offline Benutzer
    Themenstarter
    Registriert seit
    26.11.2009
    Beiträge
    41
    Danke
    3
    Erhielt 0 Danke für 0 Beiträge

    Standard

    UINT? Ich kenne bis jetzt nur INT und DINT.

  7. #7
    Registriert seit
    15.01.2005
    Ort
    In der Mitte zwischen Bayreuth/Weiden
    Beiträge
    6.752
    Danke
    323
    Erhielt 1.526 Danke für 1.286 Beiträge

    Standard

    UINT = 16 Bit Ganzzahl Vorzeichenlos = 0-65535

    INT = 16 Bit Vorzeichenbehaftet = -32768 ... 0 .... 32767

    P.S. Gerade gesehen, das du deinen Beitrag als Step7 getagged hast, hier gibt es UINT als Datentyp nicht explizit.

    Mfg
    Manuel
    Geändert von MSB (04.02.2015 um 21:11 Uhr)
    Warum denn einfach, wenn man auch Siemens einsetzen kann!

    Wer die grundlegenden Freiheiten aufgibt, um vorübergehend ein wenig Sicherheit zu bekommen, verdient weder Freiheit noch Sicherheit (B. Franklin).

  8. #8
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.792
    Danke
    398
    Erhielt 2.417 Danke für 2.013 Beiträge

    Standard

    @Manuel:
    Da wäre es dann ein Word - auch wenn du da diese Zahl nicht direkt reinschreiben kannst (nur als Hex-Wert).
    Geändert von Larry Laffer (05.02.2015 um 09:33 Uhr) Grund: fehlerhafte Angabe

  9. #9
    Registriert seit
    03.02.2015
    Ort
    Hatten
    Beiträge
    183
    Danke
    16
    Erhielt 32 Danke für 29 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Larry Laffer: Nicht DWord, sondern WORD... immer noch 16 Bit.

    @Anger:
    Vielleicht nochmal anders beschrieben, zum besseren Verständnis:
    Du hast 16Bit zur Verfügung, also ein WORD.
    In diesem kannst Du also Werte von 0..655535 speichern.
    Das entspricht einem UInt, einem unsigned (vorzeichenlosem) Integer. Das ist eher ein Typ aus Hochsprachen, wo man wiederum das WORD nicht als Datentypen kennt...
    Nimmst Du nun das höchstwertige Bit, um das Vorzeichen zu speichern, so hast Du nur noch 15Bit zur Verfügung, um Deine Zahl zu speichern, also 32767, dafür aber eben im positiven, wie im negativen.
    Das kann man mit dem Windows-Rechner sich ganz gut veranschaulichen, wenn man auf wissenschaftliche Ansicht umstellt und dann mal zwischen binär und dezimal hin- und herschaltet.

    Zu Deiner Frage: Wenn Deine Zahl jetzt "größer" wird, kann sie nicht gespeichert werden, weil Dir einfach Bits fehlen, um den zusätzlichen Wertebereich zu speichern. Daher bekommst Du einen "Überlauf" --> Wie die Regenwassertonne. Der letzte Tropen paßt nicht mehr rein.
    Überlauf bedeutet, die Zahl springt von ihrem größten auf ihren kleinsten Wert:
    WORD/UInt: 1111 1111 1111 1111 (binär) = 65535 --> 0000 0000 0000 0000 (binär) = 0
    INT/SInt: 0111 1111 1111 1111 (binär) = 32767 --> 1000 0000 0000 0000 (binär) = -32768

    Da liegt also der entscheidende Unterschied: Wenn Du einen Überlauf bekommst, fängst Du einmal (WORD) wieder bei 0 an zu zählen, das andere Mal (INT) bei -32768.
    So lange Du Dich (sicher) im Wertebereich 0..32767 bewegst, brauchst Du Dir über den Datentypen keine Gedanken machen. Nur, wenn Du diesen Wertebereich verläßt/verlassen willst/unvorhergesehen verlassen könntest...

Ähnliche Themen

  1. Double Integer to String und zuweisen
    Von DocSchmid im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 17.01.2013, 08:27
  2. Char umwandeln in Integer
    Von viperserver im Forum Simatic
    Antworten: 47
    Letzter Beitrag: 07.03.2011, 15:23
  3. Integer in S7-Zeit umwandeln
    Von Woto im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 22.02.2008, 14:08
  4. REAL in Integer umwandeln
    Von dummyuser im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 02.10.2006, 14:59
  5. Integer Wert (t in ms) in S5Time umwandeln?
    Von Anonymous im Forum Simatic
    Antworten: 8
    Letzter Beitrag: 27.07.2006, 09:00

Lesezeichen

Berechtigungen

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