Перейти к содержанию

Разбор строк NMEA и контрольная сумма

Вставьте строки, которые GPS-модуль выдаёт в монитор порта, — инструмент проверит контрольные суммы, разложит каждое сообщение по полям с расшифровкой и переведёт координаты в градусы. Второй режим считает контрольную сумму для своей строки, например команды настройки приёмника.

Исходные данные

Что сделать

вывод приёмника из монитора порта: $GPGGA, $GNRMC, $GPGSV…

Результат

Сообщений разобрано
3
все контрольные суммы верны или не указаны
Координаты, градусы
47,285240, 8,565254из последнего сообщения с координатами
Градусы, минуты, секунды
47° 17′ 6,86″ N, 8° 33′ 54,91″ E

GGA — GPS, SBAS, QZSS

Данные решения: время, координаты, качество, спутники, высота

$GPGGA,092725.00,4717.11399,N,00833.91590,E,1,8,1.01,499.6,M,48.0,M,,0*5B

Контрольная сумма *5B верна

№ПолеЗначениеРасшифровка
1Время092725.0009:27:25.00 UTC
2Широта4717.11399
3N/SN
4Долгота00833.91590
5E/WE
6Качество решения1автономное решение
7Спутников в решении8
8HDOP1.01
9Высота над уровнем моря499.6499.6 м
10Единицы высотыM
11Превышение геоида над эллипсоидом48.048.0 м
12ЕдиницыM
13Возраст дифференциальных поправок—
14Номер базовой станции0

RMC — GPS, SBAS, QZSS

Рекомендуемый минимум: время, дата, координаты, скорость, курс

$GPRMC,083559.00,A,4717.11437,N,00833.91522,E,0.004,77.52,091202,,,A*57

Контрольная сумма *57 верна

№ПолеЗначениеРасшифровка
1Время083559.0008:35:59.00 UTC
2СтатусAданные достоверны
3Широта4717.11437
4N/SN
5Долгота00833.91522
6E/WE
7Скорость над землёй0.0040.004 уз (0,007 км/ч)
8Курс над землёй77.5277.52 °
9Дата09120209.12.2002
10Магнитное склонение—
11E/W склонения—
12РежимAавтономное решение

GSV — GPS, SBAS, QZSS

Видимые спутники: номер, возвышение, азимут, отношение сигнал/шум

$GPGSV,3,1,10,23,38,230,44,29,71,156,47,07,29,116,41,08,09,081,36*7F

Контрольная сумма *7F верна

№ПолеЗначениеРасшифровка
1Сообщений в группе3
2Номер сообщения1
3Спутников видно10
4Спутник 1: номер23
5Спутник 1: возвышение3838 °
6Спутник 1: азимут230230 °
7Спутник 1: сигнал/шум4444 дБГц
8Спутник 2: номер29
9Спутник 2: возвышение7171 °
10Спутник 2: азимут156156 °
11Спутник 2: сигнал/шум4747 дБГц
12Спутник 3: номер07
13Спутник 3: возвышение2929 °
14Спутник 3: азимут116116 °
15Спутник 3: сигнал/шум4141 дБГц
16Спутник 4: номер08
17Спутник 4: возвышение0909 °
18Спутник 4: азимут081081 °
19Спутник 4: сигнал/шум3636 дБГц

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

GPS- и ГЛОНАСС-приёмники выдают данные текстом по стандарту NMEA 0183: каждое сообщение — строка, которая начинается с $, содержит поля через запятую и заканчивается звёздочкой с контрольной суммой. Модули u-blox NEO-6M и NEO-M8N по умолчанию шлют в UART на 9600 бит/с сообщения GGA, GLL, GSA, GSV, RMC, VTG и TXT раз в секунду (даташиты NEO-6 и NEO-M8), и их можно прочитать прямо в мониторе порта. Инструмент раскладывает их по полям.

Устройство строки

ЧастьПримерЧто значит
Начало$начало сообщения
АдресGPGGATalker ID (GP) и тип сообщения (GGA); у собственных сообщений производителя — P и его код, у u-blox PUBX
Поля092725.00,4717.11399,N,…данные через запятую; пустое поле — значение неизвестно
Контрольная сумма*5BXOR всех символов между $ и *, две шестнадцатеричные цифры
Конец<CR><LF>возврат каретки и перевод строки

Приёмники u-blox 6 (в том числе NEO-6M) работают по версии NMEA 2.3, u-blox M8 — по версии 4.10, в которой у RMC добавилось поле навигационного статуса, у GSA — номер системы, у GSV — номер сигнала. Инструмент разбирает обе версии.

Основные сообщения

СообщениеЧто передаёт
GGAвремя, координаты, качество решения, число спутников, HDOP, высоту над уровнем моря
RMC«рекомендуемый минимум»: время, статус, координаты, скорость в узлах, курс, дату
GLLкоординаты и время
GSAрежим 2D/3D, номера спутников в решении, PDOP, HDOP, VDOP
GSVвидимые спутники: номер, возвышение, азимут, отношение сигнал/шум — по четыре в сообщении
VTGкурс и скорость в узлах и км/ч
ZDAвремя и дата

Признаки достоверности в u-blox такие: в RMC и GLL статус A — данные достоверны, V — нет; в GGA качество 0 — нет решения, 1 — автономное, 2 — дифференциальное, 6 — счисление. Скорость в RMC и VTG — в узлах: 1 узел — ровно 1,852 км/ч.

Коротко

  • Контрольная сумма — XOR кодов ASCII всех символов между $ и *.
  • Координаты — градусы и минуты: широта ггмм.мммм, долгота гггмм.мммм; градусы = гг + мм.мммм / 60.
  • Talker ID: GP — GPS, GL — ГЛОНАСС, GA — Galileo, GB — BeiDou, GN — несколько систем.

Как пользоваться

  1. Подключите модуль к компьютеру через USB-UART или выведите строки из микроконтроллера в монитор порта, скопируйте несколько строк и вставьте их в поле.
  2. Каждое сообщение раскладывается в таблицу: поле, сырое значение и расшифровка — время, статус, качество, скорость в км/ч, дата. Неверная контрольная сумма подсвечивается вместе с правильной.
  3. Чтобы отправить приёмнику команду — например, собственное сообщение u-blox PUBX,40 для включения или выключения отдельных сообщений на портах, — переключитесь в режим расчёта контрольной суммы и скопируйте готовую строку.

Даже в описаниях протокола встречаются опечатки: в примерах описания u-blox M8 у нескольких строк контрольная сумма не сходится — например, у RMC, в которую добавили поле версии 4.10, оставлена сумма *57 из примера u-blox 6, а правильная — *2D. Проверять свои строки лучше расчётом.

Частые вопросы

Как посчитать контрольную сумму NMEA?

Возьмите все символы между $ и * и выполните над их кодами ASCII исключающее ИЛИ (XOR) по очереди. Результат записывают двумя шестнадцатеричными цифрами после звёздочки. Для строки $GPGLL,,,,,,V,N она равна 0x64, и строка целиком — $GPGLL,,,,,,V,N*64. Знаки $ и * в расчёт не входят, как и перевод строки в конце.

Как перевести координаты из NMEA в градусы?

NMEA передаёт широту как ггмм.мммм, а долготу как гггмм.мммм — градусы и минуты с дробью. Отделите градусы и прибавьте к ним минуты, делённые на 60: широта 4717.112671 N — это 47 + 17,112671 / 60 = 47,28521118°, долгота 00833.914843 E — 8,56524738°. Для южной широты и западной долготы знак минус.

Чем GPGGA отличается от GNGGA?

Первые две буквы после $ — идентификатор источника (Talker ID). GP — решение по GPS (у u-blox вместе с SBAS и QZSS), GL — ГЛОНАСС, GA — Galileo, GB — BeiDou, GN — решение по нескольким системам сразу. Поля сообщения одинаковы; приёмник с ГЛОНАСС и GPS, например NEO-M8N в настройках по умолчанию, выдаёт GNGGA и GNRMC.

Почему в строке нет координат, а поля пустые?

Приёмник ещё не нашёл решение: после включения без данных о спутниках поиск занимает десятки секунд — у NEO-6M по даташиту около 27 с при хорошем сигнале. Пока решения нет, u-blox выводит пустые поля и признак недостоверности: в RMC и GLL статус V, в GGA качество 0. Под крышей и в помещении время поиска растёт или решение не находится вовсе.

Источники

  1. u-blox. u-blox 6 Receiver Description including Protocol Specification (GPS.G6-SW-10018-F) — разд. 16–20: NMEA 0183 версии 2.3, формат широты и долготы, флаги решения, сообщения GGA, GLL, GSA, GSV, RMC, VTG, ZDA, PUBX с примерами — эталон тестов
  2. u-blox. u-blox 8 / u-blox M8 Receiver Description including Protocol Specification (UBX-13003221), R28 — разд. 31: NMEA 4.10, Talker ID (GP, GL, GA, GB, GN), флаги решения и режимы, поля RMC с navStatus, GSV с signalId — второй источник примеров
  3. u-blox. NEO-6 u-blox 6 GPS Modules Data Sheet (GPS.G6-HW-09005-E) — разд. 1.3: время первого решения NEO-6M (холодный старт 27 с); настройки по умолчанию: NMEA, 9600 бит/с
  4. u-blox. NEO-M8 Data Sheet (UBX-15031086), R14, 2025 — разд. 8: UART 9600 бит/с 8N1, сообщения GGA, GLL, GSA, GSV, RMC, VTG, TXT при включении; табл. 1 — приём GPS и ГЛОНАСС по умолчанию
Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/nmea/" title="Разбор строк NMEA и контрольная сумма" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/nmea/">Разбор строк NMEA и контрольная сумма</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?