这个GPGSV句子有效吗?

时间:2013-03-14 14:11:17

标签: gps nmea

在解析GPS接收器的NMEA输出时,我得到以下几行:

$GPGSV,4,1,16,02,17,228,35,03,04,048,37,05,59,285,29,06,02,030,34*73
$GPGSV,4,2,16,07,58,061,46,08,80,159,40,09,11,227,32,10,51,167,47*77
$GPGSV,4,3,16,13,15,089,38,15,00,279,,16,00,018,,26,34,279,42*7A
$GPGSV,4,4,16,28,20,154,39*4C

根据我的理解,从网络上的各种来源(例如here),这是错误的。根据第3个数字,应该有16颗卫星,这对我之前遇到过的所有GPS接收机都是如此,但是这个卫星只能包含13颗卫星的数据。

这是一个错误吗?或者我是否错误地阅读了规范?

2 个答案:

答案 0 :(得分:7)

Nmea是一种弱指定的文件格式。 GPS芯片制造商提供了他们如何解释NMEA规范的文件 例如,ublox和Sirf各有一章约40页描述如何解释NMEA格式。

因此,如果您写“或者我是否错误地阅读了规范?”,那么问题就在于您正在阅读哪种规范。那个GPS芯片制造商? NMEA 0183规范没有足够的信息来正确解析句子。

特别是在您的情况下:NMEA协议不会如何处理空值与无效值。

在你的情况下,接收器预计会看到16颗卫星,但只发现了13颗。 我希望失踪的3个坐着会有空的“,,,,,,,,”。但显然制造商决定停止并附加校验和字符串。 (它根本没有说明必须为缺少的3个坐标打印出空分号。

不幸的是,您必须为每个CHPS芯片制造商编写NMEA解析器 因此,我总是建议使用Chip manufactureres协议的二进制格式。 (例如,.g uBlox bianry或Sirf binary,因为这些是完全指定的。)

您可以进一步查看GpsBable的文档:它们显示了不同的制造商如何生成不同的GSV数据集。

<强>更新
正如你现在所说的那样,它是一个ublox接收器:

答案是,是的NMEA句子是有效的。看看ublox协议规范。我使用ublox 5的规范: 在描述GSV句子的页面上,查看“消息结构”:

{,sv,elv,az,cno}*cs

花括号包含重复的序列。 下面看“1..4”:这意味着1,2,3或4块。没有写“4”,其“1..4”因此卫星信息是可选的,并且不能为空。

如果您进一步查看ublox给出的示例,那么您会看到,上一条GPGSV消息包含的卫星少于4颗,与您在问题中显示的完全一样。

答案 1 :(得分:0)

是的,它不一致;最后一条消息应该描述了多个卫星(实际上是四个),以便共有16个广告。 GPS接收器应该至少报告卫星ID(PRN),即使它们在天空中的观察方向和SNR当时是未知的,例如:{,01 ,,,}。

话虽如此,最好编写容忍不良信息的程序;在这种情况下,将视图中的卫星数量更新为13。

(我检查了校验和,他们没事。)