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

Ergebnis 1 bis 9 von 9

Thema: Datentyp INT ohne Vorzeichen??

  1. #1
    Registriert seit
    28.11.2010
    Beiträge
    18
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich stehe hier vor folgendem kleinem Verständnisproblem:

    Ich lade einen Byte-Wert, schiebe den Wert um 8 nach links, und addiere einen weiteren Byte-Wert dazu. Das Ergebnis transferiere ich in eine Variable vom Typ INT.

    Und nun kapiere ich nicht ganz, warum diese Variable den Wert 65222 annehmen kann? Eigentlich sollte hier dann der Wert -314 drinstehen.

    Oder habe ich da irgendwas übersehen? Ich war eigentlich der Meinung, dass das MSB beim INT für das Vorzeichen zuständig wäre?

    Wenn dieses Verhalten in der Form doch passt: Wie komm ich dann auf den INT-Wert unter Berücksichtigung des Vorzeichens?

    Vielen Dank für Eure hilfreichen Tips im Voraus,
    Wolfgang
    Zitieren Zitieren Datentyp INT ohne Vorzeichen??  

  2. #2
    Registriert seit
    02.10.2010
    Beiträge
    453
    Danke
    62
    Erhielt 87 Danke für 69 Beiträge

    Standard

    Schreib doch mal den Code...

  3. #3
    Registriert seit
    23.04.2009
    Ort
    Allgäu
    Beiträge
    3.042
    Danke
    241
    Erhielt 863 Danke für 617 Beiträge

    Standard

    Zitat Zitat von jtm Beitrag anzeigen
    Und nun kapiere ich nicht ganz, warum diese Variable den Wert 65222 annehmen kann? Eigentlich sollte hier dann der Wert -314 drinstehen.
    Hallo Wolfgang,
    das ist doch nur ein Darstellungsproblem.
    Gruß
    Paule
    ----------------------------------------------------------------------------
    > manchmal verliert man und manchmal gewinnen die anderen <

  4. Folgender Benutzer sagt Danke zu Paule für den nützlichen Beitrag:

    jtm (29.12.2010)

  5. #4
    jtm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.11.2010
    Beiträge
    18
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Ok, hier mal ein Beispiel (die Konstanten sind im Code natürlich durch Variablen ersetzt):

    //Laden des High-Bytes
    LD 254
    SLD 8
    T #TempInt (hier wird dann schon 65024 abgelegt, obwohl TempInt vom Typ INT ist)


    //Laden des Low-Bytes
    LD 198
    LD #TempInt
    +I
    T #Result (hier stehen dann die genannten 65222 drin)

  6. #5
    jtm ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    28.11.2010
    Beiträge
    18
    Danke
    1
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Paule Beitrag anzeigen
    Hallo Wolfgang,
    das ist doch nur ein Darstellungsproblem.
    OK, das mit Darstellung klingt natürlich vernünftig. Ich war etwas verwirrt, dass die Darstellung dann trotzdem vorzeichenlos erfolgt (obwohl der Datentyp ja definiert ist).

  7. #6
    Registriert seit
    23.05.2007
    Beiträge
    10
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    versuche mal

    L Wert
    L 65535
    UW
    T Wert

  8. #7
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von jtm Beitrag anzeigen
    Ich lade einen Byte-Wert, schiebe den Wert um 8 nach links, und addiere einen weiteren Byte-Wert dazu. Das Ergebnis transferiere ich in eine Variable vom Typ INT.

    Und nun kapiere ich nicht ganz, warum diese Variable den Wert 65222 annehmen kann? Eigentlich sollte hier dann der Wert -314 drinstehen.
    Wo wird Dir denn der Wert 65222 angezeigt? Beim Beobachten des AWL-Programms in der Spalte für Akku1?
    Der Akku1 hat 32 Bit. Da Du nur die unteren 16 Bit bearbeitest und die oberen 16 Bit alle auf 0 bleiben (der Akkuwert ist DW#16#0000FEC6), ist diese Anzeige des Akku1-Wertes korrekt (die Akkus kennen strengenommen keine Datentypen. Erst eine Akku-Operation sagt, wie der Akku-Wert interpretiert werden soll).
    Erst wenn Du die unteren 16 Bit des Akku1 in eine globale INT-Variable transferierst, dann wird Dir beim Beobachten dieser Variable (als Dezimal in einer Variablentabelle) korrekt -314 angezeigt.

    So wie Paule schon schrieb ist das aber nur ein Darstellungsproblem, wie ein Wert angezeigt wird.
    Es wird erst wichtig, wenn nachfolgende Operationen den Wert interpretieren (als vorzeichenbehaftet oder nicht).

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  9. #8
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.192
    Danke
    925
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von compi Beitrag anzeigen
    versuche mal

    L Wert
    L 65535
    UW
    T Wert
    Was soll das bringen? Damit zwingst Du kein Beobachtungsprogramm dazu, den Wert in der Variable Wert als vorzeichenbehafteten Wert zu interpretieren. Der Wert in der 16-Bit-Variable Wert wird durch diesen überflüssigen Code nicht verändert. (Wäre Wert eine 32-Bit-Variable, würdest Du damit das negative Vorzeichen entfernen.)

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  10. #9
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.402 Danke für 2.001 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,
    du arbeitest die ganze Zeit im Doppelwort-Format. Dort ist diese Zahl absolut zulässig. Wie wäre es, das ganze in der Wort-Breite noch einmal zu versuchen ?

    Zitat Zitat von jtm Beitrag anzeigen
    //Laden des High-Bytes
    L 254
    SLW 8
    T #TempInt (hier wird dann schon 65024 abgelegt, obwohl TempInt vom Typ INT ist)


    //Laden des Low-Bytes
    L 198
    L #TempInt
    +I
    T #Result (hier stehen dann die genannten 65222 drin)
    welchen Typ hat übrigens Result ?

    Gruß
    Larry

Ähnliche Themen

  1. Dint Vorzeichen immer minus einstellen
    Von bludie im Forum Simatic
    Antworten: 24
    Letzter Beitrag: 18.06.2010, 06:02
  2. DI_STRNG ohne Vorzeichen!
    Von hoT im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 11.01.2010, 23:55
  3. Antworten: 2
    Letzter Beitrag: 18.01.2006, 16:32
  4. Neg. Vorzeichen in E/A Feld eingeben
    Von knollmeister im Forum HMI
    Antworten: 2
    Letzter Beitrag: 07.11.2005, 13:26
  5. Vorzeichen ignorieren
    Von Lipperlandstern im Forum Simatic
    Antworten: 7
    Letzter Beitrag: 22.02.2005, 23:41

Lesezeichen

Berechtigungen

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