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

Ergebnis 1 bis 8 von 8

Thema: Vorzechenlose Ganzzahl 32Bit (DWORD) in REAL wandeln und zurück.

  1. #1
    Registriert seit
    07.02.2008
    Ort
    Tonga
    Beiträge
    72
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Ausrufezeichen


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo zusammen ich habe eine VorzeichenLOSE Ganzzahl 32bit als DWORD vorliegen.

    Nun möchte ich diese um in S7 ordentlich arbeiten zu können in ein REAL wandeln und zwar über den ganzen Bereich also 2^0 - 2^32.

    Gibt es dafür einen Baustein?

    Mit Befehl DTR geht es nicht, denn 2^32 (16#FFFFFFFF) ergibt -1.
    Zitieren Zitieren Vorzechenlose Ganzzahl 32Bit (DWORD) in REAL wandeln und zurück.  

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

    Standard

    Hallo,
    es gibt dann erstens die Einschränkung, das die Wandlung das Ding wie einen DINT behandelt (was du ja schon bemerkt hast) - gut dafür könnte man sich ggf. einen Workaround schaffen wenn man das Ganze Wort-weise betrachtet - aber das Nächste ist dann ja die Genauigkeit des Real's. Der stellt ja nur ein paar Nachkommastellen dar (ich meine 6) und mehr gibt es dann auch nicht. Das heißt dann das einen große Zahl nach der Wandlung inhaltlich schon nicht mehr stimmt (wenn es dir hier auf die Genauigkeit ankommt) ...

    Gruß
    Larry

  3. #3
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Theoretisch müßtest du mit DTR wandeln und dann (wenn negativ) 4294967295 ( entspricht FFFFFFFF) dazu addieren.
    4294967295 in Real gehr aber leider nicht so genau aufzulösen, da Real nur mit 7 Ziffern Genauigkeit arbeitet. Daher wird eine Wandlung so großer Zahlen also ungenau.
    Du könntest auch einfach deine DWord durch 2 dividieren, wandeln und anschließend die Real mit 2.0 multiplizieren.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  4. #4
    Registriert seit
    22.06.2009
    Ort
    Sassnitz
    Beiträge
    11.186
    Danke
    923
    Erhielt 3.292 Danke für 2.661 Beiträge

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Du könntest auch einfach deine DWord durch 2 dividieren, wandeln und anschließend die Real mit 2.0 multiplizieren.
    .. wenn die zusätzliche Ungenauigkeit durch das Verringern der Rechenauflösung um 1 Bit tolerierbar ist. (?)
    Das Dividieren darf dann aber das höchste Bit im DWORD nicht als Vorzeichen interpretieren.
    Also NICHT mit "/D" sondern mit "SRD 1" dividieren.

    Ich würde die Zahl gar nicht in REAL wandeln, sondern immer in Ganzzahl (vorzeichenlos!) rechnen.

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

    FAQ: Linkliste SIMATIC-Kommunikation über Ethernet

  5. #5
    Registriert seit
    07.02.2008
    Ort
    Tonga
    Beiträge
    72
    Danke
    14
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen

    Ich würde die Zahl gar nicht in REAL wandeln, sondern immer in Ganzzahl (vorzeichenlos!) rechnen.

    Harald
    .. und beim beobachten sieht man nur Gemüse.

    Die größte Zahl in REAL ohne an Genauigkeit zu verlieren ist also 9.999.999 oder unsigned HEX98 96 7f?

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.222
    Danke
    533
    Erhielt 2.698 Danke für 1.950 Beiträge

    Standard

    Zitat Zitat von PN/DP Beitrag anzeigen
    .. wenn die zusätzliche Ungenauigkeit durch das Verringern der Rechenauflösung um 1 Bit tolerierbar ist. (?)
    Das Dividieren darf dann aber das höchste Bit im DWORD nicht als Vorzeichen interpretieren.
    Also NICHT mit "/D" sondern mit "SRD 1" dividieren.

    Harald
    Ist klar, bei kleinen Zahlen verliert er dann das Bit, aber ich würde dann ohnehin zuerst prüfen, ob die Prozedur (/2,*2.0) nötig ist und nur bei Dword größer 7FFFFFFF diese anwenden.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

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

    Standard

    Zitat Zitat von cosmomaster Beitrag anzeigen
    .. und beim beobachten sieht man nur Gemüse.

    Die größte Zahl in REAL ohne an Genauigkeit zu verlieren ist also 9.999.999 oder unsigned HEX98 96 7f?
    Das mit dem Gemüse haben wir uns ja nicht so ausgesucht ...

    Und nein ... du bekommst durch die interne Erstellung der Realzahl noch weitere (relativ unkontrollierbare) Ungenauigkeiten da hinzu.
    Ist jetzt nur beispielhaft ... aber aus INT/DINT/DWORD 2 kann durchaus Real 1.999997 oder 2.000003 werden ...

    Gruß
    Larry

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

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von cosmomaster Beitrag anzeigen
    Die größte Zahl in REAL ohne an Genauigkeit zu verlieren ist also 9.999.999 oder unsigned HEX98 96 7f?
    Die Genauigkeit bei REAL ist exakt 24 Stellen im Dualsystem. Das ergibt eben ungefähr 6 bis 7 Stellen im Dezimalsystem.
    Wo genau die Grenze liegt kann ich nicht sagen, aber 9.999.999 ist sie sicher nicht. Ich bin mir auch nicht sicher, dass es eine exakte Grenze gibt. Vermutlich ist es eher ein Bereich unter dem die Wandlung immer ohne Rundung und darüber nur mit Rundung auskommt; in dem Bereich mal so oder so.

    Schau dir mal http://support.automation.siemens.co...ew/de/22172161 an, da werden auch spannende Effekte beschrieben.
    Geändert von miami (11.01.2013 um 17:47 Uhr)

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 24.06.2012, 09:52
  2. Bits wandeln 32Bit <=> Dword
    Von Shettyman im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 22.11.2010, 20:54
  3. BCD-Zahl in Ganzzahl (16 Bit) wandeln
    Von baui im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 05.03.2009, 17:08
  4. Umwandlung real -> hex und zurück
    Von Flo im Forum Programmierstrategien
    Antworten: 3
    Letzter Beitrag: 20.08.2008, 22:34
  5. 32bit GANZZAHL links schieben
    Von Karli im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 30.06.2008, 12:28

Stichworte

Lesezeichen

Berechtigungen

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