3

我有一台包含 GPS 的 Mio P550 设备。我尝试使用 SerialPort 来获取 NMEA 语句,只需使用 SerialPort.Read()。数据以某种奇怪的编码返回。GPS 应该以 ASCII 格式返回 NMEA 语句,但事实并非如此。这是我的阅读代码:

                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

我还有第二台设备(华硕 A636N),它以 ASCII 码返回 NMEA 语句,我的代码运行良好。

使用 Mio 设备获取 ASCII 格式的 NMEA 语句需要做什么?或者我如何获得设备返回的数据的编码?我尝试使用 System.Text.Encoding.xxx.GetString() 中的所有类从读取的字节中获取字符串,但它没有返回正确的数据 - 它返回类似于上面示例的数据。

4

1 回答 1

7

您可能需要确保按照NMEA 规范的要求将串行端口的波特率设置为4800 波特。

于 2009-08-17T11:36:42.663 回答