Daten vom com-port lesen und array in floats umwandeln - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA) +---- Thema: Daten vom com-port lesen und array in floats umwandeln (/Thread-Daten-vom-com-port-lesen-und-array-in-floats-umwandeln) |
Daten vom com-port lesen und array in floats umwandeln - estiro - 30.04.2010 14:57 Hallo zusammen, mal zum anfangen: ich bin blutiger Anfänger in LabVIEW und hab mir den Auftrag geangelt, eine IMU auszulesen und darzustellen. Die IMU sendet permanent Daten (Orientierung, GPS, Beschleunigung, Barometer, usw.) folgendermassen: 4 byte präambel (immer gleich), 4 byte roll-winkel, 4 byte pitch-winkel...und zum Schluss eine Checksum. Daten auslesen hat einigermassen geklappt (obwohl er alle paar Sekunden eine Fehlermeldung ausspuckt), aber nun stellen sich mir einige Fragen: 1. Im Datenstring möchte ich die Präambel finden und dann die folgeneden 40 byte bearbeiten. Wie mache ich das? Danach muss ich wieder die Präambel finden usw... 2. Wie wandle ich ein 4byte Datenarray in einen Float um? In C++ habe ich das mit einer Union lösen können. Wäre um jeden Tipp sehr froh! Danke Daten vom com-port lesen und array in floats umwandeln - GerdW - 30.04.2010 16:00 Hallo estiro, zu 2) [attachment=26130] Dafür gibt es eine TypeCast-Funktion. Dazu findest du auch jede Menge weitere Threads hier im Forum. zu 1) Empfangene Bytes im String sammeln. Mit der String-Suche nach deiner Präambel suchen. Die nächsten 40 Zeichen per StringSubset "ausschneiden" und weiterverarbeiten... Daten vom com-port lesen und array in floats umwandeln - eg - 30.04.2010 16:28 Oh ja, ich habe tag täglich mit IMUs zu tun. Meine Hauptbeschäftigung ist User Interfaces für IMUs zu programmieren Also geht folgendermaßen: 1 Byte lesen mit dem ersten Syncbyte vergleichen wenn gleich dann weiter im Switch Case 1 Byte lesen und mit dem 2. Syncbyte vergleichen wenn gleich dann weiter im Switch Case u.s.w. bis alle 4 Bytes zutreffen Das war die Synchronisierung. Weiter geht es mit dem Auslesen des Restes bis zur Checksum (also Read soviel Bytes), Daten noch nicht umwandeln, sondern erst Checksumme auslesen, berechnen, vergleichen und falls gleich, erst dann die Daten umwandeln. Die Umwandlung kann mit TypeCast funktionieren, tut es aber normalerweise nicht, da TypeCast von Big Endian Byte Order ausgeht, was nicht üblich ist. Beim Unflatten from String kannst du aber Byte Order angeben. Bei Fragen fragen... Daten vom com-port lesen und array in floats umwandeln - estiro - 30.04.2010 16:40 Ok, vielen dank euch beiden. Ich werde das mal ausprobieren und dann meine nächsten Probleme posten (weil die kommen ganz bestimmt...). Aber zuerst mal wochenende... @eg: Ich arbeite mit einer Xsens MTi-g IMU. Vielleicht hast du ja schonmal dafür ein User-Interface gemacht!?? Daten vom com-port lesen und array in floats umwandeln - estiro - 03.05.2010 09:06 nächste frage... ich hab jetzt mal die Präambel gefunden und möchte jetzt die Checksum überprüfen. Dafür muss ich meinen String aufsummieren und dann das letzte byte mit null vergleichen. Wie mach ich das? Damit ihr mal was zum lachen habt, hänge ich mein bisheriges VI an. P.s. der Sensor gibt uns Daten in BigEndian, also sollte die Typecast funktion zum parsen funktionieren, oder? |