IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Checksum trames GPS


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut Checksum trames GPS
    Bonjour à tous,

    Je travaille sur le décodage de trames NMEA cad la com avec un GPS.

    Ces trames arrivent ou partent sur le port série comme du texte avec un format prédéfini.

    Une trame ressemble à cela :

    $PBRMEMR,006E,05,00,2C,D3,83,01,AA,4C*76

    ou encore à cela :

    $PBRWPS,4558.288,N,00626.861,E,EGL128,Eglise ,1284*6B

    A l'arrivée pas de problème par contre si je veux envoyer une trame au GPS, je dois lui adresser la suite de caractères correcte plus un checksum. Ce checksum se trouve après le caractère *.

    Je traduis la définition anglo saxonne du truc :

    Le checksum consiste en un caractère "*" et deux caractères hexadécimaux représentant le OR exclusif de tous les caractères à l'exception du caractère de départ $ et du caractère de fin *.

    Comment ke vous feriez pour calculer cela ?

    Amicalement

  2. #2
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    le "OR exclusif" est un "xor"...

    C'est un opérateur qui fonctionne avec des valeurs numériques. Il faut donc que tu fasses le xor des valeurs ASCII de tous tes caractères.
    Avec Delphi, c'est la fonction "ord" qui va te permettre de récupérer cette valeur.

    Ensuite le principe est simple :
    -Tu initialises une variable checksum à 0
    -Tu tournes sur tous les caractères de ta chaîne, et tu assignes à ta variable checksum le xor de cette dernière avec le caractère en cours.
    -Tu termines en retournant la valeur de checksum sous forme hexadécimale.

    Vala un code qui fonctionne avec les deux trames que tu donnes en exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function CheckSum(Chaine: String): String;
    var i, chksum: Integer;
    begin
     
      chksum:= 0;
     
      //Suppression des caractères '$' et '*' s'ils sont inclus dans la chaine
      if Chaine[1] = '$' then
        delete(Chaine, 1, 1);
      if Chaine[Length(Chaine)] = '*' then
        delete(Chaine, Length(Chaine), 1);
     
      //Calcul du CheckSum
      for i := 1 to length(Chaine) do
      begin
        chksum:= chksum xor Ord(Chaine[i])
      end;
     
      Result := '*' + IntToHex(chksum, 2);
     
    end;
    Vala comment je ferais... Si t'as besoin d'une grande vitesse d'exécution ptêtre que quelqu'un pourrait te traduire ça en assembleur inline, mais bon vu la taille de tes chaines ça ne semble pas trop lourd à gérer !

    Bonne prog' !
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 141
    Points : 109
    Points
    109
    Par défaut Merci...
    Bonjour,

    Super... merci beaucoup Bestiol pour ta réponse ultra rapide cela faisait un moment que je pataugeais grave...

    Je démarre en Delphi depuis qq semaines, je suis en train de découvrir que la communauté Delphi n'est pas un mythe...

    Amicalement...

  4. #4
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    eh non, la communauté Delphi n'est pas un mythe !! (qui a osé insinuer le contraire ?! )

    Pas de quoi pour la réponse !

    Par contre je t'ai donné le code direct, alors j'espère que tu l'as bien compris et que tu as bien saisi comment il fonctionne !
    En même temps je me dis que si tu bosses sur port série avec un module GPS, tu dois tout de même avoir une certaine expérience avec un autre langage ?!

    Quoi qu'il en soit s'il reste un point obscur là-dedans, demande !

    Bonne prog' !
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/12/2013, 11h18
  2. Traitement trame GPS
    Par Titsushi dans le forum Débuter
    Réponses: 0
    Dernier message: 16/03/2011, 19h48
  3. Communication série Trames gps NMEA problemes bufferedreader
    Par Ginoaria dans le forum Général Java
    Réponses: 1
    Dernier message: 18/02/2011, 08h49
  4. Checksum pour Trame GPS et Météo
    Par smeiris dans le forum Langage
    Réponses: 4
    Dernier message: 12/03/2008, 10h58
  5. récupérer données GPS (trames NMEA) sur PDA
    Par duguek dans le forum C++
    Réponses: 2
    Dernier message: 14/02/2007, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo