3

GPS を搭載した Mio P550 デバイスを持っています。SerialPort.Read() を使用するだけで、SerialPort を使用して NMEA センテンスを取得しようとしています。データは奇妙なエンコーディングで返されます。GPS は NMEA センテンスを ASCII で返す必要がありますが、そうではありません。読むための私のコードは次のとおりです。

                dataLength = this.serialPort.Read(buffor, 0, Gps.BUFFOR_LENGTH);
                Debug.WriteLine("data length: " + dataLength);

                if (dataLength > 0)
                {
                    for (int i = 0; i < dataLength; i++)
                    {
                        char c = Convert.ToChar(buffor[i]);

                        if (c == '\r' || c == '\n')
                        {
                            string data = stringBuilder.ToString();
                            Debug.WriteLine("data readed: " + data);

                            if (data.StartsWith("$GPGGA"))
                            {
                                this.OnLocationChanged(data);
                            }

                            stringBuilder.Length = 0;
                        }
                        else
                        {
                            stringBuilder.Append(c);
                        }

                        Debug.WriteLine("readed data: " + stringBuilder.ToString());
                    }

そして、これが私が返すサンプル値です: xæææxfæ`æxæføøøxxxøx

ASCII で NMEA 文を返す 2 つ目のデバイス (Asus A636N) もあり、私のコードはうまく機能します。

NMEA センテンスを ASCII で取得するには、Mio デバイスをどうする必要がありますか? または、デバイスから返されたデータのエンコードを取得するにはどうすればよいですか? System.Text.Encoding.xxx.GetString() のすべてのクラスを使用して、読み取ったバイトから文字列を取得しようとしましたが、正しいデータが返されません。上記のサンプルと同様のデータが返されます。

4

1 に答える 1

7

おそらく、シリアル ポートのボー レートがNMEA 仕様で要求されている4800 ボーに設定されていることを確認する必要があります。

于 2009-08-17T11:36:42.663 に答える