LabVIEWForum.de - Anzeigen eines Wertes welcher von RS232 kommt

LabVIEWForum.de

Normale Version: Anzeigen eines Wertes welcher von RS232 kommt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich verstehe etwas in einem Programm nicht und wollte fragen ob es mir jemand erklären könnte.
Ich lese einige Werte aus einem Gerät mit einem VisaRead aus. Diese Werte sind mit einer Mantisse und einem Exponenten. Ich hab mich da jetzt mal ein bisschen eingelesen aber verstehe trotzdem nicht warum in dem SubVi dieser C-Code verwendet wird. Im endeffekt werden da ja nur die einzelnen Bytes mit einer Oder MAskierung verglichen und dann auf die ausgangsvariable geschrieben. Aber ich verstehe nicht wieso?
Im Anhang sind mal das Hauptprogramm, das SubVi und die Erklärung aus dem Datensatz zu der Codierung.
' schrieb:Ich hab mich da jetzt mal ein bisschen eingelesen aber verstehe trotzdem nicht warum in dem SubVi dieser C-Code verwendet wird.
Der Code macht aus jeweils vier Stück U8 ein Stück U32. Das U32 ist dann formatmäßig gesehen ein SGL.

Zitat:Im endeffekt werden da ja nur die einzelnen Bytes mit einer Oder MAskierung verglichen und dann auf die ausgangsvariable geschrieben. Aber ich verstehe nicht wieso?
Verglichen wird da nix. Da werden Bits verschoben und diese verschobenen Werte logisch verodert.

Es liegen ja aufgrund des Lesens von VISA nur Werte im Format U8 vor und zwar vier Stück pro Messgröße. Diese vier Stück müssen nun so verknüpft werden, dass der richtige Messwert herauskommt. Und das geht eben nun mal so wie hier programmiert: Der Exponent z.B. (das ist X4, X8 und X12) muss an die oberste Stelle einer Zahl. Und an die oberste Stelle kommt man, indem man die Zahl (z.B. X4) um 24 Bitpositionen verschiebt. Im Code "((x4 << 16) << 8)". Das ist mit (x4 << 24) identisch. "<<" ist C-Syntax und heißt "Bitweise schieben". Die anderen U8-Werte (also X1, X2 und X3) sind die Mantisse. Und auch diese drei U8-Werte müssen nun an die jeweils richtige Position geschoben werden. Die verschobenen Werte werden nun logisch veroder (ist das Zeichen "|". Das doppelte Zeichen "||" wäre ein boolsche Veroderung). Jetzt muss die entstandene Zahl nur noch von Format U32 in das SGL-Format umgewandelt werden - das geht mit der LV-Typkonvertierung.

Zum allgemeinen Aufbau einer SGL-Zahel siehe auch in WikiPedia unter Fließkommazahl.


Nachtrag:
In wie fern das dritte Bild (Mantisse.bmp) mit dem Code identisch ist, hab ich nciht überprüft. Ich gehe mal davon aus, das der Code richtig funktioniert.
Offtopic2
Ich möchte mal wieder darauf hinweisen, dass es deutlich bessere Bildformate für Screenshots gibt als unkomprimierte BMPs.
Ich habe mir erlaubt, deine Bitmaps durch PNGs zu ersetzen (6kB zu 751 kB, 14kB zu 1061 kB, 110kB zu 958 kB).

Gruß, Jens
Danke für die schnelle Antwort!! Jetzt ist mir das klar.
Ich hab irgend wie gedacht das es eine oder Maskierung ist weil wir so eine ähnliche Syntax mal im Mükrocontroller Unterricht hatten. Aber so ist das jetzt echt logisch.

Eine kleine Frage hab ich noch: Wie macht dieses Type cast die Convertierung? Ich dachte das dies um einiges komplizierter sein sollte da es sich ja um eine Mantisse und zusätzlich um den Exponenten handelt.
Referenz-URLs