kostenloser Webspace werbefrei: lima-city


GPS daten in TXT speichern.

lima-cityForumProgrammiersprachenPython

  1. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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.
  4. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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
  5. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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.
  6. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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.
  7. kochmarkus

    Co-Admin Kostenloser Webspace von kochmarkus

    kochmarkus hat kostenlosen Webspace.

    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
  8. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    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 ^^
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!