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

Решаем задачу интеграции Engee и Euler

Изучаем, как организовать расчетную задачу, которая считается одновременно в двух системах: платформе динамического моделирования Engee и программного комплекса Euler.

EULER (ЭЙЛЕР) – программный комплекс, предназначенный для анализа работы механических систем, включающих сложную кинематику, большие движения, жесткие и деформируемые элементы конструкции, гидравлические, пневматические и электрические системы, системы управления и другие компоненты. [1]

Engee.Интеграция – подсистема платформы Engee; снимает проблему доступа к низкоуровневым интерфейсам операционной системы, позволяя подключить Engee к внешним устройствам, интерфейсам, протоколам и программным средам. [2]

Подготовка Engee

Для создания расчетного окружения вокруг модели в программном комплексе Euler нам достаточно собрать любую модель и поместить в неё блок Euler Cosimulation.

Откроем модель, которая прилагается к этому примеру:

In [ ]:
cd(@__DIR__)
engee.open( "example_Euler.engee" )
image.png

На входе в компонент сигналы собраны с шину – структурированную сигнальную линию, в которой индивидуальные сигналы имеют собственные названия. Посмотрим, где эта информация, совместно с другими настройками, должна быть указана в настройках блока Euler Cosimulation:

vlcsnap-2026-01-29-01h00m11s675 (Copy).png

После того как блок настроен и прописан путь к примеру, который мы будем запускать в окружении Euler, нужно открыть программу Engee.Интеграция (Host-Device-Manager), которую можно получить при помощи следующей команды:

In [ ]:
engee.package.install("Engee-Device-Manager")

Эта программа осуществляет прием и передачу информации между Engee (облачной платформой) и локальными ресурсами, где работает программный комплекс Euler. Подробнее об инсталляции и запуске этой программы прочтите в [2].

Осуществите сопряжение, набрав в программе Host-Device-Manager тот адрес, выданный предыдущей командой, и нажав на кнопку "Подключиться". Чтобы передать настройки блока в Euler нажмите на кнопку "Сгенерировать конфигурационный файл".

vlcsnap-2026-01-29-01h49m04s102.png

Файл появится в указанной папке с примером. Его содержимое соответствует настройкам блока:

MODEL_NAME OscillatorExample \
INPUT_SIGNAL_COUNT 3 \
OUTPUT_SIGNAL_COUNT 3 \
MODEL_PARAM_COUNT 3 \
INPUT_SIGNAL_NAMES dX dY dZ \
OUTPUT_SIGNAL_NAMES Fx Fy Fz \
MODEL_PARAM_NAMES Cx Cy Cz \
INIT_MODEL_PARAM 2000 2000 2000 \
DIAGNOSTIC 1

Последний диагностический параметр отвечает за сохранение передаваемых и полученных данных в лог-файл в отладочных целях. Этот файл вы тоже найдёте в каталоге с проектом Euler на целевой платформе после расчета.

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

Подготовка задачи в ЛОГОС

Проект, с которым мы будем работать, называется Pendulum и лежит в каталоге Euler/Samples/Projects/Beginner.

В данном проекте есть несколько объектов "датчик", которые мы будем использовать в качестве портов для входных данных модели.

Примере Pendulum, строго говоря, не позволит нам обновлять какие-либо значимые параметры системы, поскольку настройки массы, гравитации и длины маятника не "выведены наружу" при помощи датчиком или других элементов, а угол маятника перезаписывается решателем Euler. Но мы увидим, как передача данных отражается на графиках входных значений в процессе косимуляции.

Создадим новый "Датчик" для косимуляции с Engee (в предыдущих версиях Euler это возможно сделать через датчик для косимуляции с MATLAB/Simulink). Первым параметром задаём название этого датчика, вторым указываем DLL файл, который можно получить у техподдержки Engee. В этом DLL файле собраны функции для сопряжения Euler с программой Host Controller.

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

image.png

Выбираем любые доступные параметры и нажимаем "Принять". Теперь код проекта Euler выглядит следующим образом:

point point1=( 0 [ m ], 0 [ m ], 0 [ m ] );

point point2=( 1 [ m ], -0.8 [ m ], 0 [ m ] );
solid solid1=cylinder( point1, point2, 0.1 [ m ], mass = 1 [ kg ] );
solid solid2=sphere( point2, 0.3 [ m ], mass = 0 [kg] );
body Стойка=body( color = index( 4 ) );
body Маятник=body( color = index( 45 ) );
body Маятник < ( solid1, solid2 );
MIP MIP1=massPoint( point2, 2 [kg] );
body Маятник < ( MIP1 );
joint joint1=rotational( Стойка, Маятник, point1, projectZ );
gravity gravity1=parallel( reverse( projectY ) );

sensor_array engee_connector=simulink( "C:/Users/nkapyrin/Downloads/Engee_Euler.dll", "joint1.gamma [rad],maxRelAVDelta_IIM [ ],maxRelAV_IIM [],",
	"sensor1 [ ],sensor2 [ ],sensor3 [ ],", "", 0.01 [s], integrMethod = constRK4: );

set ground = Стойка;

/\///////////////////////////////////////////////////////////////////////////////////
/\   Единицы измерения;
set units = SI;

Мы создали объект engee_connector, теперь сопряжение двух расчетных платформ настроено.

Запуск совместного расчета

Перед расчетами в обеих средах нужно указать одинаковое время симуляции, соотнести шаг интеграции (шаг в Euler должен быть меньше или равен шагу интеграции в Engee), и настроить отображение графиков.

Порядок запуска совместного расчета следующий:

  1. Проверить, что программа Host Controller по-прежнему осуществляет сопряжение. Если связь разорвана или видны сообщения об ошибке, нажмите "Переподключиться".
  2. Запустить расчет в Engee и дождаться сообщения в окне Host Controller с предложением запустить расчет на стороне Euler.
  3. Запустить расчет на стороне Euler.
image.png

При использовании более старых версий пакета Euler, для повторного запуска расчета нужно было удалить созданный ранее "датчик" (в конфигурационном файле проекта) и пересоздать его заново. Если такая проблема проявилась в вашем рабочем процессе, следует обновить версию Euler.

Заключение

Интеграция Engee и пакета программ Euler позволяет упростить моделирование активных частей механизма, либо перенести часть расчетов на упрощённую 1D модель, либо просто окружить модель механизма веб-интерфейсом и обеспечить еще один мощный механизм пред- и постобработки результатов эксперимента.

Ссылки