NMEA 0183 (от «National Marine Electronics Association») — стандарт, определяющий текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой. Стал особенно популярен в связи с распространением GPS-приёмников, использующих этот стандарт.

Общий вид строк в NMEA 0183 символ «$» или «!» (hex 24 или hex 21) 5-буквенный идентификатор сообщения. Первые две буквы — идентификатор источника сообщения, следующие три буквы — идентификатор формата сообщения, согласно протоколу NMEA 0183 определённой версии. список данных (буквы, цифры и точки), разделённых запятыми. Если какие-либо данные отсутствуют внутри строки, запятые всё равно ставятся (например «,,»). Некоторые поля в конце строки могут отсутствовать вовсе. символ «*». восьмибитная XOR-сумма всех символов (включая «,» и «^») в строке между «$» и «*» приведенная к двум ASCII-символам в верхнем регистре для 16-ричного представления байта (0–9, A–F). <CR><LF> (hex 0D, hex 0A). Максимальная длина сообщения ограничена 82 символами (NMEA 0183 rev 3.0)

Стандарт описывает более 250 идентификаторов NMEA-последовательностей. Стандарт определяет скорости обмена данными в 4800 бод. (Для скоростей в 38400 бод и выше есть расширенный стандарт NMEA-0183-HS).

Стандарт позволяет добавлять собственные идентификаторы последовательностей, что часто используется производителями для передачи дополнительной информации о работе устройства.

NMEA синтаксис Сообщения начинаются с заголовка. Заголовок делится на две части: ID и тип.

ID - идентификатор источника (Спутниковая система) +IDСистема спутниковGPGPSGLGLONASSGAGalileoBDBeiDouGBBeiDou Стандарт определяет ID начинающиеся с символа P, как ID для кодирования по усмотрению производителя GNSS приемника

RMC-строка (частный пример) $GPRMC,hhmmss.sss,A,GGMM.MM,P,gggmm.mm,J,v.v,b.b,ddmmyy,x.x,n,m*hh<CR><LF>

Значение полей: «GP» — идентификатор источника; в приведенном примере это GPS, «GL» — ГЛОНАСС, «GA» — Галилео, «GN» — ГЛОНАСС+GPS и т. п. «RMC» — «Recommended Minimum sentence C» «hhmmss.sss» — время фиксации местоположения по Всемирному координированному времени UTC: «hh» — часы, «mm» — минуты, «ss.sss» — секунды. Длина дробной части секунд варьируется. Лидирующие нули не опускаются. «A» — статус: «A» — данные достоверны, «V» — недостоверны. «GGMM.MM» — широта. 2 цифры градусов(«GG»), 2 цифры целых минут, точка и дробная часть минут переменной длины. Лидирующие нули не опускаются. «P» — «N» для северной или «S» для южной широты. «gggmm.mm» — долгота. 3 цифры градусов(«ggg»), 2 цифры целых минут, точка и дробная часть минут переменной длины. Лидирующие нули не опускаются. «J» — «E» для восточной или «W» для западной долготы. «v.v» — горизонтальная составляющая скорости относительно земли в узлах. Число с плавающей точкой. Целая и дробная части переменной длины. «b.b» — путевой угол (направление скорости) в градусах. Число с плавающей точкой. Целая и дробная части переменной длины. Значение равное 0 соответствует движению на север, 90 — восток, 180 — юг, 270 — запад. «ddmmyy» — дата: день месяца, месяц, последние 2 цифры года (ведущие нули обязательны). «x.x» — магнитное склонение в градусах (часто отсутствует), рассчитанное по некоторой модели. Число с плавающей точкой. Целая и дробная части переменной длины. «n» — направление магнитного склонения: для получения магнитного курса магнитное склонение необходимо «E» — вычесть, «W» — прибавить к истинному курсу. «m» — индикатор режима: «A» — автономный, «D» — дифференциальный, «E» — аппроксимация, «N» — недостоверные данные (часто отсутствует, данное поле включая запятую отсутствует в старых версиях NMEA). «hh» — контрольная сумма. <CR> — байт равен 0x0D. <LF> — байт равен 0x0A.

Примеры RMC-строки Пример 1 $GPRMC,125504.049,A,5542.2389,N,03741.6063,E,0.06,25.82,200906,,,*17

Значение полей: 12 часов 55 минут 4,049 секунд UTC «A» — достоверно широта 55° 42,2389', северная долгота 37° 41,6063', восточная скорость 0,06 узлов направление движения 25,82 градуса 20 сентября (20)06 года магнитное склонение не указано направление магнитного склонения не указано индикатор режима отсутствует контрольная сумма 0x17

Пример 2 $GPRMC,,V,,,,,,,080907,9.6,E,N*31

Значение полей: «V» — недостоверно 8 сентября (20)07 года магнитное склонение восточное, 9,6° «N» — недостоверные данные контрольная сумма 0x31

Все остальные поля отсутствуют (нет сигнала от спутников).

Пример приёмника Карманный коммерческий приёмник Garmin eTrex поддерживает обмен следующими строками: NMEA 0183 версия 3.0: GPGGA — данные о последнем определении местоположения GPGLL — координаты, широта/долгота GPGSA — DOP (GPS) и активные спутники GPGSV — наблюдаемые спутники GPWPL — параметры заданной точки GPBOD — азимут одной точки относительно другой GPRMB — рекомендуемый минимум навигационных данных для достижения заданной точки GPRMC — рекомендуемый минимум навигационных данных (см. выше) GPRTE — маршруты HCHDG — данные от компаса Собственные (проприетарные) строки фирмы Garminhttp://www8.garmin.com/support/pdf/NMEA_0183.pdf : PGRME — оценка ошибки измерений PGRMM — картографические данные PGRMZ — высота PSLIB — контроль приёма маяков

Примечания

Ссылки Протокол NMEA 0183 (неофициальное и неполное описание) Неофициальное описание NMEA Список протоколов NMEA LGPL C библиотека для разбора и генерации NMEA протокола Библиотека, входящая в стандартную библиотеку языка tcl для работы с NMEA Библиотека с полной поддержкой протокола NMEA 0183 2.0 (C#)

* Категория:GPS Категория:ГЛОНАСС Категория:Бэйдоу