ich lese Daten (Float-Werte) über Modbus ein und möchte diese in der SPS weiter als REAL-Werte verwenden.
Ich lese pro Messwert 2 Wörter aus.
Die beiden Wörter setze ich zu einem Doppelwort zusammen.
Ich bekomme z.B. ein Doppelwort mit folgendem Inhalt: 01000000 01000000 00000000 00000000
Das Datenformat ist entspricht IEEE-754.
Eine Konvertierung (z.B. unter: https://www.h-schmidt.net/FloatConverter/IEEE754de.html) ergibt einen Messwert von 2,5.
Dieser Messwert ist auch korrekt.
Wie kann ich die Bitfolge im IEEE-754-Format in TwinCAT umwandeln um den korrekten Messwert zu erhalten?
Alle Versuche per Pointer, festen Adressen und Konvertierungsbefehl sind gescheitert.
Beachte: genaugenommen darf da nichts "umgewandelt" werden, weil das Bitmuster der 2 Word hat schon das Bitmuster eines REAL. Man muß nur die Bitmuster der beiden Word in der richtigen Byte-Reihenfolge in eine REAL-Variable speichern, aber so, daß das TwinCat nicht irgendwas umwandelt/konvertiert. Das geht in TwinCat nur über Speichern in einen Speicher und umkopieren in eine REAL-Variable mit MEMCPY, oder direkt wieder als REAL-Wert herauslesen per Pointer oder UNION, oder per Pointer direkt in eine REAL-Variable speichern. Der Trick dahinter: Das TwinCat darf dabei nicht wissen, daß das Bitmuster in eine REAL-Variable gespeichert wird, weil dann will es unbedingt das Bitmuster von Ganzzahl zu REAL konvertieren/umwandeln, was ja falsch ist.