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

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

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

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

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

Коротко о запуске примера

В двух словах, как подготовить окружение для запуска косимуляции Engee-EULER:

  1. Установить окружение Engee.Интеграции и скачать клиентскую программу
  2. Скопировать папку euler в любое место на целевой платформе
  3. Открыть пример example_EULER.engee и запустить его
  4. Дождаться инструкций от клиенсткой программы и запустить расчет в EULER.

Под целевой платформой мы понимаем тот компьютер, на котором установлен программный комплекс EULER. А теперь рассмотрим эти шаги немного подробнее.

Подготовка Engee

Для создания в Engee расчетного окружения для модели EULER нам достаточно поместить в модель блок EULER Cosimulation и правильно настроить его интерфейсы. Откроем пример:

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

На входе в компонент сигналы собраны с шину. Названия сигнальных линий будут использованы внутри блока EULER Cosimulation, который следует настроить следующим образом:

image.png
  • перечислить входные сигналы, это определит их порядок в отправляемом пакете (в примере три сигнала, P1, P2 и P3),
  • перечислить выходные сигналы (фактически здесь мы даём им названия),
  • установить размер буфера приёма (умножить 8 на количество сигналов),
  • указать шаг расчета (он должен быть меньше или равен шагу дискретизации модели),
  • указать путь к примеру – здесь должно быть название папки на целевой платформе, где будет лежатьelr файл с проектом EULER.

После того, как блок настроен, нужно открыть клиентскую программу Engee.Интеграции, которую можно получить при помощи следующей команды:

In [ ]:
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.
image.png

Код проекта 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;

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

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

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

  1. Запустить расчет в Engee,
  2. Дождаться сообщения в окне клиентской программы с предложением запустить расчет на стороне EULER,
  3. Запустить расчет на стороне EULER.
image.png

Заключение

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

Ссылки