LabVIEWForum.de - Von 4x uint8 zu uint32 zu int32 zu fxp

LabVIEWForum.de

Normale Version: Von 4x uint8 zu uint32 zu int32 zu fxp
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,

stehe seit paar Tagen vor einem "kleinen" Problem. Ich bekomme über CAN eine Nachricht, die aus 8 Bytes besteht. Nun möchte ich 4 Bytes zusammenfassen, damit ich einen 32Bit wert bekomme, was ich auch hinbekomme mit hi+lo. Allerdings hätte ich nun gerne, dass der Wert nun als FXP 32en21 behandelt wird. Wenn ich den aktuellen int32 in fxp convertiere, übernimmt er den int32 wert als vorkommawert, statt einfach an 11. stelle den Punkt zu setzen. Ich hoffe ich konnte mich klar AusdrückenSmile) Hätte da jemand eine Idee?

Danke schon mal im Voraus!
Hast Dus schon mal mit Typumformung versucht? Bei mir scheint die Konvertierung Array_of_U8 <--> FXP sowie String <--> FXP in beiden Richtungen zu funktionieren, aber ich bin kein Experte in Sachen FixPoint-Format.
Du müßtest evtl. mal so ein Byte-Array posten und außerdem das, was herauskommen soll.
[attachment=22124][attachment=22125]
Kann mal einer aus einem richtigen LV, also einer englischen Version, keiner deutschen Version, die Beschreibung von "Wortlänge" und "Integer-Länge" hier posten. Ich werd aus der deutschen Beschreibung einfach nicht schlau.

Irgendwie funktioniert das alles nur suboptimal. Eigentlich möchte man doch haben, dass ein (vorzeichenloser) 32Bit-Wert z.B. automatisch einen 11Bit-breiten Vorkommawert (also maximal 2047) hat. Die restlichen 21 Bit sollen als Nachkommawert gelten. Eine 1 wäre also nicht das gesetzte B0 des 32Bit-Wertes, sondern das gesetzte B21 (= B31 - (11-1)).

Lucki's Methode gemäß linkes Bild wäre ein harter Typcast (den ich eigenlich immer vermeiden möchte), sollte aber funktionieren, wenn die Konfiguration des FXP-Formates nachvollziehbar wäre.

Ein normaler U32->FXP-Konverter würde den ganzen U32 natürlich als Vorkommastelle nehmen.

Eine andere Möglichkeit wäre noch, man teilte die U32-Zahl durch 2^21, wandle nach dbl und gebe das auf einen FXP. Und eigentlich sollte doch der FXP eine DBL-Zahl verstehen können. Die hat schließlich auch Vor- und Nachkommastellen.

Und außerdem: Muss es unbedingt FXP sein, tut es DBL nicht auch?
' schrieb:Kann mal einer aus einem richtigen LV, also einer englischen Version, keiner deutschen Version, die Beschreibung von "Wortlänge" und "Integer-Länge" hier posten. Ich werd aus der deutschen Beschreibung einfach nicht schlau.
Mach ich doch gerne: Word length und Integer word length.
Hierzu die Screenshots:
[attachment=22127][attachment=22128]
Word length ist also die Gesamtgröße, Integer word length die Anzahl an Bits, die für den "Vorkommawert" zuständig sind. Erkennt man prima, indem man mal beim zweiten Feld den max./min. Wert eingibt.

Gruß, Jens
' schrieb:Word length ist also die Gesamtgröße, Integer word length die Anzahl an Bits, die für den "Vorkommawert" zuständig sind. Erkennt man prima, indem man mal beim zweiten Feld den max./min. Wert eingibt.
Alles richtig, nur darf man deshalb nicht glauben, daß z.B. eine FIX-Zahl mit Wortlänge 2 und 1 Nachkommastelle (Wertevorrat also 0; 0.5; 1; 1.5) im Speicher nur 8 bit oder weniger Platz reserviert. Das Abspeichern aller FIX-Formate scheint immer linksbündig innerhalb von 64bit zu erfolgen, also auch in diesem Beispiel.
[attachment=22129]
Die interessante Frage, was passiert mit so einem Format bei Shift oder Rotation, stößt ins Leere: Es geht nicht.
Referenz-URLs