GPS daten in TXT speichern.
lima-city → Forum → Programmiersprachen → Python
anzahl
ausgabe
breitengrad
code
datei
datensatz
datum
einlesen
empfangen
import
input
meeresspiegel
programm
protokoll
rang
satellit
string
uhrzeit
url
zeichen
-
Hallo LC,
ich habe dieses Programm um GPS Daten anzuzeigen:
import serial import sys import time Zeichen = 0 Laenge = 0 Qualitaet = 0 Satelliten = 0 Hoehe = 0.0 Breitengrad = 0.0 Laengengrad = 0.0 Input = "" Uhrzeit = "" Checksumme = "" Datenliste = [] # UART oeffnen UART = serial.Serial("/dev/ttyAMA0 ", 38400) UART.open() # Startmeldung print "" print "+---------------------------------------------------------------------+" print "| Dieses Programm empfaengt Daten einer Holux GPS-Maus, |" print "| die mittels GAA-Protokoll uebertragen wurden. |" print "| Der empfangene Datensatz wird zerlegt und in der Konsole angezeigt. |" print "+---------------------------------------------------------------------+" print "" while True: Zeichen = 0 # String leeren Input = "" # Zeichen empfangen Zeichen = UART.read() # Pruefen ob Uebertragung gestartet wurde if Zeichen == "$": # Zeichen 2-6 einlesen for Counter in range(4): Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Pruefen ob das GGA Protokoll gesendet wird if Input == "GPGG": # Zeichen empfangen bis ein LF als Abschluss kommt while Zeichen != "\n": Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) Input = Input.replace("\r\n", "") # Datensatz nach jedem "," trennen und in einer Liste speichern Datenliste = Input.split(",") # Laenge des Datensatzes feststellen Laenge = len(Input) # Uhrzeit herausfiltern Uhrzeit = Datenliste[1] Uhrzeit = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6] # Laengen und Breitengrad herausfiltern und berechnen Breitengrad = float(Datenliste[2]) Breitengrad = Breitengrad / 100 Laengengrad = float(Datenliste[4]) Laengengrad = Laengengrad / 100 # Signalqualitaet herausfiltern Qualitaet = int(Datenliste[6]) # Anzahl der Satelliten herausfiltern Satelliten = int(Datenliste[7]) # Hoehe herausfiltern Hoehe = float(Datenliste[9]) # Checksumme auslesen Checksumme = Datenliste[14] # Ausgabe print Input print "" print "Laenge des Datensatzes:", Laenge, "Zeichen" print "Uhrzeit:", Uhrzeit print "Breitengrad:", Breitengrad, Datenliste[3] print "Laengengrad:", Laengengrad, Datenliste[5] print "Hoehe ueber dem Meeresspiegel:", Hoehe, Datenliste[10] print "GPS-Qualitaet:", Qualitaet print "Anzahl der Satelliten:", Satelliten print "Checksumme:", Checksumme print "-------------------------------------------"
Jetzt möchte ich das jeder 10ter Datensatz in eine TXT auf den Destop gespeichert wird.
Genauso wie er angezeigt wird. Also:
---------
Laenge des Datensatzes: xxx
Uhrzeit:xxx
Breitengrad:xxx
---------
nächster Datensatz
---------
usw.
Nochdazu hab ich das Problem das er hin&wieder bei der Auswertung Probleme hat. Ich denke mal wenn fehler bei der Übertragung des Datensatzes auftreten. Kann man das irgendwie per try verhindern?
mit Phython kenn ich mich leider noch nicht so gut aus.
LG
Christian -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo das ist doch relativ einfach umzusetzen. Du musst lediglich zu Beginn eine Datei zum schreiben öffnen, die Datensätze während sie ankommen mitzählen und bei Bedarf in die Datei schreiben.
Das Programm könnte dann ca. so aussehen:
import serial import sys import time Zeichen = 0 Laenge = 0 Qualitaet = 0 Satelliten = 0 Hoehe = 0.0 Breitengrad = 0.0 Laengengrad = 0.0 Input = "" Uhrzeit = "" Checksumme = "" Datenliste = [] ExportDateiName = "C:/Users/christian1603/Desktop/output.txt" # UART oeffnen UART = serial.Serial("/dev/ttyAMA0 ", 38400) UART.open() # Startmeldung print "" print "+---------------------------------------------------------------------+" print "| Dieses Programm empfaengt Daten einer Holux GPS-Maus, |" print "| die mittels GAA-Protokoll uebertragen wurden. |" print "| Der empfangene Datensatz wird zerlegt und in der Konsole angezeigt. |" print "+---------------------------------------------------------------------+" print "" ExportDatei = fopen(ExportDateiName, "w") Zaehler = 0 while True: Zeichen = 0 # String leeren Input = "" # Zeichen empfangen Zeichen = UART.read() # Pruefen ob Uebertragung gestartet wurde if Zeichen == "$": # Zeichen 2-6 einlesen for Counter in range(4): Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Pruefen ob das GGA Protokoll gesendet wird if Input == "GPGG": # Zeichen empfangen bis ein LF als Abschluss kommt while Zeichen != "\n": Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Datensatz komplett empfangen, Zähler erhöhen Zaehler += 1 Input = Input.replace("\r\n", "") # Datensatz nach jedem "," trennen und in einer Liste speichern Datenliste = Input.split(",") # Laenge des Datensatzes feststellen Laenge = len(Input) # Uhrzeit herausfiltern Uhrzeit = Datenliste[1] Uhrzeit = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6] # Laengen und Breitengrad herausfiltern und berechnen Breitengrad = float(Datenliste[2]) Breitengrad = Breitengrad / 100 Laengengrad = float(Datenliste[4]) Laengengrad = Laengengrad / 100 # Signalqualitaet herausfiltern Qualitaet = int(Datenliste[6]) # Anzahl der Satelliten herausfiltern Satelliten = int(Datenliste[7]) # Hoehe herausfiltern Hoehe = float(Datenliste[9]) # Checksumme auslesen Checksumme = Datenliste[14] # Ausgabe print Input Ausgabe = [] Ausgabe.push("") Ausgabe.push("Laenge des Datensatzes: "+Laenge+" Zeichen") Ausgabe.push("Uhrzeit: "+Uhrzeit) Ausgabe.push("Breitengrad: "+Breitengrad+" "+Datenliste[3]) Ausgabe.push("Laengengrad: "+Laengengrad+" "+Datenliste[5]) Ausgabe.push("Hoehe ueber dem Meeresspiegel: "+Hoehe+" "+Datenliste[10]) Ausgabe.push("GPS-Qualitaet: "+Qualitaet) Ausgabe.push("Anzahl der Satelliten: "+Satelliten) Ausgabe.push("Checksumme: "+Checksumme) Ausgabe.push("-------------------------------------------") # Immer auf dem Bildschirm ausgeben print '\n'.join(Ausgabe) # Jeden 10. Datensatz in Datei schreiben if Zaehler % 10: ExportDatei.write('\n'.join(Ausgabe)) ExportDatei.close()
Ist allerdings noch ungetestet. Dafür habe ich die Ausgabe etwas geändert, damit man nicht unnötig doppelt Code hat für die beiden unterschiedlichen Ausgaben. -
kochmarkus schrieb:
Hallo das ist doch relativ einfach umzusetzen. Du musst lediglich zu Beginn eine Datei zum schreiben öffnen, die Datensätze während sie ankommen mitzählen und bei Bedarf in die Datei schreiben.
Das Programm könnte dann ca. so aussehen:
import serial import sys import time Zeichen = 0 Laenge = 0 Qualitaet = 0 Satelliten = 0 Hoehe = 0.0 Breitengrad = 0.0 Laengengrad = 0.0 Input = "" Uhrzeit = "" Checksumme = "" Datenliste = [] ExportDateiName = "C:/Users/christian1603/Desktop/output.txt" # UART oeffnen UART = serial.Serial("/dev/ttyAMA0 ", 38400) UART.open() # Startmeldung print "" print "+---------------------------------------------------------------------+" print "| Dieses Programm empfaengt Daten einer Holux GPS-Maus, |" print "| die mittels GAA-Protokoll uebertragen wurden. |" print "| Der empfangene Datensatz wird zerlegt und in der Konsole angezeigt. |" print "+---------------------------------------------------------------------+" print "" ExportDatei = fopen(ExportDateiName, "w") Zaehler = 0 while True: Zeichen = 0 # String leeren Input = "" # Zeichen empfangen Zeichen = UART.read() # Pruefen ob Uebertragung gestartet wurde if Zeichen == "$": # Zeichen 2-6 einlesen for Counter in range(4): Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Pruefen ob das GGA Protokoll gesendet wird if Input == "GPGG": # Zeichen empfangen bis ein LF als Abschluss kommt while Zeichen != "\n": Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Datensatz komplett empfangen, Zähler erhöhen Zaehler += 1 Input = Input.replace("\r\n", "") # Datensatz nach jedem "," trennen und in einer Liste speichern Datenliste = Input.split(",") # Laenge des Datensatzes feststellen Laenge = len(Input) # Uhrzeit herausfiltern Uhrzeit = Datenliste[1] Uhrzeit = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6] # Laengen und Breitengrad herausfiltern und berechnen Breitengrad = float(Datenliste[2]) Breitengrad = Breitengrad / 100 Laengengrad = float(Datenliste[4]) Laengengrad = Laengengrad / 100 # Signalqualitaet herausfiltern Qualitaet = int(Datenliste[6]) # Anzahl der Satelliten herausfiltern Satelliten = int(Datenliste[7]) # Hoehe herausfiltern Hoehe = float(Datenliste[9]) # Checksumme auslesen Checksumme = Datenliste[14] # Ausgabe print Input Ausgabe = [] Ausgabe.push("") Ausgabe.push("Laenge des Datensatzes: "+Laenge+" Zeichen") Ausgabe.push("Uhrzeit: "+Uhrzeit) Ausgabe.push("Breitengrad: "+Breitengrad+" "+Datenliste[3]) Ausgabe.push("Laengengrad: "+Laengengrad+" "+Datenliste[5]) Ausgabe.push("Hoehe ueber dem Meeresspiegel: "+Hoehe+" "+Datenliste[10]) Ausgabe.push("GPS-Qualitaet: "+Qualitaet) Ausgabe.push("Anzahl der Satelliten: "+Satelliten) Ausgabe.push("Checksumme: "+Checksumme) Ausgabe.push("-------------------------------------------") # Immer auf dem Bildschirm ausgeben print '\n'.join(Ausgabe) # Jeden 10. Datensatz in Datei schreiben if Zaehler % 10: ExportDatei.write('\n'.join(Ausgabe)) ExportDatei.close()
Ist allerdings noch ungetestet. Dafür habe ich die Ausgabe etwas geändert, damit man nicht unnötig doppelt Code hat für die beiden unterschiedlichen Ausgaben.
Danke schonmal, weißt du zufällig das ich für die Funktion fopen Importieren muss?
ok denke es muss bei mir open heißen.
Beitrag zuletzt geändert: 26.6.2013 16:33:11 von christian1603 -
Ja,
open ist natürlich richtig. Mit fopen kam der alte C Programmierer in mir durch...
Schreib doch noch ein paar Details an welchen Stellen dein Programm mit welchen Fehlermeldungen abstürtzt. Dann kann man leichter rausfinden wie man den Fehler abfangen kann. -
kochmarkus schrieb:
Ja,
open ist natürlich richtig. Mit fopen kam der alte C Programmierer in mir durch...
Schreib doch noch ein paar Details an welchen Stellen dein Programm mit welchen Fehlermeldungen abstürtzt. Dann kann man leichter rausfinden wie man den Fehler abfangen kann.
import serial import sys import time import re Zeichen = 0 Laenge = 0 Qualitaet = 0 Satelliten = 0 Hoehe = 0.0 Breitengrad = 0.0 Laengengrad = 0.0 Input = "" Uhrzeit = "" Checksumme = "" Datenliste = [] # UART oeffnen UART = serial.Serial("/dev/ttyAMA0", 38400) UART.open # Startmeldung print "" print "+---------------------------------------------------------------------+" print "| Dieses Programm empfaengt Daten einer Holux GPS-Maus, |" print "| die mittels GAA-Protokoll uebertragen wurden. |" print "| Der empfangene Datensatz wird zerlegt und in der Konsole angezeigt. |" print "+---------------------------------------------------------------------+" print "" Zaehler = 0 while True: Zeichen = 0 # String leeren Input = "" # Zeichen empfangen Zeichen = UART.read() # Pruefen ob Uebertragung gestartet wurde if Zeichen == "$": # Zeichen 2-6 einlesen for Counter in range(4): Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Pruefen ob das GGA Protokoll gesendet wird if Input == "GPGG": # Zeichen empfangen bis ein LF als Abschluss kommt while Zeichen != "\n": Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) Input = Input.replace("\r\n", "") #zahler Zaehler +=1 # Datensatz nach jedem "," trennen und in einer Liste speichern Datenliste = Input.split(",") # Laenge des Datensatzes feststellen Laenge = len(Input) # Uhrzeit herausfiltern Uhrzeit = Datenliste[1] Uhrzeit = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6] # Laengen und Breitengrad herausfiltern und berechnen Breitengrad = float(Datenliste[2]) Breitengrad = Breitengrad / 100 Laengengrad = float(Datenliste[4]) Laengengrad = Laengengrad / 100 # Signalqualitaet herausfiltern Qualitaet = int(Datenliste[6]) # Anzahl der Satelliten herausfiltern Satelliten = int(Datenliste[7]) # Hoehe herausfiltern Hoehe = float(Datenliste[9]) # Checksumme auslesen Checksumme = Datenliste[14] # Ausgabe print Input print "" print "Laenge des Datensatzes:", Laenge, "Zeichen" print "Uhrzeit:", Uhrzeit print "Breitengrad:", Breitengrad, Datenliste[3] print "Laengengrad:", Laengengrad, Datenliste[5] print "Hoehe ueber dem Meeresspiegel:", Hoehe, Datenliste[10] print "GPS-Qualitaet:", Qualitaet print "Anzahl der Satelliten:", Satelliten print "Checksumme:", Checksumme print "-------------------------------------------", Zaehler #Jeden 10. Datensatz in Datei schreiben if Zaehler == 10: ExportDatei = open("test.txt","a+") ExportDatei.write("".join(Input)) ExportDatei.write("\n") ExportDatei.close() Zaehler = 0
nach Start läuft er z.b 24 Sec dann kommt das:
ValueError: invalid literal for int() with base 10:'01142.9905'
Zeile: Qualitaet = Int(Datenliste[6])
Neustart:
nach 10 Sec:
ValueError: invalid literal for float() : 75$GPRMC
Hoehe = float(Datenbliste[9])
usw.
-
Hi, mal eine auf das wesentliche verkürzte Lösung nur um zeigen wie das Abfangen des Fehlers ca. aussehen kann:
while True: Input = "" Zeichen = UART.read() if Zeichen == "$": while Zeichen != "\n": Zeichen = UART.read() Input += str(Zeichen) try: Datenliste = Input.split(",") # Und der ganze restliche Code für einen Datensatz inkl. Ausgabe except ValueError: # Irgendwas komisch mit dem Datensatz, also mit dem nächsten weitermachen continue
Beitrag zuletzt geändert: 28.6.2013 13:47:02 von kochmarkus -
kochmarkus schrieb:
Hi, mal eine auf das wesentliche verkürzte Lösung nur um zeigen wie das Abfangen des Fehlers ca. aussehen kann:
while True: Input = "" Zeichen = UART.read() if Zeichen == "$": while Zeichen != "\n": Zeichen = UART.read() Input += str(Zeichen) try: Datenliste = Input.split(",") # Und der ganze restliche Code für einen Datensatz inkl. Ausgabe except ValueError: # Irgendwas komisch mit dem Datensatz, also mit dem nächsten weitermachen continue
ich habs jetzt so:
import serial import sys import time import re Zeichen = 0 Laenge = 0 Qualitaet = 0 Satelliten = 0 Hoehe = 0.0 Breitengrad = 0.0 Laengengrad = 0.0 Input = "" Uhrzeit = "" Checksumme = "" Datenliste = [] # UART oeffnen UART = serial.Serial("/dev/ttyAMA0", 38400) UART.open # Startmeldung print "" print "+---------------------------------------------------------------------+" print "| Dieses Programm empfaengt Daten einer Holux GPS-Maus, |" print "| die mittels GAA-Protokoll uebertragen wurden. |" print "| Der empfangene Datensatz wird zerlegt und in der Konsole angezeigt. |" print "+---------------------------------------------------------------------+" print "" Zaehler = 0 while True: Zeichen = 0 # String leeren Input = "" # Zeichen empfangen Zeichen = UART.read() # Pruefen ob Uebertragung gestartet wurde if Zeichen == "$": # Zeichen 2-6 einlesen for Counter in range(4): Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) # Pruefen ob das GGA Protokoll gesendet wird if Input == "GPGG": # Zeichen empfangen bis ein LF als Abschluss kommt while Zeichen != "\n": Zeichen = 0 Zeichen = UART.read() Input = Input + str(Zeichen) try: Input = Input.replace("\r\n", "") #zahler Zaehler +=1 # Datensatz nach jedem "," trennen und in einer Liste speichern Datenliste = Input.split(",") # Laenge des Datensatzes feststellen Laenge = len(Input) # Uhrzeit herausfiltern Uhrzeit = Datenliste[1] Uhrzeit = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6] # Laengen und Breitengrad herausfiltern und berechnen Breitengrad = float(Datenliste[2]) Breitengrad = Breitengrad / 100 Laengengrad = float(Datenliste[4]) Laengengrad = Laengengrad / 100 # Signalqualitaet herausfiltern Qualitaet = int(Datenliste[6]) # Anzahl der Satelliten herausfiltern Satelliten = int(Datenliste[7]) # Hoehe herausfiltern Hoehe = float(Datenliste[9]) # Checksumme auslesen Checksumme = Datenliste[14] # Ausgabe print Input print "" print "Laenge des Datensatzes:", Laenge, "Zeichen" print "Uhrzeit:", Uhrzeit print "Breitengrad:", Breitengrad, Datenliste[3] print "Laengengrad:", Laengengrad, Datenliste[5] print "Hoehe ueber dem Meeresspiegel:", Hoehe, Datenliste[10] print "GPS-Qualitaet:", Qualitaet print "Anzahl der Satelliten:", Satelliten print "Checksumme:", Checksumme print "-------------------------------------------", Zaehler #Jeden 10. Datensatz in Datei schreiben if Zaehler == 1: ExportDatei = open("test.txt","a+") ExportDatei.write("".join(Input)) ExportDatei.write("\n") ExportDatei.close() Zaehler = 0 except ValueError: continue
bekomme aber nun die Meldung "IndexError: list indes out od range"
Zeile: Uhrzeit = Datenliste[1]
hab ich was falsch gemacht? bzw Was ^^ -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage