-> Hier kostenlos registrieren
Hallo zusammen,
ich bräuchte etwas Unterstützung beim Verarbeiten/Zerlegen von binären Daten, vorzugsweise in ST.
Meine Hardware ist ein Beckhoff CX9000.
Ich bekomme von einem Schnittstellenmodul eine binäre Zeichenfolge, die ich in ein Array von Bytes (nennen wir es ByteArray) schreibe. Nun weiß ich, dass sich in den Bytes 137-141 ein 40bit unsigned INT (LSB ist hier hinten, d.h. Byte 141) versteckt. Wie kriege ich die Zahl am elegantesten und vor allem performantesten in eine Variable? Wegen der Länge kommt meines Erachtens nur ein LREAL in Frage, weil es keine Ganzzahltypen mit mehr als 32bit gibt (zumindest sind die in Twincat nicht implementiert).
Mein Ansatz wäre demnach (wenn 'wert' meine LREAL-Variable ist):
Geht das irgendwie eleganter bzw. ist das in Sachen Performance ideal so? Ich muss nämlich mehrere solcher "Umwandlungen" vornehmen.
Besten Dank für Eure Hilfe
Christian
ich bräuchte etwas Unterstützung beim Verarbeiten/Zerlegen von binären Daten, vorzugsweise in ST.
Meine Hardware ist ein Beckhoff CX9000.
Ich bekomme von einem Schnittstellenmodul eine binäre Zeichenfolge, die ich in ein Array von Bytes (nennen wir es ByteArray) schreibe. Nun weiß ich, dass sich in den Bytes 137-141 ein 40bit unsigned INT (LSB ist hier hinten, d.h. Byte 141) versteckt. Wie kriege ich die Zahl am elegantesten und vor allem performantesten in eine Variable? Wegen der Länge kommt meines Erachtens nur ein LREAL in Frage, weil es keine Ganzzahltypen mit mehr als 32bit gibt (zumindest sind die in Twincat nicht implementiert).
Mein Ansatz wäre demnach (wenn 'wert' meine LREAL-Variable ist):
Code:
wert := BYTE_TO_LREAL(ByteArray[137]) * 4294967296 + BYTE_TO_LREAL(ByteArray[138]) * 16777216 + BYTE_TO_LREAL(ByteArray[138]) * 65536 + BYTE_TO_LREAL(ByteArray[138]) * 256 + BYTE_TO_LREAL(ByteArray[141])
Geht das irgendwie eleganter bzw. ist das in Sachen Performance ideal so? Ich muss nämlich mehrere solcher "Umwandlungen" vornehmen.
Besten Dank für Eure Hilfe
Christian