从串行端口解析NMEA数据时遇到问题
问题描述:
我正在从串行GPS获取NMEA语句。然后字符串像我期望的那样出现。问题是,分析这样的句子时:从串行端口解析NMEA数据时遇到问题
$GPRMC,040302.663,A,3939.7,N,10506.6,W,0.27,358.86,200804,,*1A
我用一个简单的代码位,以确保我有权利sentect:
string[] Words = sBuffer.Split(',');
foreach (string item in Words)
{
if (item == "$GPRMC")
{
return "Correct Sentence";
}
else
{
return "Incorrect Sentence
}
}
我增加了对在该位置返回例。我已将分割结果打印到文本框中,并且已经看到$ GPRMC确实在某个点处出现在项目变量中。如果字符串遇到为什么if语句不会被捕获?是$?我该如何解决这个问题?
答
它已经有一段时间,因为我读的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数据流输出比极小数据,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);
}
答
编辑:我的回答下面没有起色,作为评论员mtrw说明,==
由string类重载。我错了。
我的想法你的if
-声明有问题。使用==
运算符,您正在检查它是否是相同的引用(当然不是这种情况)。要简单比较两个字符串是否包含相同的值,请使用String.Equals()
。
您确定您提供的源字符串与您的sBuffer变量一样吗?难道在逗号前有空格吗?还是其他一些小的不一致?另外,尝试在foreach语句中设置一个断点。当它命中时,将sBuffer和Words添加到调试器手表中,然后展开Words,然后截取并在此处发布。 – 2010-04-18 18:58:22
哦,忘了补充:不,美元符号与它无关。 – 2010-04-18 18:59:12
确保那里没有任何非打印控制字符,例如从前一行读到CR的剩余LF字符。 – 2010-04-18 19:50:41