Документация Engee
Notebook

Тестирование передачи данных по UDP при помощи эхо-сервера в socat

В этом примере рассматривается использование блоков UDP в модели Engee, которые позволяют подключить внешнее оборудование/программное обеспечение для обмена данными с моделью. Приём-передача данных в модели осуществляется через эхо сервер в утилите socat, запущенной на персональном компьютере.

Введение

UDP (англ. User Datagram Protocol — протокол пользовательских датаграмм) — это один из основных протоколов для передачи данных. Компьютерные приложения при помощи UDP-датаграмм пересылают сообщения по IP другим хостам в сети.

Engee, обладая возможностями работы с внешним оборудованием, позволяет использовать передачу по UDP для взаимодействия моделей с программным обеспечением.

Подготовка к работе

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

Кроме того, аналогичные шаги для подготовки можно найти в примере работы с COM-портом. После успешного подключения к Engee можно перейти к работе с внешней средой.

Запуск эхо-сервера в socat

Socat (SOcket CAT) — это утилита командной строки, предназначенная для двусторонней передачи данных между двумя точками. Так, например, можно запустить эмуляцию COM-портов или создать TCP-прокси. Установка утилиты доступна практически во всех дистрибутивах Linux.

Для запуска эхо-сервера UDP на Linux в командной строке достаточно выполнить команду:

socat UDP-RECV:5150 UDP-SEND:127.0.0.1:5151

В Windows запуск утилиты возможен с использованием оболочки командной строки Cygwin. Необходимые инструкции по установке Cygwin и запуску socat в Windows можно найти по ссылке. После установки socat достаточно воспользоваться командой выше.

Модель примера

Модель, используемая в данном примере - udp_socat_echo_server.engee. Условно модель можно разделить на две части:

  • Генерация сигналов, их обработка и передача по UDP,

  • Приём сигналов по UDP, их обработка и вывод на графики.

image_2.png

Генерируемые сигналы - синусоидальные с периодом $2\pi$ типов данных Float64 и Float32, а также постоянные - типов Int32 и UInt32.

Блок Engee Function встраивает в модель код Julia, преобразующий 4 сигнала различных форматов на входе в одну переменную для передачи пакета данных в формате UInt8.

Полученная переменная поступает на второй вход блока UDP передатчика, а на первый вход блока передаётся величина пакета данных. Также в блоке необходимо определить IPv4 адрес в формате для отправки сообщений на локальную машину - 127.0.0.1, удалённый порт - 5150, а также максимальный размер передаваемого сообщения, в нашем случае - 20 байт.

Захват сигналов из UDP происходит при помощи блока UDP приёмника. На первом своём выходе он формирует размер получаемого пакета, а на втором - сами данные типа UInt8. IPv4, указанный в блоке - 0.0.0.0, порт - 5151, максимальный размер сообщения - 20 байт.

Блок Engee Function на выходе UDP приёмника преобразует полученные сообщения в исходные типы данных - Float64, Float32, Int32 и UInt32. Получаемые сигналы записываются для отображения в графиках.

Результаты моделирования

После выполнения всех шагов по подготовке к моделированию, запустим выполнение модели. Передачу и получение данных по UDP можно проверить по графикам Engee. В дополнение, можно запустить программу для анализа трафика (сниффер) - например, WireShark. В окне захвата трафика можно наблюдать приём-передачу пакетов по заданным IP и номерам порта.

bezymiannyi.png

Как можно наблюдать из графиков Engee и вывода в окне анализа трафика, передача данных по UDP осуществляется корректно.

Заключение

Мы рассмотрели простой пример работы Engee с внешней средой - эхо-сервером, запущенном в утилите socat на персональном компьютере. Модель Engee передаёт и принимает данные по UDP протоколу при помощи соответствующих блоков.