Modbus inverse Float?! - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenkommunikation (/Forum-Datenkommunikation) +---- Thema: Modbus inverse Float?! (/Thread-Modbus-inverse-Float) Seiten: 1 2 |
Modbus inverse Float?! - Sebbo - 29.11.2010 11:13 Hi, muss im moment eine Kommunikation per Modbus realisieren. Das Funktioniert auch soweit. Leider sind die Daten die ich einlese als "inverse Float" formatiert.... Hat jemand schonmal mit dem Datenformat was zu tun gehabt? Ich kann mit der Bezeichnung nichts anfangen bzw weiss nicht wie ich den wert umformen muss. Modbus inverse Float?! - GerdW - 29.11.2010 11:43 Einfach mal Googeln und ersten Treffer durchlesen... Modbus inverse Float?! - Sebbo - 29.11.2010 13:53 Jo das ist schon ein netter anfang nur leider steht da nicht wie lang die mantisse bzw der exponent ist. Dargestellt sind auch 6 bit grosse bytes ;-) Modbus inverse Float?! - Sebbo - 29.11.2010 16:01 So Lösung ist geschafft.... nach langem suchen die Berrechnung erfolgt nach IEEE 754 hab hier mal nen kleine VI gemacht für die Leute die ähnliche Probleme damit haben sollten Modbus inverse Float?! - jg - 29.11.2010 16:27 Wesentlich schneller und einfacher so: [attachment=30910] Gruß, Jens Modbus inverse Float?! - Lucki - 29.11.2010 16:27 Hmm.. Das Gleitkomma-Zahlenformat nach IEEE 754 ist ist genau das, was auch von Labview selbst verwendet wird. Um die 4 Byte, in denen eine SGL-Zahl gespeichert ist, in die SGL-Zahl selbst zu konvertieren, genügt normalerweise die Funktion "Typumwandlung". Was ist denn jetzt aus dem "inverse Float"-Format geworden. Hat sich das in Nichts aufgelöst? Außerdem: Ein SGL-Zahl braucht 4 Byte (32 Bit). Dein Array hat aber 4*16 = 64 Bit. Was soll das? Beispiel: [attachment=30913] Modbus inverse Float?! - Sebbo - 29.11.2010 16:30 tjo das ist halt der anfänger fehler :-) bin halt nun mal neuling und bin erstmal froh das meine Lösung funktioniert Modbus inverse Float?! - jg - 29.11.2010 16:40 ' schrieb:Außerdem: Ein SGL-Zahl braucht 4 Byte (32 Bit). Dein Array hat aber 4*16 = 64 Bit. Was soll das?4*16bit? Wie kommst du darauf? Im VI werden doch nur Array-Element 0 und 1 verwendet. Also genau 32 bit. Inverse Float ist nur eine andere Übertragungsreihenfolge im Modbus-Protokoll: vgl. hier, Seite 8. Gruß, Jens Modbus inverse Float?! - Lucki - 29.11.2010 17:01 ' schrieb:4*16bit? Wie kommst du darauf? Im VI werden doch nur Array-Element 0 und 1 verwendet. Also genau 32 bit.Ja, ich habe eben nicht so wie Du den intellektuellen Auwand getrieben, mich mit den Innrereien des VI zu befassen. Ich habe nur gesehen, da gehen 64bit rein und ein SGL-Zahl komnmt raus, und das ließ mich fragen. Unsere beider Ergebnisse stimmen übrigens nicht mit dem von Sebbo überein: [attachment=30914] Edit: Habe mir mal mal das von Jens zitierte ModBus-Protokoll angeschaut. Danach werden beim Modbus die Words 0 und 1 vertauscht. Das muß bei der Konvertierung berücksichtigt werden, dann kommt mit dem Zahlenbeispiel im Protokoll das richtige Ergebnis heraus: [attachment=30915] @Sebbo (nachfolgender Beitrag): Dein Ergebnis sieht aber hier ganz anders aus.. Modbus inverse Float?! - Sebbo - 29.11.2010 17:23 Also ich hab gerade nochmal den ModBus abgefragt.... bei allen drei Lösungen kommt bei mir das richtige Ergebniss an. Vermutlich ist bei mir noch ein Bug bei einem der Überläufe. Danke schonmal an euch beiden für die "schöne" Lösung |