TIA Byte wandeln zu Real

WSCH

Level-2
Beiträge
22
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hoffe ihr könnt mir weiterhelfen.

Beim Versuch vier Byte in eine Reazahl zu wandeln komme ich nicht zu Ziel. Wenn ich die vier Byte in ein Doppelwort schreibe kommt nicht das erwartete Ergebnis.
Wird der Baustein "LGF_MergeBytetoDWord verwendet wird das erwartete Ergebnis angezeit.

Zum Einsatz kommt TIA V15.1 Update 8

Für Zielführende Hinweise im voraus vielen Dank für Eure Bemühungen.

LGF_MergeBytesToDWord.pngLGF_MergeBytesToDWord_1.png
 
Und je nachdem woher die 4 BYTE kommen beachte die Endianess. Die ist bei Siemens anders wie bei so ziemlich allen anderen. LINK
Am besten immer die BYTEs per Pointer in ein REAL schieben (in der richtigen Reihenfolge).
 
Hoffe ihr könnt mir weiterhelfen.
was erwartest Du denn von der "Umwandlung"? Wo kommen die 4 Bytes her, was steht da drinn? Welcher von Deinen Screenshots ist "richtig" und welcher "falsch"?

Entweder in den 4 Bytes ist ein DINT "drin", dann musst DINT->REAL wandeln (u.U. auch noch Byte/Wort drehen). Oder in den 4 Bytes ist ein REAL "drin" dann müsstest das Bitmuster 1:1 in die REAL-Variable kopieren. Falls die 4 Bytes als REAL nicht von einer Siemens SPS stammen, gibts da verschiedene REAL-Formate. Oder in den 4 Bytes ist was ganz anderes "drin" (UDINT...?) dann musst was ganz anderes machen.

 
Zuletzt bearbeitet:
ja, die Zeile müsste dann so aussehen (habs aber nicht getestet)
Ich kann mir nicht vorstellen dass es so geht. In dem DWORD wird ja dann eine Zahl welche nicht als REAL-Zahl sondern als DINT Zahl interpretiert wird in REAL konvertiert. Da kommt halt irgendwas bei raus. Er bräuchte keine Konvertierung sondern einen 1:1 Move von DW auf Real.
 
Ich kann mir nicht vorstellen dass es so geht. In dem DWORD wird ja dann eine Zahl welche nicht als REAL-Zahl sondern als DINT Zahl interpretiert wird in REAL konvertiert. Da kommt halt irgendwas bei raus. Er bräuchte keine Konvertierung sondern einen 1:1 Move von DW auf Real.
Aber war das bei TIA nicht genau der Unterschied zum Codesys Universum? Im Codesys Universum wurde der Inhalt des DWORDS als UDINT interpretiert und der Wert dann zum REAL gemacht, während in TIA tatsächlich die Bits 1:1 vom DWORD in eine Variable vom Typ REAL übertragen wurden und dadurch etwas sinnvolles rauskam.
Nachtrag: Habe gerade mal im TIA Handbuch nachgesehen.
1768982479688.png
Soweit die Bytes in der richtigen Reihenfolge im DWORD stehen und einem REAL entsprechen, sollte nach einem DWORD_TO_REAL ein sinnvoller REAL-Wert in der Variablen stehen.0x42 0x48 0x00 0x00 müsste 50 entsprechen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Servus,

Ich kann mir nicht vorstellen dass es so geht. In dem DWORD wird ja dann eine Zahl welche nicht als REAL-Zahl sondern als DINT Zahl interpretiert wird in REAL konvertiert. Da kommt halt irgendwas bei raus. Er bräuchte keine Konvertierung sondern einen 1:1 Move von DW auf Real.
Bei expliziter Konvertierung glaub ich das schon.
1768982121025.png
 
Guten Morgen und vielen Dank für die Antworten.
Der Vorschlag bring das erwartete Ergebnis.
"WR_anzeige".Test_real := DWORD_TO_REAL("WR_anzeige".Test_DW);
Hab nur nicht verstanden warum am "LGF_Merge" Baustein das erwartete Ergebnis stand.
Die IEC Prüfung war nicht aktiviert. Mit aktivierter IEC Prüfung wird auch am Ausgang des "LGF_Merge" Baustein eine Real Variabe angemeckert.
 
Hab nur nicht verstanden warum am "LGF_Merge" Baustein das erwartete Ergebnis stand.
Weil da anscheinend direkt DWORD TO REAL gewandelt wird und bei deiner SCL-Code Variante zuerst DWORD TO DINT und dann DINT TO REAL.

Mit aktivierter IEC Prüfung wird auch am Ausgang des "LGF_Merge" Baustein eine Real Variabe angemeckert.
Das passt ja auch, der Baustein erwartet am OUT ja auch ein DWORD und kein REAL.
 
Zurück
Oben