Формирование сообщений АИС для тестирования навигационных систем
Привет. Всё началось с того, что у меня возникла необходимость проверки АИС модулей программ Open CPN и NaviSalor, а именно как на них отображается информация о морских судах полученная по каналам Автоматической Идентификационной Системы АИС.
Для достижения данной цели мне пришлось написать библиотеку для работы с сообщениями !AVDM 5-го и 1-го типов, так как на просторах интернета после долгих поисков ничего подобного не нашлось. Нашлись только библиотеки для декодирования, но они не подошли для моих целей.
Кратко теория:
В реальности данная система используется для взаимного обмена навигационной информацией между морскими объектами. Всё что получено с её помощью отображается графически на электронных картографических системах, либо на индикаторах радаров ARPA.
Во внутри корабельных сетях пересылка осуществляется по протоколу NMEA 0183 посредством сообщений с заголовком AIVDM / AIVDO. AIVDO - данные своего судна, AIVDM - данные других судов.
AIVDM / AIVDO - это двухслойный протокол. Внешний слой является вариантом NMEA 0183, внутренний представляет собой строку бит (битовый вектор) закодированную символами в соответствии с 6-битовой ASCII (6 бит 1 символ). Именно эта строка передается в эфир и с помощью неё осуществляется обмен данными между судами и береговыми объектами.
Вот типичный пакет данных AIVDM:
! AIVDM,1,1,,B,177KQJ5000G?TO`K>RA1wUbN0TKH,0*5C
!AIVDM,2,1,3,B,55P5TL01VIaAL@7WKO@mBplU@<PDhh000000001S;?AJ::4A804i@E53,0*3E
!AIVDM,2,2,3,B,1@0000000000000,2*55
Представленная библиотека состоит из библиотеки функций «aislib» и классов «ais1», «ais5». «aislib» содержит функции общие для «ais1» и «ais5». В свою очередь классы «ais1» и «ais5» выполнены как тип данных «рабочий блок(полезная нагрузка)» и содержат методы для заполнения рабочего блока навигационными данными и прочей информацией в соответствии с рекомендациями МСЭ-R M.1371-5. Результатом работы «ais1» является AIVDM первого типа, «ais5» соответственно AIVDM пятого типа. Реализована поддержка много фрагментных сообщений. Код открытый, лежат в репозиториях на Githab и Gitlab

Скрин тестовой программы TargetPley выложена в репозитории на Gitlab ссылка на репозиторий в конце статьи.

Планирую в последствии реализовать другие типы сообщений.
Если вас заинтересовала статья и вы хотите погрузиться в эту тему глубже, посмотрите ссылки ниже:
Файлы.