Verfasst am: 01.03.2018, 17:27
Titel: Messdaten aus einer Zeile mit fscanf auslesen
Hallo alle zusammen,
ich möchte gerne die Messdaten eines Ultraschallsensors mithilfe von Matlab auswerten. Der Sensor ermittelt die genaue Position des Objekts in dem Raum und gibt die Koordinaten aus. Meine Kenntnisse in Matlab liegen schon Jahre zurück, deshalb greife ich auf das Matlab-Forum zu.
Die Messdaten sind im Anhang wiedergelegt und hier gibt es einen kleinen Ausschnitt der Datei:
Die Koordinaten der Objekte werden in einer ganzen Zeile aufgelistet. P0000 beschreibt den Start des ersten Punktes. X0004 beschreibt den Punkt mit dem Wert 4 auf der X-Achse, dann folgt y=1 und z=6. V0078 sowie ES000001 sind für mich im Moment uninteressant. Es sind immer vier Zahlen oder drei Zahlen mit einem negativ Zeichen nach den Bezeichnungen P,X,Y und Z.
Mein Ziel ist es, die Punkte mit den entsprechenden Koordinaten auszulesen und in einer beliebigen Datei zu speichern, um sie später in einem 3D-Diagramm zu plotten.
Danke für die schnelle Antwort.
Konnte alle Ziffern außer die mit dem negativen Zeichen davor umwandeln. Bekomme bei dem Beispiel 0-21 den Wert NaN raus. Sollte eigentlich am besten -21 bei der Umwandlung stehen.
Danke. Es hat wunderbar funktioniert, jedoch beschäftigt mich noch eine Frage.
Wie schaffe ich es die Messwerte den jeweiligen Koordinaten X,Y und Z automatisch zuzuweisen ? Bei extrem vielen Messdaten wäre sowas vorteilhaft.
Das funktioniert so noch nicht bei dir, da die Werte nicht alle 6 Schritte auftauchen sondern mal nach 6 und dann wieder nach 5. Das müsstest du selbst nochmal rausfinden und anpassen. Falls es nicht klappt melde dich nochmal
Danke nochmals für die Tipps.
Ich habe vorhin nochmal gemessen und festgestellt, dass die Werte immer den gleichen Abstand besitzen. Im Anhang ist die neue Textdatei zusehen.
Konnte jetzt auch die Koordinaten problemlos auslesen und plotten.
fid = fopen('Test-Messungen.txt');
fc = fscanf(fid,'%s');
C = strsplit(fc,{'S','P','X','Y','Z','V','ES'});
A = str2double(strip(C,'left','0'));
A(isnan(A))=0;
S = A(2);
P = A(3:6:end);
X = A(4:6:end);
Y = A(5:6:end);
Z = A(6:6:end);
V = A(7:6:end);
ES = A(8:6:end);
Mein nächster Schritt wäre die Messungen mittels serial port auszulesen und einen realtime 3D-Plot zu programmieren. Nach meinem jetzigen Wissensstand sollte es analog wie beim Auslesen der Textdatei funktionieren. Dazu habe ich schon mal mit dem programmieren angefangen.
Bei der Frage kann ich dir leider auch nicht helfen. Aber ich würde dir empfehlen nochmal einen neuen Post zu machen. Das ist jetzt ein ganz anderes Thema als der Titel vermuten lässt
Alles klar. Danke dir für die hilfreichen Informationen
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.