NMEA-0183

NMEA 0183 (от «National Marine Electronics Association») — стандарт определяющий текстовый протокол связи морского (как правило, навигационного) оборудования (или оборудования, используемого в поездах) между собой.Этот NMEA протокол описывает не только данные, полученные с GPS приемников, но и измерения сонаров, радаров, электронных компасов, барометров и других навигационных устройств, использующихся на морских судах. Интерфейс обмена данными большинства портативных GPS приемников реализован в соответствии с NMEA спецификацией. Большинство навигационных программ, которые обеспечивают отображение данных в реальном времени, поддерживают и «понимают» NMEA протокол. Эти данные содержат полные навигационные измерения GPS приемника – позицию, скорость и время.Все NMEA сообщения состоят из последовательного набора данных, разделенных запятыми. Каждое отдельное сообщение не зависит от других и является полностью «завершенным». NMEA cообщение включает заголовок, набор данных, представленных ASCII символами, и поле «чексуммы» .Стал особенно популярен в связи с распространением GPS – приёмников, использующих этот стандарт.Он включает в себя систему сообщений для обмена информацией между навигационными GPS-приемниками и потребителями навигационной информации. Все команды и сообщения передаются в текстовом ASCII-виде.APRS основан на использовании координат от GPS приемника и в большинстве реализаций использует именно NMEA 0183.

Общий вид строк в 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-последовательностей. Стандарт определяет скорости обмена данными по протоколу RS-232  в 4800 бод. (Для скоростей в 38400 бод и выше есть расширенный стандарт NMEA-0183-HS). Сейчас GPS приемники часто оборудуют еще и USB.

Список сообщений

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

  • AAM – Прибытие в путевую точку
  • ALM – Данные альманаха
  • АPA – Данные автопилота «А»
  • APB – Данные автопилота «В»
  • BOD – Азимут на пункт назначения
  • DTM – Используемый датум
  • GGA – Информация о фиксированном решении
  • GLL – Данные широты и долготы
  • GSA – Общая информация о спутниках
  • GSV – Детальная информация о спутниках
  • MSK – Передача управлению базовому приемнику
  • MSS – Статус базового приемника
  • RMA – Рекомендованный набор данных системы «Lora
  • RMB – Рекомендованный набор навигационных GPS данных
  • RMC – Рекомендованный минимальный набор GPS данных
  • RTE – Маршрутная информация
  • VTG – Вектор движения и скорости
  • WCV – Данные скорости вблизи путевой точки
  • WPL – Данные путевой точки
  • XTC – Ошибка отклонения от трека
  • XTE – Измеренная ошибка отклонения от трека
  • ZTG – UTC время и оставшееся время до прибытия в точку назначения
  • ZDA – Дата и время.

Некоторые из NMEA сообщений могут содержать одинаковые поля данных, либо полностью содержать данные других, меньших по размеру, NMEA сообщений.

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

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.

Обсуждение закрыто.