Решаем задачу интеграции Engee и Euler
Изучаем, как организовать расчетную задачу, которая считается одновременно в двух системах: платформе динамического моделирования Engee и программного комплекса Euler.
EULER (ЭЙЛЕР) – программный комплекс, предназначенный для анализа работы механических систем, включающих сложную кинематику, большие движения, жесткие и деформируемые элементы конструкции, гидравлические, пневматические и электрические системы, системы управления и другие компоненты. [1]
Engee.Интеграция – подсистема платформы Engee; снимает проблему доступа к низкоуровневым интерфейсам операционной системы, позволяя подключить Engee к внешним устройствам, интерфейсам, протоколам и программным средам. [2]
Подготовка Engee
Для создания расчетного окружения вокруг модели в программном комплексе Euler нам достаточно собрать любую модель и поместить в неё блок Euler Cosimulation.
Откроем модель, которая прилагается к этому примеру:
cd(@__DIR__)
engee.open( "example_Euler.engee" )

На входе в компонент сигналы собраны с шину – структурированную сигнальную линию, в которой индивидуальные сигналы имеют собственные названия. Посмотрим, где эта информация, совместно с другими настройками, должна быть указана в настройках блока Euler Cosimulation:
.png)
После того как блок настроен и прописан путь к примеру, который мы будем запускать в окружении Euler, нужно открыть программу Engee.Интеграция (Host-Device-Manager), которую можно получить при помощи следующей команды:
engee.package.install("Engee-Device-Manager")
Эта программа осуществляет прием и передачу информации между Engee (облачной платформой) и локальными ресурсами, где работает программный комплекс Euler. Подробнее об инсталляции и запуске этой программы прочтите в [2].
Осуществите сопряжение, набрав в программе Host-Device-Manager тот адрес, выданный предыдущей командой, и нажав на кнопку "Подключиться". Чтобы передать настройки блока в Euler нажмите на кнопку "Сгенерировать конфигурационный файл".
Файл появится в указанной папке с примером. Его содержимое соответствует настройкам блока:
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 через канал связи.
.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), и настроить отображение графиков.
Порядок запуска совместного расчета следующий:
- Проверить, что программа Host Controller по-прежнему осуществляет сопряжение. Если связь разорвана или видны сообщения об ошибке, нажмите "Переподключиться".
- Запустить расчет в Engee и дождаться сообщения в окне
Host Controllerс предложением запустить расчет на стороне Euler. - Запустить расчет на стороне Euler.
.png)
При использовании более старых версий пакета Euler, для повторного запуска расчета нужно было удалить созданный ранее "датчик" (в конфигурационном файле проекта) и пересоздать его заново. Если такая проблема проявилась в вашем рабочем процессе, следует обновить версию Euler.
Заключение
Интеграция Engee и пакета программ Euler позволяет упростить моделирование активных частей механизма, либо перенести часть расчетов на упрощённую 1D модель, либо просто окружить модель механизма веб-интерфейсом и обеспечить еще один мощный механизм пред- и постобработки результатов эксперимента.