2010-12-14 50 views
0

J'essaie de créer des phrases propriétaires compatibles NMEA, qui peuvent contenir des chaînes arbitraires.Les valeurs NMEA peuvent-elles contenir '*' (astérisques)?

Le format habituel pour une phrase NMEA avec la somme de contrôle est:

$GPxxx,val1,val2,...,valn*ck<cr><lf> 

* marque le début d'une somme de contrôle à 2 chiffres.

Ma question est la suivante: Est-ce que l'un des champs de valeur peut contenir lui-même un caractère *?

Il semblerait possible pour un analyseur d'attendre la dernière <cr><lf>, puis de revenir sur les 3 caractères précédents pour trouver la somme de contrôle si elle est présente (plutôt que d'attendre simplement la première * dans la phrase). Cependant je ne sais pas si la norme le permet.

D'autres caractères peuvent-ils causer des problèmes?

Répondre

2

Les deux caractères ASCII à surveiller sont $, qui doit être au début, et * qui précède la somme de contrôle. N'importe qui d'autre analysant votre NMEA personnalisée ne s'attendrait pas à trouver l'un ou l'autre de ces caractères ailleurs. Certains analyseurs, lorsqu'ils touchent un $, supposent qu'une nouvelle ligne a démarré. Avec la communication par port série, les personnages se perdent parfois en transit, et c'est pourquoi il y a un marqueur $ start of phrase. Si vous voulez créer vos propres commandes NMEA, il est habituel de les démarrer avec P, suivi d'un code à 3 caractères indiquant le fabricant ou l'entreprise qui a créé le message propriétaire. Vous pouvez donc utiliser $ PSQU. Notez que bien qu'il soit recommandé que les commandes NMEA comportent 5 caractères, il existe des messages exclusifs de divers fabricants de matériel et de logiciels qui ont entre 4 caractères et 7 caractères.

De toute évidence, si vous écrivez votre propre analyseur, vous pouvez faire ce que vous voulez.

Ce site est plutôt utile:

http://www.gpsinformation.org/dale/nmea.htm

1

Si vous étendez le protocole vous-même (basé sur "propriétaire") - alors, bien sûr, vous pouvez mettre dans tout ce que vous aimez. Je m'en tiens à l'ASCII, mais je deviens fou dans ces limites. (De toute évidence, vous devez créer votre propre $ GPxxx afin de ne pas entrer en conflit avec les messages existants.)

Par définition, un message propriétaire ne sera pas compatible avec NMEA.

Un analyseur standard écoutant un flux NMEA doit ignorer tout ce qui ne correspond pas à ce qu'il pense être de «bonnes» données. Cela signifie une erreur de somme de contrôle, ou un message massivement corrompu comme si vous pensiez que votre nouveau message est envoyé avec un peu de hasard.

Si vous écrivez simplement un message existant, alors un * n'a pas de sens, et devrait être ignoré, mais vous courez le risque de problèmes majeurs si la somme de contrôle est correcte et que l'analyseur ne comprend pas la charge utile.

+0

Merci, très instructif! Je suppose que par "compatible NMEA", je voulais dire qu'il suit la structure de la phrase NMEA. Je suppose que je vais éviter (ou traduire) '*' alors. – squelart