Prüfsumme berechnen - aber wie?

  • Hallo.


    Mich würde brennend interessieren wie man die Prüfsumme berechnen kann.
    Was ich herausgefunden habe ist, das bei dem NMEA Protokoll alle Zeichen zwischen $ und * XOR Verknüft werden... Jut, $ gibts in dem Datensatz unten ja nicht..
    XOR heißt doch nichts anderes als das alle ungleichen Werte eine 1 ergeben und alle gleichen Werte eine 0 ?
    Wie werden denn die Daten jetzt zusammengerechnet?
    Wird Zeichen 1 mit Zeichen 2 verglichen und das Ergebnis ist Zeichen 1 für Zeichen 3? Hä? 0:-)


    Wer hats drauf und kanns erklären?


    Hier habe ich mal ein paar Daten aus dem GPS Gerät hinkopiert:
    (die 2. und 3. Zeile gehören zusammen... wird hier aber als Zeilenumbruch dargestellt... sieht so aus als wenn aus 2 Reihen am Ende eine Prüfsumme gebilet wird?


    G,003240,8C7F,050106,141537.00,A,zn=39,id=-0,Ziel=0,Dzlr=0,*52
    P,050106,141537.00,5111.2806,N,00625.1587,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*39


    G,003240,8C7F,050106,141542.00,A,zn=40,id=-0,Ziel=0,Dzlr=0,*56
    P,050106,141542.00,5111.2825,N,00625.1567,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*42


    G,003240,887E,050106,141551.00,A,zn=41,id=-0,Ziel=0,Dzlr=0,*67
    P,050106,141551.00,5111.2832,N,00625.1573,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*43


    G,003240,8C7F,050106,141556.00,A,zn=42,id=-0,Ziel=0,Dzlr=0,*63
    P,050106,141556.00,5111.2836,N,00625.1576,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*45


    G,003240,887E,050106,141611.00,A,zn=43,id=-0,Ziel=0,Dzlr=0,*70
    P,050106,141611.00,5111.2839,N,00625.1803,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*45


    G,003240,4C7F,050106,142423.01,A,zn=44,id=-0,Ziel=0,Dzlr=0,*52
    P,050106,142423.00,5111.1993,N,00625.1034,E,452.50,0.91,1.70,332.05,0.0,W,2.6,2.8,1.0,0,A,A,1,3*33


    G,003240,5C7F,050106,142424.00,A,zn=45,id=-0,Ziel=0,Dzlr=0,*50
    P,050106,142423.00,5111.1993,N,00625.1034,E,452.50,0.91,1.70,332.05,0.0,W,2.6,2.8,1.0,0,V,N,0,0*59


    G,003240,4C7F,050106,142425.00,A,zn=46,id=-0,Ziel=0,Dzlr=0,*49
    P,050106,142423.00,5111.1993,N,00625.1034,E,452.50,0.91,1.70,332.05,0.0,W,2.6,2.8,1.0,0,V,N,0,0*59

  • Hallo Roelli


    Deine Zeilen sind aber keine klassichen NMEA Zeilen, oder sehe ich da etwas falsch? Woher sind die?


    Ein Beispiel:
    $GPVTG,,T,,M,0.00,N,0.0,K,A*13


    daraus wird als Berechnungsgrundlage
    GPVTG,,T,,M,0.00,N,0.0,K,A


    das berechnet sich
    71 XOR 80 XOR 86 XOR 84 XOR 71 XOR 44 XOR 44 XOR 84 XOR 44 XOR 44 XOR 77 XOR 44 XOR 48 XOR 44 XOR 48 XOR 48 XOR 44 XOR 78 XOR 44 XOR 48 XOR 44 XOR 48 XOR 44 XOR 75 XOR 44 XOR 65


    und wird zu 19 (Asci)


    Da der Pruefsummenwert HEX ist
    wird das zu 13 (hex)


    EDIT
    Tippfehler beseitigt
    /EDIT

    Einmal editiert, zuletzt von 900SS-97 ()

  • Hallo,
    bei den gezeigten Datenzeilen handelt es sich nicht um Original-NMEA-Protokolle, aber sie scheinen zumindest teilweise daran angelehnt.
    Zumindest bei NMEA ist es so, daß alle Inhalte zwischen den Zeichen "$" und "*" zur Prüfsummenberechnung herangezogen werden.


    Wenn ich früher einmal in der Verlegenheit war, die Checksum neu berechnen oder zumindest kontrollieren zu müssen, dann habe ich immer das beigefügte kleine Basic-Programm benutzt. Hierbei wird der Eingangsstring "t$" wie obengenannt analysiert und die vorhandene Prüfsumme durch eine neu berechnete ersetzt. Zur Analyse eigener Daten sind somit nur die Inhalte von "t$" mit dem Texteditor zu bearbeiten.


    Nun sind die alten Basic-Programme nicht mehr unbedingt "Stand der Technik", aber vielleicht gibt das Programm dennoch einige Hinweise auf die generelle Vorgehensweise zur Prüfsummenberechnung. Bei Bedarf könnte ich auch noch mit einem alten Ausführungsprogramm für Basic-Software aushelfen. Noch besser würde natürlich sein, wenn irgendein netter Mensch daraus ein kleines Windows-Tool für Desktop- oder PDA-Nutzung zaubern würde.


    Klaus


    ---------------------------------------------------------------------------


    REM "CRC-TST.BAS" entfernt die vorhandene Pruefsumme; berechnet
    REM eine neue Pruefsumme und setzt sie wieder zu
    REM
    CLS
    PRINT "ORIGINALSTRING"
    PRINT "--------------------------------------------------------------------"
    t$ = "$GPRMC,051544.00,A,5434.730,N,00553.140,W,,,030497,,*2D" 'from GPS
    PRINT t$
    PRINT
    t$ = MID$(t$, 1, LEN(t$) - 2) 'remove the original checksum
    chk% = 0
    FOR i% = 2 TO LEN(t$) - 1 'calculate checksum after $ and before *
    chk% = chk% XOR ASC(MID$(t$, i%, 1))
    NEXT i%
    chksum$ = HEX$(chk%)
    t$ = t$ + chksum$ 'add new checksum


    PRINT : PRINT
    PRINT "STRING MIT NEU-KALKULIERTER PRUEFSUMME"
    PRINT "---------------------------------------------------------------------"
    PRINT t$

  • Zitat

    Original von 900SS-97
    Hallo Roelli
    Deine Zeilen sind aber keine klassichen NMEA Zeilen, oder sehe ich da etwas falsch? Woher sind die?


    Daten kommen aus nem GPS Gerät wobei der Hersteller noch unbekannt ist...


    Die XOR Geschichte habich kapiert. Auch wenn ich gesteinigt werde... wie funktionert die Umrechnung von Asci nach Hex? :(
    Also 19 nach 13?
    Muss ich erst die 19 (asci) umwandeln?


    1= Ordnungszahl 49
    9=Ordnungszahl 57


    Aber wie dann weiter? Die Dezimalzahlen in Hex umwandeln?


    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 DEZIMAL
    0 1 2 3 4 5 6 7 8 9 A B C D E F 10 HEX
    *ups, isn bissken verrutscht...*



    :wand

  • Zitat

    Original von GPSKlaus
    Noch besser würde natürlich sein, wenn irgendein netter Mensch daraus ein kleines Windows-Tool für Desktop- oder PDA-Nutzung zaubern würde.



    :D
    Desktop oder HTML/java wäre ideal! :engeleleminiert
    Dann könnte man die Zeile total easy eben rüber-pasten und fertig.


    DAS wäre mein Traum... :love2


  • Hallo Roelli


    Der Start ist doch schon mal gut. Weiter zaehlen mit:


    Dezimal / Hex
    17 / 11
    18 / 12
    19 / 13
    20 / 14
    ...
    28 / 1C


    Die Umrechnung zwischen Dez / Hex erfolgt ueber die Restbildung. Dazu teilst Du die ganze Zahl des Ergebnisses durch 16. Das machst Du solange, bis die ganze Zahl = 0 ist.


    Beispiel 29 Dez:
    29 : 16 = 1 Rest 13 ==> 13 Dez = D Hex
    1 : 16 = 0 Rest 1
    Ergebnis:
    1D (hex)


    Am Beispiel 38 Dez:
    38 : 16 = 2 Rest 6 ==> 6 Dez = 6 Hex
    2 : 16 = 0 Rest 2
    Ergebnis:
    26

  • Wie wär's mit nem Excel-Makro???


    Einfach den gewünschten NMEA-Satz per Copy & Paste (STRG-C & STRG-V) ins Formular kopieren.


    Gruß


    Anderl

  • Zitat

    Original von Anderl
    Wie wär's mit nem Excel-Makro???


    Hallo Anderl:


    Knapp, sauber, treffend. :]

  • Danke Leute für die gute Hilfe!!! :tup :tup :tup


    Anderl, Dein Checksum Makro funktioniert supi. Thanks!


    Die Daten die mein Gerät raushaut sind allerdings nicht in inem NMEA Format... nur 'ähnlich'.


    Damit gehts supi: (Im Netz gefunden)
    $GPRMC,000000,A,4957.22,N,00811.43,E,015.0,124.0,000000,,*1E
    $GPRMC,000000,A,4957.24,N,00811.55,E,026.0,024.0,000000,,*1E
    $GPRMC,000000,A,4957.27,N,00811.71,E,026.0,024.0,000000,,*1B


    Die Daten von meinem Gerät:
    G,003240,DA7E,151105,142715.00,A,zn=1,id=-0,Ziel=0,Dzlr=0,*112
    P,151105,142715.00,5232.2588,N,01324.4199,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*39


    G,003240,CA7E,151105,142716.00,A,zn=2,id=-0,Ziel=0,Dzlr=0,*119
    P,151105,142716.00,5232.2586,N,01324.4202,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*43


    G,003240,CE7F,151105,143249.00,A,zn=3,id=-0,Ziel=0,Dzlr=0,*127
    P,151105,143249.00,5232.2608,N,01324.4216,E,0.00,0.00,0.00,0.00,0.0,W,0.0,0.0,0.0,0,A,A,0,0*37
    (Zeilenumbruch der jeweils 2. Zeile ignorieren)
    ...


    Die Prüfsumme enthält ausschließlich Ziffern... bei der ersten Zeile sogar 3 Ziffern... ?(


    Wird die Prüfsumme da anders berechnet?


    Danke,
    Roelli.

  • Zitat

    Original von karomue


    Hallo Anderl:


    Knapp, sauber, treffend. :]


    Na wenn Klaus schon fast den "richtigen" Code vorgibt, dann sollte man nicht lange zögern bei der Umsetzung. Wieder ein Makro mehr, das auf meinem Rechner in den Tiefen der Festplatte verschwindet. Aber wehe wenn ich es nochmal brauch, ......, dann schreib ich's garantiert nochmal neu.... :-D) :-D) :-D)


    Gruß


    Anderl

    **** ob Desti SP, TTN5 oder MN4.....angekommen bin ich fast immer ****
    !!!! Karte, Kompaß & Höhenmesser haben mich I M M E R ans Ziel gebracht !!!!


    www.eNavTools.de.vu
    Geodätische Koordinatentransformationen am Pocket PC
    Helmertparameter u. m.

  • Hallo Roelli


    Deine Daten sehen aus, als ob da irgendwelche Ziele/Routenpinkte enthalten waeren. Vielleicht solltest Du uns mal zeigen/sagen um welches Geraet es sich da handelt.

  • Hallo,
    dann scheint das richtige Tool schnell gefunden zu sein. Da ich auf meinem Rechner kein EXCEL habe, bleibt mir diese Lösung allerdings versperrt. Ich wollte Bill Gates nicht noch reicher machen und hoffe, daß er es mir persönlich nicht allzu übel nimmt!


    Bezüglich der dreistelligen Prüfsummenwerte kann ich nur vermuten, daß hier anstelle der HEX-Darstellung entsprechende Dezimalwerte verwendet werden.


    Klaus

  • Zitat

    Original von GPSKlaus
    ...
    Bezüglich der dreistelligen Prüfsummenwerte kann ich nur vermuten, daß hier anstelle der HEX-Darstellung entsprechende Dezimalwerte verwendet werden.


    Klaus


    Hallo Klaus


    Oder evtl. ganz andere Pruefsummenermittlung. Denn da es sich hier nicht um Pruefsummen der NMEA-datensaetze handelt, kann doch auch eine andere Ermittlung angewendet worden sein, oder?

  • Hallo nochmal...


    Also die GPS Box ist ein Fahrtenschreiber von totnios systems. Irgendwie in ner umgelabelten Box mit selbst gelöteten SMD Widerständen auf 2. Bestückungsseite... sieht aus wie selsbt jebastelt oder so 0:-)
    Der schreibt nach dem einschalten der Zündung jede Minute die Position auf ne CF Karte.


    Hex nach Dezimal hab ich schonmal probiert... das wars leider nicht...

  • Hallo Roelli


    Da hast Du Dir eine schoene Aufgabe gestellt. Denn das was da ausgegeben wird, ist garantiert eine Spezialversion der Firma Totnios-Systems. Die haben, so wie ich das sehe, einen GPS-Chip der Firma u-blox PUSHme/SEEme gekauft und dazu ihre "Umgebung" programmiert. Da bleibt nach meiner Auffassung nur Handarbeit uebrig um den "Code" raus zu bekommen.