0

任意の文字列を含む可能性がある NMEA 互換の独自のセンテンスを作成しようとしています。

チェックサムを含む NMEA センテンスの通常の形式は次のとおりです。

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

ここ*で、2 桁のチェックサムの開始を示します。

私の質問は次のとおりです。値フィールドのいずれかに*文字自体を含めることができますか?

パーサーが最後の を待ってから、(文<cr><lf>の最初の文字を待つのではなく) 前の 3 文字を調べて、存在する場合はチェックサムを見つけることができるように思われます。*ただし、標準で許可されているかどうかはわかりません。

問題を引き起こす可能性のある他の文字はありますか?

4

2 に答える 2

2

注意が必要な 2 つの ASCII 文字は、先頭になければならない $ と、チェックサムの前にある * です。カスタム NMEA を解析する他の人は、これらの文字のいずれかが他の場所で見つかるとは思わないでしょう。一部のパーサーは、$ をヒットすると、新しい行が開始されたと想定します。シリアルポート通信では、転送中に文字が失われることがあります。そのため、$ 文頭マーカーがあります。

独自の NMEA コマンドを作成する場合は、P で開始し、その後に独自のメッセージを作成しているメーカーまたは会社を示す 3 文字のコードを続けるのが通例であるため、$PSQU を使用できます。NMEA コマンドの長さは 5 文字にすることをお勧めしますが、4 文字から 7 文字の長さのさまざまなハードウェアおよびソフトウェア メーカーによる独自のメッセージが存在することに注意してください。

明らかに、独自のパーサーを作成している場合は、好きなことを行うことができます。

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

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

于 2011-02-24T16:05:43.863 に答える
1

自分でプロトコルを拡張している場合 (「専有」に基づいて) - 確かに、好きなものを入れることができます。私はASCIIに固執しますが、その範囲内でワイルドになります. (明らかに、既存のメッセージと衝突しないように、独自の $GPxxx を考え出す必要があります。おそらく、新しいヘッダー $SQUEL などです...)

定義上、独自のメッセージは NMEA と互換性がありません。

NMEA ストリームをリッスンする標準的なパーサーは、「適切な」データと見なされるものと一致しないものはすべて無視する必要があります。これは、チェックサム エラー、または新しいメッセージにランダムな * がスローされていると思われるような、大幅に破損したメッセージを意味します。

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

于 2011-01-07T01:40:03.440 に答える