LabVIEWForum.de
NMEA Daten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenbank & File IO (/Forum-Datenbank-File-IO)
+---- Thema: NMEA Daten (/Thread-NMEA-Daten)

Seiten: 1 2


NMEA Daten - Guest - 12.02.2009 13:54

Hallo,

Ich möchte ausgewählte NMEA Daten, die als String eingelesen werden, auf einem Windows Mobile Gerät daratellen. Ich bekomme es aber leider nicht hin, den String auf die bestimmten Werte abzufragen. IN einem VI für einen normalen WIndows Rechner würde ich jetzt den String einfach durchsuchen mit "Muster suchen" nach den entsprechenden NMEA Kürzeln durchsuchen und zergliedern. Leider gibt es diese VI für PDA Anwendungen nicht.
Was mit dafür richtig erscheint ist "In String suchen" aber mit dem VI komme ich auch nicht klar: Ich bekomme nicht die Infornmatinonen aus dem Eingangsstring, die brauche. Kann mir jemand vielleicht helfen, und ein Beispiel für der Format-String geben, mit dem ich die Werte für verschiedene $GPxxx auslesen kann?

Danke schonmal
Kurok

Achso, ich möchte aus dem String nur spezielle Daten auslesen, also bei $GPHDT,12.4,V5 möchte ich nur die 12.4 hinterher raus haben.


NMEA Daten - RoLe - 12.02.2009 14:46

Kenne das NMEA nicht, aber anhand deinen 2 Bsp. scheint es immer eine fixe Länge zu haben.
Dann würde ich das VI "String Subset" (de. verm. Teilstring ausgeben) verwenden.


NMEA Daten - Guest - 12.02.2009 15:18

Leider hat der empfangene String nicht immer die selbe Länge. Daher wird das nicht gehen. Denn zum einen Variieren die Daten, also in diesem Beispiel die 12.4 (kann auch mal 180.3 oder 0.2 sein), zum Anderen ist nicht davon auszugehen, dass die NMEA Codes immer in der "richtigen" Reihenfolge kommen. Ich muss im grunde nach einem bestimmten Bezeichner suchen, und den anschließenden Wert auslesen, egal, an welcher Stelle dieser Bezeichner im kompletten String steht.


NMEA Daten - Guest - 12.02.2009 15:37

Was also mein Hauptproblem zu sein scheint ist, dass ich die Daten in beliebiger Reihenfolge durchsuchen können muss. Wenn ich das mit "IN Sting suchen mache, dann ist die Reihenfolge aber leider entscheident. Denn so wie in dem Beispiel im jetzigen Anhang geht das zwar, aber nur, wenn die Daten in genau der Reihenfolge geliefert werden.....


NMEA Daten - Guest - 13.02.2009 14:47

Also schön, ich will es nun so machen, wie oben abgebildet, will mir aber auf dem Frontpanel dann zusammenstellen, welche NMEA-Daten nun in welcher Reihenfolge ausgelesen werden sollen (da es anders wohl nicht geht). Jetzt musste ich aber dabei feststellen, dass scheinbar der Format-String von "In String suchen" derart mit dem VI verknüpft ist, dass man diesen nicht variabel zusammenstellen kann, beispielsweise mit "String verknüpfen"
Hat da niemand eine bessere Lösung?


NMEA Daten - eg - 13.02.2009 14:57

Hallo!

Du kannst/musst zeilenweise einlesen und zeilenweise parsen. Also nicht dreizeilenweise.

So, du bekommst eine NMEA Sequenz, dann nimmst du das VI namens Spreadsheet String To Array (Komma als Trennzeichen) und machst daraus ein String-Array, somit kannst du auf die einzelnen Daten zugreifen.

Das erste ist $Sequenzname, das schliesst du an eine Case-Struktur an und machst so viele Cases wie es Sequenzen gibt, die du parsen willst. In jedem Case machst du aus den einzelnen String-Array Elementen richtige Zahlen und was es sonst noch gibt, zum Beispiel mit Dezmal String To Number VI.

So ist es im Groben und Ganzen. Gruß, eg


NMEA Daten - Guest - 13.02.2009 16:00

Ich hab das nochmal so gemacht, wie ich angefangen hatte, weil ich mit dem Spreadsheet keine Kommastellen bekommen habe, und auch die "$Sequenzname" nicht in das Array geschrieben wurden. Trotz %s formatierung bekam ich nämlich ein 2d-Array mit Double-Werten.... Kein Ahnung, was ich da falsch gemacht habe. Vielleicht noch einen Tipp? Wäre ja schon elegant.
Wenn ich das allerdings so mache, wie hier jetzt dargestellt, funktioniert das im Grunde. Nicht schön, aber immerhin. Wenn ich das ganze aber auf dem emulierten PDA laufen lasse, erhalte ich keine Kommastellen. Wenn ichs so ausführe aber schon. Was soll das nun wieder?

Hier nochmal meine vorläufige Variante mit dem Spreadsheet im Anhang.


NMEA Daten - eg - 13.02.2009 16:05

Na ja, wie du willst.
Um die Kommastellen zu erhalten musst du beim Umwandeln vom String in Kommazahl den Flag oben auf False setzen.


NMEA Daten - Guest - 13.02.2009 16:22

Ja, wie gesagt: Das mit dem Array wär schon besser. Hab im vorigen Post nochmal angehängt, wie ich das gemacht habe. Komamstellen bekomme ich nach wie vor nur, wenn ich das VI auf dem PC Ausführen lasse. Auf dem emulierten PDA immer noch nicht.


NMEA Daten - eg - 13.02.2009 16:23

Wie schon gesagt, machst den Flag auf FALSE und entfernst dein VI zum Ersetzen des Punktes durch Komma.

Beim VI Spreadsheet String To Array musst du links unten ein 1D String Array anschliessen, dann bekommst du auch ein 1D String Array raus.