2010-12-14 2 views
0

私は任意の文字列を含む可能性があるNMEA互換の独自の文章を作成しようとしています。NMEAの値に '*'(アスタリスク)を含めることはできますか?

チェックサムとNMEAセンテンスのための通常の形式は:* 2桁のチェックサムの開始をマーク

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

私の質問は次のとおりです。いずれの値フィールドにも*文字が含まれていますか?

パーサが最終的に<cr><lf>を待ってから、チェックサムがある場合は前の3文字を振り返って(最初の*を待つのではなく)チェックサムがあるように見えるかもしれません。しかし、私は標準がそれを許すかどうかわかりません。

他にも問題が発生する可能性がありますか?

答えて

2

注意しなければならない2つのASCII文字は、先頭にある必要がある$とチェックサムに先行する*です。あなたのカスタムNMEAを解析する他の人は、他の場所にそれらの文字のいずれかを見つけることを期待しません。いくつかのパーサーは、$を打つと、新しい行が開始されたと仮定します。シリアルポート通信では、文字が途中で失われてしまうことがあります。そのため、文頭に$記号が付いています。

独自のNMEAコマンドを作成する場合は、Pを使用して独自のメッセージを作成するメーカーまたは会社を示す3文字のコードを開始するのが通例です。そのため、$ PSQUを使用できます。 NMEAコマンドの長さは5文字であることが推奨されていますが、さまざまなハードウェアメーカーやソフトウェアメーカーが4文字から7文字の長さの専用メッセージを用意しています。

あなた自身のパーサーを書くなら、あなたが好きなことを行うことができます。

このウェブサイトはかなり便利です:

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

1

自分でプロトコルを拡張している場合(「プロプライエタリ」に基づいて)、あなたが好きなものを置くことができます。私はASCIIに固執しますが、それらの範囲内で野生になります。 (明らかに、既存のメッセージと衝突しないように、自分の$ GPxxxを用意する必要があります)。

定義上、プロプライエタリメッセージはNMEA互換ではありません。

NMEAストリームをリッスンしている標準パーサーは、「良い」データとは異なるものを無視する必要があります。これは、チェックサムエラー、または新しいメッセージが投げ込まれたランダムなものがあると思うような重大な壊れたメッセージを意味します。

もし単に既存のメッセージを書いているなら、*は意味をなさないし、無視する必要がありますが、チェックサムが正しく、パーサーがペイロードを理解していない場合、大きな問題が発生するリスクがあります。

+0

おかげで、非常に有益な!私は、「NMEA互換」とは、NMEA文章構造に従うことを意味していました。私は '*'を避ける(または翻訳する)と思います。 – squelart

関連する問題