NMEA 0183 - это комбинированная электрическая спецификация и данные для связи между морской электроника, такая как эхолот, сонары, анемометр, гирокомпас, автопилот, Приемники GPS и многие другие виды приборов. Он был определен и контролируется Национальной ассоциацией морской электроники. Он заменяет более ранние стандарты NMEA 0180 и NMEA 0182 . В морских приложениях для отдыха от него постепенно отказываются в пользу нового стандарта NMEA 2000, хотя NMEA0183 остается нормой в коммерческом судоходстве.
Используемый электрический стандарт - EIA-422, хотя большая часть оборудования с выходами NMEA-0183 также может управлять одним портом EIA-232. Хотя стандарт требует изолированных входов и выходов, существуют различные серии оборудования, которые не соответствуют этому требованию.
Стандарт NMEA 0183 использует простой протокол ASCII, последовательной связи, который определяет, как данные передаются в «предложении» от одного «говорящего» к нескольким »слушателям. " вовремя. Благодаря использованию промежуточных расширителей, говорящий может вести однонаправленный разговор с почти неограниченным количеством слушателей, а с помощью мультиплексоров несколько датчиков могут общаться с одним портом компьютера.
На уровне приложения стандарт также определяет содержимое каждого типа предложения (сообщения), чтобы все слушатели могли точно анализировать сообщения.
Хотя NMEA0183 определяет только транспорт RS422, также существует стандарт де-факто, в котором предложения из NMEA0183 помещаются в дейтаграммы UDP (одно предложение на пакет) и отправляются по IP-сети..
Стандарт NMEA является патентованным и продается по крайней мере за 2000 долларов США (за исключением членов NMEA) по состоянию на сентябрь 2020 года. Однако большая часть его была реконструирована из открытых источников.
Типичная Скорость передачи | 4800 |
---|---|
Биты данных | 8 |
Четность | Нет |
Стоповые биты | 1 |
Подтверждение связи | Нет |
Существует вариант стандарта под названием NMEA-0183HS, который определяет скорость передачи 38 400 бод. Обычно это используется устройствами AIS.
ASCII | Hex | Dec | Использовать |
---|---|---|---|
0x0d | 13 | Возврат каретки | |
0x0a | 10 | Перевод строки, конечный разделитель | |
! | 0x21 | 33 | Начало разделителя предложения инкапсуляции |
$ | 0x24 | 36 | Начальный разделитель |
* | 0x2a | 42 | Разделитель контрольной суммы |
, | 0x2c | 44 | Разделитель полей |
\ | 0x5c | 92 | Разделитель блока TAG |
^ | 0x5e | 94 | Разделитель кода для HEX-представления символов ISO / IEC 8859-1 (ASCII) |
~ | 0x7e | 126 | Зарезервировано |
В качестве примера тревога прибытия в точку маршрута имеет форма:
Другой пример сообщений AIS:
Большинство производителей GPS включают специальные сообщения в дополнение к стандартным сообщениям NMEA, установленным в их продуктах, для целей технического обслуживания и диагностики. Расширенные сообщения начинаются с «$ P». Эти расширенные сообщения не стандартизированы.
NMEA 0183 поддерживается различным программным обеспечением для навигации и картографии. Среди известных приложений:
nmea(4)
псевдоустройством драйверомОбразец файла, созданный регистратором GPS Tripmate 850. Этот файл был создан в Leixlip, County Kildare, Ireland. Рекорд длится две секунды.
$ GPGGA, 092750.000,5321.6802, N, 00630.3372, W, 1,8,1.03,61.7, M, 55.2, M,, * 76 $ GPGSA, A, 3,10,07,05,02, 29,04,08,13,,,,, 1.72,1.03,1.38 * 0A $ GPGSV, 3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157, 30 * 70 $ GPGSV, 3,2,11,02,39,223,19,13,28,070,17,26,23,252`` 04,14,186,14 * 79 $ GPGSV, 3,3,11,29,09,301, 24,16,09,020`` 36`` * 76 $ GPRMC, 092750.000, A, 5321.6802, N, 00630.3372, W, 0,02,31.66,280511`` A * 43 $ GPGGA, 092751.000,5321.6802, N, 00630.3371, W, 1,8,1.03,61.7, M, 55.3, M,, * 75 $ GPGSA, A, 3,10,07,05,02,29,04,08,13,,,,, 1,72,1.03, 1,38 * 0A $ GPGSV, 3,1,11,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30 * 70 $ GPGSV, 3,2,11,02,39,223, 16,13,28,070,17,26,23,252`` 04,14,186,15 * 77 $ GPGSV, 3,3,11,29,09,301,24,16,09,020`` 36`` * 76 $ GPRMC, 092751.000, A, 5321.6802, N, 00630.3371, W, 0.06,31.66,280511,,, A * 45
Обратите внимание на некоторые пустые поля, например:
Контрольная сумма в конце каждого предложения - это XOR всех байтов в предложении, исключая начальный знак доллара. Следующий код C генерирует контрольную сумму для строки, введенной как «mystring», и выводит ее в выходной поток. В примере используется предложение из файла-образца.
#includeконтрольная сумма int (const char * s) {int c = 0; в то время как (* s) c ^ = * s ++; return c; } int main () {char mystring = "BNALF, 1,1,0,, B, W, V,, 220003,, 0,0, ВИЗУАЛЬНАЯ СИГНАЛИЗАЦИЯ"; printf ("Строка:% s \ nChecksum: 0x% 02X \ n", mystring, контрольная сумма (mystring)); возврат 0; }
NMEA 0183 продолжал поддерживаться отдельно: версия 4.10 была опубликована в начале мая 2012 г., а 12 мая 2012 г. была обнаружена ошибка. Неясно, ведется ли какая-либо активная разработка. Последнее объявление NMEA по этому вопросу старше стандарта V4.10. Есть обновление от 27 ноября 2018 г. до 4.11.