无法从串行端口解析NMEA数据

时间:2010-04-18 18:47:35

标签: c# serial-port gps parsing nmea

我正在从序列GPS中检索NMEA句子。然后字符串就像我期望的那样。问题在于解析这样的句子时:

$GPRMC,040302.663,A,3939.7,N,10506.6,W,0.27,358.86,200804,,*1A

我使用一些简单的代码来确保我有正确的意义:

        string[] Words = sBuffer.Split(',');
        foreach (string item in Words)
        {
            if (item == "$GPRMC")
            {
                return "Correct Sentence";
            }
            else
            {
                return "Incorrect Sentence
            }
        }

我为该示例添加了该位置的返回值。我已将拆分结果打印到文本框中,并且已经看到$ GPRMC确实在某个时刻出现在item变量中。如果字符串遇到了为什么if语句不会捕获?是$?我怎么能麻烦拍这个呢?

3 个答案:

答案 0 :(得分:2)

我读了NMEA GPS已经有一段时间......

您是否需要比较与NMEA数据类型对应的子字符串而不是整个NMEA缓冲区元素? .Split方法在NMEA语句中的所有逗号上拆分sBuffer,以便您拥有每个单独的元素。但是,您正在针对循环中的第一个元素测试子字符串,这意味着您要查看每个元素。混乱...

所以你的测试看起来不会更好:

string[] Words=sBuffer.Split(',');
if(String.Compare(Words[0],"$GPRMC")==0) 
            {
                return "Correct Sentence";
            }
            else
            {
                return "Incorrect Sentence
            }

NMEA流是否有可能输出Min Data,GPRMC句子以外的句子,你需要重读才能得到正确的句子?此外,您确定GPS的数据类型为$GPRMC而不是GPRMC吗?我不认为数据类型中应该有$

即,伪:

do {
  buffer=read_NMEA();  //making sure the entire sentence is read...
  array=split(buffer,",");
  data_type=buffer[0];
}
while(data_type!="GPRMC" || readcount++<=MAX_NMEA_READS)

要调试循环,请尝试控制器写入元素:

string[] Words = sBuffer.Split(',');
        foreach (string item in Words)
        {
            Console.WriteLine(item);
        }

答案 1 :(得分:1)

你在计算校验和吗,我没有看到它。

NMEA Wiki

答案 2 :(得分:0)

编辑:我的答案没有改进,正如评论员mtrw所说,==被字符串类重载。我错了。

在我看来你的if - 陈述是错误的。使用==运算符,您正在检查它是否是相同的引用(当然不会是这种情况)。要简单地比较两个字符串是否包含相同的值,请使用String.Equals()