2013-03-14 4 views
1

Во время анализа вывода NMEA приемника GPS я получаю следующие строки:Действительно ли это предложение GPGSV?

$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), это неправильно. Согласно третьему номеру, должно быть 16 спутников, что справедливо для всех тех приемников GPS, с которыми я раньше сталкивался, но предложение из этого только содержит данные для 13 спутников.

Это ошибка? Или я неправильно прочитал спецификацию?

ответ

7

Nmea - это слабо заданный формат файла. Производители чипов GPS предоставляют документацию, как они интерпретируют спецификацию NMEA.
Например, у ublox и Sirf есть глава из 40 страниц, описывающая, как интерпретировать формат NMEA.

Итак, если вы пишете «Или я неправильно прочитал спецификацию?», Тогда возникает вопрос, какая спецификация вы читаете. Это производитель чипов GPS? Спецификация NMEA 0183 не содержит достаточной информации для правильного анализа предложений.

Особенно в вашем случае: протокол NMEA не описывает, как обрабатывать пустые значения и недействительные.

В вашем случае приемник там увидит 16 спутников, но найдено только 13. Я бы ожидал, что у пропавших 3 сатов будет пусто ",,,,,,,,". Но, очевидно, производитель решил просто остановиться и добавить строку контрольной суммы. (Ее попросту не speciefied, что обязательно печатать пустую запятую пропавшей 3 Сац.

Unfortunaetly вы должны ожидать, чтобы написать NMEA парсер для каждого производителя чипов ТЭС.
Therfore Я всегда рекомендую использовать бинарный (e, .g uBlox bianry или Sirf двоичный, потому что они точно указаны).

Вы также можете ознакомиться с документом для GpsBable: они показывают, как различные производители производят разные наборы данных GSV.

Обновление:
Как вы теперь сказали, что это приемник ublox:

Ответ: да, предложения NMEA действительны. Посмотрите на спецификацию протокола ublox. я использую спец для u-blox 5: На странице, где GSV предложение описывается вид на «Structure» Сообщение:

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

фигурных скобок накроет последовательность, которая повторяется. И ниже смотрите «1..4»: это означает 1,2,3 или 4 блока. Не написано «4», его «1..4», поэтому спутниковая информация является необязательной и не должна быть пустой.

Если вы посмотрите на пример, который дает ublox, вы увидите, что последнее сообщение GPGSV содержит менее 4 спутников, точно так же, как вы показываете в своем вопросе.

+0

Так как вы конкретно упомянуть и u-blox SiRF документации: Является ли эта документация доступна на веб-сайте где-нибудь? – dummzeuch

+0

Обнаружил это, но это не помогло, потому что документация по ublox более не специфична для предложения GSV. – dummzeuch

+0

ublix spec не поможет, потому что ваше устройство, очевидно, принадлежит другому производителю. если отсутствующие «,,,,,,,,» были созданы партнерской компанией или работающим коллегой, просто попросите их заполнить предложение GSV пустыми полями. – AlexWien

0

Да, это непоследовательно; последнее сообщение должно было бы описать более одного спутника (на самом деле четыре), чтобы в общей сложности рекламировать 16. GPS-приемник должен был сообщить, по крайней мере, идентификаторы спутников (PRN), даже если их направление наблюдения в небе и SNR были неизвестны в то время, например: {, 01 ,,}}.

Это, как говорится, лучше писать программы, терпимые к плохо сформированным сообщениям; в этом случае обновление количества спутников с учетом 13, как считалось.

(я проверил контрольные суммы, и они все в порядке.)

Смежные вопросы