Тестирование передачи данных по 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, их обработка и вывод на графики.
Генерируемые сигналы - синусоидальные с периодом $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 и номерам порта.
Как можно наблюдать из графиков Engee и вывода в окне анализа трафика, передача данных по UDP осуществляется корректно.
Заключение¶
Мы рассмотрели простой пример работы Engee с внешней средой - эхо-сервером, запущенном в утилите socat на персональном компьютере. Модель Engee передаёт и принимает данные по UDP протоколу при помощи соответствующих блоков.