DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Problem mit Script-DAC-Treiber

Hallo

ich habe ein Problem mit einem selbsterstellten Script-DAC-Treiber für mein Navilock GPS Empfänger.

 

von dem Empfänger bekomme ich ständig über eine Serielle Schnittstell die aktuellen Standortdaten gesendet

 

diese sehen das so aus:

 

$GPGGA,061834.500,5146.5823,N,00755.9943,E,1,08,0.8,84.9,M,46.4,M,,0000*68
$GPGSA,A,3,20,11,17,14,23,31,19,28,,,,,1.5,0.8,1.3*3C
$GPGSV,3,1,10,01,83,140,23,11,54,152,19,14,20,042,22,17,31,308,41*70
$GPGSV,3,2,10,19,10,169,16,20,64,251,32,23,20,189,30,28,08,260,29*73
$GPGSV,3,3,10,31,13,098,28,32,72,071,08*79
$GPGLL,5146.5823,N,00755.9943,E,061834.500,A,A*5E
$GPRMC,061834.750,A,5146.5823,N,00755.9942,E,0.99,96.96,130314,,,A*5B
$GPVTG,96.96,T,,M,0.99,N,1.8,K,A*34
$GPGGA,061834.500,5146.5823,N,00755.9943,E,1,08,0.8,84.9,M,46.4,M,,0000*68
$GPGSA,A,3,20,11,17,14,23,31,19,28,,,,,1.5,0.8,1.3*3C
$GPGSV,3,1,10,01,83,140,23,11,54,152,19,14,20,042,22,17,31,308,41*70
$GPGSV,3,2,10,19,10,169,16,20,64,251,32,23,20,189,30,28,08,260,29*73
$GPGSV,3,3,10,31,13,098,28,32,72,071,08*79
$GPGLL,5146.5823,N,00755.9943,E,061834.500,A,A*5E
$GPRMC,061834.750,A,5146.5823,N,00755.9942,E,0.99,96.96,130314,,,A*5B
$GPVTG,96.96,T,,M,0.99,N,1.8,K,A*34

 Hiervon interessiert mich nur die $GPRMC Zeile bzw einige Werte hierraus.

In meiner Treiberdatei suche ich also nach dem Trennzeichen, lese von rechts 77 Zeichen und Zerhacke den String dann auf die Daten die ich haben möchte.

 

Solange ich nur diesen Treibereingang im DAC-Schaltplan verwende funktioniert er auch bestens.
Wenn ich jetzt jedoch noch einen weiteren Treibereingang von z.B. meiner Spider mit reinhänge (natürlich mit anderem Takt, da mir die GPS Position jede Sekunde 1 mal reicht...) und evtl noch einen Sinusgenerator reinlege erhalte ich ständig Fehlermeldungen.
Noch dazu scheint dann die Abarbeitung der Anweisungen im DAC-Treiber-Skript nicht sauber zu funktionieren. So erhalte ich beispielsweise die Meldung das "right" nicht zulässig ist, obwohl ich dieses vorher mit einer IF-Anweisung auszuschließen versuche.

Hat da jemand ne Idee?

 

0 Kudos
Message 1 of 2
(5,540 Views)

Hallo nielscho,

Im empfangenen Datenstrom nach  "$GPVTG" zu suchen und darauf zu hoffen, dass die Zeile davor die "$GPRMC" Daten enthält würde ich anders gestalten. Du könntest zunächst den Delimitier auf "$GPRMC" setzen und eine Zeile einlesen. Wenn die Zeile länger als 1 Zeichen ist, kannst du davon ausgehen, dass du den String "$GPRMC" auch empfangen hast. Anschließend der Delimiter auf <CR> oder <LF> setzt werden (du muss das im Hex Dump zu dem Logger nachsehen, was als Zeilenendezeichen übertragen wird.), Anschließend kannst du eine Zeile einlesen. Diese enthält dann die Daten zu der gesuchten Zeile. Alles Weitere sollte sich wie in dem Listing gezeigt interpretieren lassen.

Wenn dieser Treiber in Verbindung mit einem anderen Treiber laufen soll, sollte auf jeden Fall die Messung "asynchron zum Messtakt" erfolgen damit die anderen Treiber durch das Script nicht ausgebremst werden.

Bei den Fehlermeldungen, die beim Betrieb des Treibers auftreten vermute ich einmal, dass hier ein anderer String als der " $GPRMC" empfangen wurde und ausgewertet werden soll.

Im Anhang habe Ich ein GPS Beispiel gespeichert, das stabil läuft.

Gruß
Walter

0 Kudos
Message 2 of 2
(5,512 Views)