Программное управление EULER
На этой странице представлены все доступные функции программного управления EULER в Engee.
|
Чтобы работать с функциями программного управления EULER в Engee, установите пакет поддержки оборудования, как указано в статье. После установки выполните:
Далее необходимо создать объект сеанса:
Все методы принимают первым аргументом Коды статуса наружу не отдаются: при ошибке метод выбрасывает исключение с его описанием. |
#
Main.EngeeDeviceManager.EULER_API.closeProject — Method
EULER_API.closeProject(session) -> Nothing
Закрывает текущий открытый проект. Освобождает ресурсы проекта, но сеанс остается активным.
При ошибке выбрасывается исключение.
Примеры
Закрытие проекта:
EULER_API.closeProject(session)
println("Проект закрыт")
#
Main.EngeeDeviceManager.EULER_API.closeSession — Method
EULER_API.closeSession(session) -> Nothing
Завершает сеанс работы с ЭЙЛЕР. Освобождает все ресурсы, закрывает решатель. После вызова этой функции объект session недействителен.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Завершение сеанса:
EULER_API.closeSession(session)
println("Сеанс завершен")
#
Main.EngeeDeviceManager.EULER_API.createSession — Method
EULER_API.createSession(euler_path::String="") -> session
Создает сеанс работы с решателем ЭЙЛЕР. Инициализирует ядро решателя.
Возвращает session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession} — объект сеанса, передаваемый во все остальные методы.
Аргументы
-
euler_path::String: путь к исполняемому файлу ЭЙЛЕР. По умолчаниюeuler_path=""— автоопределение.
Примеры
Создание сеанса:
session = EULER_API.createSession()
#
Main.EngeeDeviceManager.EULER_API.getCurrentTime — Method
EULER_API.getCurrentTime(session) -> Float64
Возвращает текущее модельное время в секундах.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Текущее модельное время:
t = EULER_API.getCurrentTime(session)
println("Модельное время: $t с")
#
Main.EngeeDeviceManager.EULER_API.getLastProject — Method
EULER_API.getLastProject(session) -> String
Возвращает полный путь к .elr файлу последнего проекта ЭЙЛЕР. Полезно для восстановления состояния после перезапуска.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
#
Main.EngeeDeviceManager.EULER_API.getRigidBodyCount — Method
EULER_API.getRigidBodyCount(session) -> Int
Возвращает количество твердых тел в текущем проекте.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
#
Main.EngeeDeviceManager.EULER_API.getRigidBodyPos — Method
EULER_API.getRigidBodyPos(session, index=0) -> Vector{Float64}
Возвращает массив из 12 элементов: координаты центра масс (X, Y, Z) и матрица ориентации 3×3 (9 элементов, развернута по столбцам).
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
index::Int64: индекс твердого тела; отсчет индексов начинается с0. По умолчанию0.
#
Main.EngeeDeviceManager.EULER_API.getSensorUnits — Method
EULER_API.getSensorUnits(session, name) -> String
Возвращает строку с единицами измерения датчика в системе СИ по его имени, например, "Н", "м", "м/с".
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
name::String: имя датчика.
Примеры
Чтение датчиков (доступно только в режиме исследования):
EULER_API.setCalcRegime(session)
sensor_val = EULER_API.getSensorValue(session, "X")
sensor_units = EULER_API.getSensorUnits(session, "X")
println("Датчик X = $sensor_val $sensor_units")
#
Main.EngeeDeviceManager.EULER_API.getSensorValue — Method
EULER_API.getSensorValue(session, name) -> Float64
Возвращает текущее значение датчика по имени в единицах СИ. Значение соответствует последней рассчитанной точке.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
name::String: имя датчика (например,"fx_sensor","X","Y").
Примеры
Чтение датчиков (доступно только в режиме исследования):
EULER_API.setCalcRegime(session)
sensor_val = EULER_API.getSensorValue(session, "X")
sensor_units = EULER_API.getSensorUnits(session, "X")
println("Датчик X = $sensor_val $sensor_units")
#
Main.EngeeDeviceManager.EULER_API.getUserCommands — Method
EULER_API.getUserCommands(session) -> String
Возвращает строку с именами доступных пользовательских команд. Команды разделены символом ";". Доступно в любом режиме после открытия проекта.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Получение списка доступных команд:
commands = EULER_API.getUserCommands(session)
println("Доступные команды: $commands")
#
Main.EngeeDeviceManager.EULER_API.getVersion — Method
EULER_API.getVersion(session) -> String
Возвращает версию решателя ЭЙЛЕР в виде строки (например, "13.05.43").
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Версия решателя:
ver = EULER_API.getVersion(session)
println("Версия ЭЙЛЕР: $ver")
#
Main.EngeeDeviceManager.EULER_API.journalLoadPoint — Method
EULER_API.journalLoadPoint(session, index) -> Nothing
Загружает точку журнала по индексу в текущий контекст. После загрузки getSensorValue будет возвращать значения датчиков для этой точки, а не для последней рассчитанной.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
index::Int64: индекс точки (отсчет индексов начинается с0).
#
Main.EngeeDeviceManager.EULER_API.journalSensorValues — Method
EULER_API.journalSensorValues(session, name) -> Vector{Float64}
Возвращает массив значений датчика во всех точках журнала расчета в хронологическом порядке.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
name::String: имя датчика.
#
Main.EngeeDeviceManager.EULER_API.journalSize — Method
EULER_API.journalSize(session) -> Int
Возвращает количество точек, сохраненных в журнале расчета. Значение 0 соответствует пустому журналу.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Работа с журналом расчета:
n_points = EULER_API.journalSize(session)
println("Точек в журнале: $n_points")
if n_points > 0
t_last = EULER_API.journalTime(session, n_points - 1)
println("Время последней точки: $t_last с")
end
x_vals = EULER_API.journalSensorValues(session, "X")
println("Значений датчика X: $(length(x_vals))")
#
Main.EngeeDeviceManager.EULER_API.journalTime — Method
EULER_API.journalTime(session, index) -> Float64
Возвращает модельное время в секундах для точки журнала по индексу.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
index::Int64: индекс точки (отсчет индексов начинается с0).
#
Main.EngeeDeviceManager.EULER_API.openProject — Method
EULER_API.openProject(session, path) -> String
Открывает проект ЭЙЛЕР (файл .elr). После открытия доступны команды, датчики, параметры. Возвращает путь к загруженному проекту в виде строки; при ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
path::String: полный путь к файлу .elr.
Примеры
Открытие проекта:
project = raw"C:\Users\Public\Engee\sample_project.elr"
EULER_API.openProject(session, project)
println("Проект открыт: $project")
#
Main.EngeeDeviceManager.EULER_API.runAnyCommand — Method
EULER_API.runAnyCommand(session, command, step=1) -> Nothing
Запускает пользовательскую команду без ограничения по времени. Расчет выполняется до естественного завершения команды. Доступно только в режиме исследования.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
command::String: имя команды. -
step::Int64: шаг вывода. По умолчанию1.
#
Main.EngeeDeviceManager.EULER_API.runCommand — Method
EULER_API.runCommand(session, command, calc_time=10.0, step=1.0) -> Nothing
Запускает пользовательскую команду с ограничением по времени. Расчет остановится при достижении calc_time секунд модельного времени или при завершении команды — в зависимости от того, что наступит раньше. Доступно только в режиме исследования (setCalcRegime).
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
command::String: имя команды (из спискаgetUserCommands). -
calc_time::Float64: максимальная длительность расчета в секундах модельного времени. По умолчанию10.0. -
step::Float64: шаг вывода для этой команды. По умолчанию1.0(каждый шаг интегратора).
#
Main.EngeeDeviceManager.EULER_API.saveProject — Method
EULER_API.saveProject(session) -> Nothing
Сохраняет текущий проект. Изменения записываются в исходный .elr файл.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
#
Main.EngeeDeviceManager.EULER_API.saveResults — Method
EULER_API.saveResults(session, path) -> Nothing
Сохраняет результаты расчета в файл .epp (Euler Project Package).
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
path::String: путь для сохранения файла .epp.
#
Main.EngeeDeviceManager.EULER_API.setCalcRegime — Method
EULER_API.setCalcRegime(session) -> Nothing
Переводит проект в режим исследования (расчета). В этом режиме доступен запуск команд (runCommand, runAnyCommand) и чтение датчиков. Изменение скаляров недоступно.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
#
Main.EngeeDeviceManager.EULER_API.setEditRegime — Method
EULER_API.setEditRegime(session) -> Nothing
Переводит проект в режим редактирования. В этом режиме доступно изменение параметров (скаляров) через setScalar. Запуск расчета недоступен.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
#
Main.EngeeDeviceManager.EULER_API.setOutputParam — Method
EULER_API.setOutputParam(session, step_out=1, time_out=0.0, before_event=false, after_event=false) -> Nothing
Настраивает параметры вывода результатов в журнал расчета.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
step_out::Int64: шаг вывода. Каждая N-я расчетная точка попадает в журнал. По умолчанию1. -
time_out::Float64: периодичность вывода по модельному времени в секундах. По умолчанию0.0(отключено, используется толькоstep_out). -
before_event::Bool: сохранять ли точку перед событием. По умолчаниюfalse— не сохранять. -
after_event::Bool: сохранять ли точку после события. По умолчаниюfalse— не сохранять.
#
Main.EngeeDeviceManager.EULER_API.setScalar — Method
EULER_API.setScalar(session, name, value) -> Nothing
Задает значение скалярного параметра по имени. Доступно только в режиме редактирования (setEditRegime).
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса. -
name::String: имя скаляра (например,"FX","mass"). -
value::Float64: новое значение скаляра.
Примеры
Изменение скалярного параметра (доступно только в режиме редактирования):
EULER_API.setEditRegime(session)
EULER_API.setScalar(session, "mass", 2.0)
println("Скаляр mass = 2.0")
#
Main.EngeeDeviceManager.EULER_API.startCalc — Method
EULER_API.startCalc(session) -> Nothing
Сбрасывает модельное время в 0.0 (стартовая позиция) и инициализирует расчет. Вызывается однократно перед первой командой runCommand или runAnyCommand.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Запуск команды с ограничением по времени (доступно только в режиме исследования):
EULER_API.setCalcRegime(session)
EULER_API.startCalc(session)
EULER_API.setOutputParam(session, 10, 0.0)
EULER_API.runCommand(session, "RK4_coarse", 15.0)
println("Расчет запущен (с ограничением 15 с)")
Запуск команды без ограничения по времени (команда выполняется до своего естественного завершения.):
EULER_API.startCalc(session)
EULER_API.runAnyCommand(session, "RK4_coarse")
println("Расчет запущен (без ограничения времени)")
#
Main.EngeeDeviceManager.EULER_API.stopCalc — Method
EULER_API.stopCalc(session) -> Nothing
Останавливает текущий расчет. Может вызываться в любой момент после запуска runCommand или runAnyCommand. Момент остановки можно получить через getCurrentTime.
При ошибке выбрасывается исключение.
Аргументы
-
session::Tuple{Main.EngeeDeviceManager.EULER_API.EulerSession}: объект сеанса.
Примеры
Остановка расчета:
EULER_API.stopCalc(session)
stop_time = EULER_API.getCurrentTime(session)
println("Расчет остановлен. Время остановки: $stop_time с")
Режимы работы
После открытия проект находится в режиме редактирования — можно открывать/закрывать проект, изменять параметры (скаляры) через setScalar. Запуск расчета в этом режиме недоступен. Чтобы запустить модель, переключитесь в режим исследования (setCalcRegime), после чего становится доступен запуск команд (runCommand, runAnyCommand) и чтение датчиков в процессе расчета (getSensorValue, journalSensorValues), но изменение скаляров будет заблокировано. Переключение между режимами выполняется через setEditRegime и setCalcRegime.
Пример: моделирование броска шара массой 1 кг и диаметром 20 см с визуализацией траектории
После установки пакета поддержки оборудования выполните:
using Main.EngeeDeviceManager
using Main.EngeeDeviceManager.EULER_API
using Main.EngeeDeviceManager.UTILS_API
Создание сеанса:
session = EULER_API.createSession()
ver = EULER_API.getVersion(session)
println("Версия ЭЙЛЕР: $ver")
Версия ЭЙЛЕР: Solver 13.05.43.beta Pro (Windows x64)
Загрузка тестового проекта:
engee.package.getdemos("Engee-Device-Manager")
"/user/Engee-Device-Manager-demos"
Сначала скопируем тестовый .elr файл из демо-папки Engee на компьютер
пользователя через модуль Utils:
# Создаем объект Utils для файловых операций
utils = UTILS_API.Utils()
# Определяем пути к демонстрационному проект ЭЙЛЕР в Engee и директории, куда будет скопирован проект
euler_local_project_path = "/user/Engee-Device-Manager-demos/example_euler/sample_project.elr"
host_project_dir = raw"C:\Users\Public\Engee"
# Создаем тестовую директорию и загружаем проект на хост
UTILS_API.createFolder(utils, host_project_dir, "")
UTILS_API.uploadFile(utils, euler_local_project_path, host_project_dir)
println("Проект загружен в $host_project_dir")
Проект загружен в C:\Users\Public\Engee
Открытие проекта и запуск расчета:
# Открываем проект
project_path = joinpath(host_project_dir, "sample_project.elr")
EULER_API.openProject(session, project_path)
println("Проект открыт: $project_path")
# Получаем список доступных команд
cmds = EULER_API.getUserCommands(session)
println("Доступные команды: $cmds")
# Переключаем в режим исследования проекта
EULER_API.setCalcRegime(session)
println("Режим исследования проекта")
# Настраиваем вывод каждого 10-го шага
EULER_API.setOutputParam(session, 10, 0.0)
# Запускаем расчет на 15 секунд
EULER_API.runCommand(session, "RK4_coarse", 15.0)
println("Расчет запущен")
Проект открыт: C:\Users\Public\Engee/sample_project.elr
Доступные команды: RK4_fine;RK4_coarse;
Режим исследования проекта
Расчет запущен
Получение результатов:
# Получаем все точки из журнала расчета
x_vals = EULER_API.journalSensorValues(session, "X")
y_vals = EULER_API.journalSensorValues(session, "Y")
n_points = length(x_vals)
println("Получено $n_points точек")
# Выводим первые и последние точки
println("Первая точка: X=$(round(x_vals[1], digits=2)) м, Y=$(round(y_vals[1], digits=2)) м")
if n_points > 1
println("Последняя точка: X=$(round(x_vals[end], digits=2)) м, Y=$(round(y_vals[end], digits=2)) м")
end
Получено 1447 точек
Первая точка: X=0.0 м, Y=0.0 м
Последняя точка: X=1019.72 м, Y=-0.0 м
Визуализация траектории:
using Plots
# Получаем время каждой точки (значения датчик "t")
t_vals = EULER_API.journalSensorValues(session, "t")
# График высоты от времени
plot(t_vals, y_vals,
xlabel = "Время, с",
ylabel = "Высота Y, м",
title = "Траектория броска шара
D = 20 см
m = 1 кг",
legend = false,
linewidth = 2,
color = :blue,
size = (600, 400)
)
hline!([0.0], color = :orange, linewidth = 1, linestyle = :dash, label = "Земля")

Завершение работы:
EULER_API.closeSession(session)
println("Сеанс завершен")
Сеанс завершен