Решаем задачу интеграции Engee и Euler
Изучаем, как организовать расчетную задачу, которая считается одновременно в двух системах: платформе динамического моделирования Engee и программного комплекса EULER.
EULER (ЭЙЛЕР) – программный комплекс, предназначенный для анализа работы механических систем, включающих сложную кинематику, большие движения, жесткие и деформируемые элементы конструкции, гидравлические, пневматические и электрические системы, системы управления и другие компоненты. [1]
Engee.Интеграции – подсистема платформы Engee; снимает проблему доступа к низкоуровневым интерфейсам операционной системы, позволяя подключить Engee к внешним устройствам, интерфейсам, протоколам и программным средам. [2]
Коротко о запуске примера
В двух словах, как подготовить окружение для запуска косимуляции Engee-EULER:
- Установить окружение Engee.Интеграции и скачать клиентскую программу
- Скопировать папку
eulerв любое место на целевой платформе - Открыть пример
example_EULER.engeeи запустить его - Дождаться инструкций от клиенсткой программы и запустить расчет в EULER.
Под целевой платформой мы понимаем тот компьютер, на котором установлен программный комплекс EULER. А теперь рассмотрим эти шаги немного подробнее.
Подготовка Engee
Для создания в Engee расчетного окружения для модели EULER нам достаточно поместить в модель блок EULER Cosimulation и правильно настроить его интерфейсы. Откроем пример:
cd(@__DIR__)
engee.open( "example_Euler.engee" )
.png)
На входе в компонент сигналы собраны с шину. Названия сигнальных линий будут использованы внутри блока EULER Cosimulation, который следует настроить следующим образом:
- перечислить входные сигналы, это определит их порядок в отправляемом пакете (в примере три сигнала, P1, P2 и P3),
- перечислить выходные сигналы (фактически здесь мы даём им названия),
- установить размер буфера приёма (умножить 8 на количество сигналов),
- указать шаг расчета (он должен быть меньше или равен шагу дискретизации модели),
- указать путь к примеру – здесь должно быть название папки на целевой платформе, где будет лежать
elrфайл с проектом EULER.
После того, как блок настроен, нужно открыть клиентскую программу Engee.Интеграции, которую можно получить при помощи следующей команды:
engee.package.install("Engee-Device-Manager")
Эта программа осуществляет прием и передачу информации между Engee (облачной платформой) и локальными ресурсами, где работает программный комплекс EULER. Подробнее об инсталляции и запуске этой программы прочтите в [2].
Осуществите сопряжение, указав в клиенской программе Engee.Интеграции адрес, выданный предыдущей командой, и нажав на кнопку "Подключиться".
Чтобы передать настройки блока в EULER нажмите на кнопку "Сгенерировать конфигурационный файл". Он появится в указанной папке с примером. Его содержимое соответствует настройкам блока:
MODEL_NAME example_Euler
INPUT_SIGNAL_COUNT 2
OUTPUT_SIGNAL_COUNT 3
MODEL_PARAM_COUNT 0
INPUT_SIGNAL_NAMES delta1 delta2
OUTPUT_SIGNAL_NAMES P1 P2 P3
MODEL_PARAM_NAMES
INIT_MODEL_PARAM
CONTINUOUS_STATE_NUM_COUNT 0
DISCRETE_STATE_NUM_COUNT 0
DIAGNOSTIC 1
После того, как сопряжение установлено и программный комплекс EULER получил инструкции о структуре передаваемых данных, мы можем приступить к настройке проекта внутри EULER.
Подготовка задачи в EULER
Пример, который мы рассмотрим, был создан на основе стандартного примера Samples/Projects/Beginner/Pendulum.elr. В исходном примере Маятник подвешен к неподвижной Стойке посредством пары вращения. Мы добавили новый объект - точку подвеса, к которой подвешен шарнир маятника, а сама она соединена с неподвижной стойкой посредством линейной направляющей (объект поступательная пара). Из Engee мы будем управлять силой Fx, действующей на точку подвеса.
Создадим новый "Датчик" для косимуляции с Engee и настроим его следующим образом:
- Имя объекта – название создаваемого датчика (в данном случае
ec, отengee cosimulation), - Модель Engee – адрес DLL файла, через функции которого происходит сопряжение (см. в каталоге с этим приером)
- Входные переменные – это переменные, которые EULER будет отправлять в Engee на каждом шаге обмена,
- Выходные переменные – это переменные, которые будут приниматься из Engee и под которые в модели EULER автоматически создаются объекты-датчики,
- Шаг дискретизации должен быть меньше или равен шагу дискретизации модели в Engee.

Код проекта EULER теперь выглядит следующим образом
point point1=point( 0 [m], 0 [ m ], 0 [ m ] );
point point2=point( 0 [ m ], -1 [ m ], 0 [ m ] );
solid solid0=sphere( point1, 0.1 [m], mass = 1 [ kg ] );
solid solid1=cylinder( point1, point2, 0.1 [ m ], mass = 1 [ kg ] );
solid solid2=sphere( point2, 0.3 [ m ], mass = 1 [ kg ] );
vector vector1=vectorPP( point1, point2 );
vector vector2=rotate( vector1, projectZ, PI/2*1[rad] );
body Стойка=body( color = index( 4 ) );
body ТочкаПодвеса=body( color = index( 4 ) );
body ТочкаПодвеса < ( solid0 );
body Маятник=body( color = index( 45 ) );
body Маятник < ( solid1, solid2 );
joint joint1=rotational( ТочкаПодвеса, Маятник, point1, projectZ );
joint joint2=translational( Стойка, ТочкаПодвеса, point1, projectX );
gravity gravity1=parallel( reverse( projectY ) );
sensor_array ec=engee( "Engee_Euler.dll", "joint1.gamma [rad],joint2.s [m],", "Fx [N],P2 [ ],P3 [ ],", "", 0.01 [s],
integrMethod = constRK4: );
force force1=force( Маятник, point1, projectX, ec.Fx, list( ) );
/\///////////////////////////////////////////////////////////////////////////////////
set ground = Стойка;
/\///////////////////////////////////////////////////////////////////////////////////
/\ Единицы измерения;
set units = SI;
Сопряжение двух расчетных платформ настроено, можно переходить к запуску.
Запуск совместного расчета
Порядок запуска совместного расчета следующий:
- Запустить расчет в Engee,
- Дождаться сообщения в окне клиентской программы с предложением запустить расчет на стороне EULER,
- Запустить расчет на стороне EULER.
.png)
Заключение
Интеграция между Engee и пакетом программ EULER позволяет упростить моделирование активных частей механизма, либо перенести часть расчетов на упрощённую 1D модель, либо просто окружить модель механизма веб-интерфейсом и обеспечить еще один мощный механизм пред- и постобработки результатов эксперимента.