AnyMath 文档

欧拉的软件管理

本页显示了欧拉的所有可用软件控制功能 AnyMath .

使用欧拉软件控制功能 AnyMath ,按照指定的方式安装硬件支持包 文章. 安装后,运行:

using Main.EngeeDeviceManager.EULER_API

接下来,您需要创建一个会话对象:

session = EULER_API.createSession()

所有方法都采用第一个参数 会议 -会话对象。

状态代码不会发送出去:如果发生错误,该方法将抛出异常及其描述。

主要。工程师。EULER_API.关闭项目-Method

EULER_API.closeProject(session) -> Nothing

关闭当前打开的项目。 释放项目资源,但会话保持活动状态。

发生错误时会引发异常。

例子

关闭项目:

EULER_API.closeProject(session)

println("Проект закрыт")

主要。工程师。EULER_API。关闭,关闭-Method

EULER_API.closeSession(session) -> Nothing

以欧拉结束会话。 释放所有资源,关闭求解器。 调用此函数后,对象 会议 无效。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

例子

会话终止:

EULER_API.closeSession(session)

println("Сеанс завершен")

主要。工程师。EULER_API.创造,创造-Method

EULER_API.createSession(euler_path::String="") -> session

使用欧拉求解器创建会话。 初始化求解器核心。

申报表 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession} --传递给所有其他方法的会话对象。

论点

  • euler_path::字符串:EULER可执行文件的路径。 默认情况下 euler_path="" --自动检测。

例子

创建会话:

session = EULER_API.createSession()

主要。工程师。EULER_API。getcurrent时间-Method

EULER_API.getCurrentTime(session) -> Float64

返回当前模型时间(以秒为单位)。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

例子

当前模型时间:

t=EULER_API。getCurrentTime(会话)

println("模型时间:$t s")

主要。工程师。EULER_API.最后一个项目-Method

EULER_API.getLastProject(session)->字符串

返回到.最新欧拉项目的elr文件。 它对于在重新启动后恢复状态非常有用。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

主要。工程师。EULER_API.[医]支数-Method

EULER_API.getRigidBodyCount(session) -> Int

返回当前项目中的实体数。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

主要。工程师。EULER_API.[医][医][医][医][医]-Method

EULER_API.getRigidBodyPos(session, index=0) -> Vector{Float64}

返回12个元素的数组:质心(X,Y,Z)的坐标和3×3方向矩阵(9个元素,以列展开)。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 索引:Int64:固体的指数;指数的计数从 0. 默认情况下 0.

主要。工程师。EULER_API.n.getSensorUnits,getSensorUnits-Method

EULER_API.getSensorUnits(session,name)->字符串

返回一个字符串,其中包含SI系统中传感器的测量单位,例如, "N", "m", "m/s".

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 名称::字符串:传感器的名称。

例子

传感器读数(仅在研究模式下可用):

EULER_API.setCalcRegime(会话)

sensor_val=EULER_API。getSensorValue(会话,"X")

sensor_units=EULER_API。getSensorUnits(会话,"X")

println("传感器X=$sensor_val$sensor_units")

主要。工程师。EULER_API.getSensorValue,getSensorValue-Method

EULER_API.getSensorValue(session, name) -> Float64

以SI为单位按名称返回传感器的当前值。 值对应于最后计算的点。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 名称::字符串:传感器的名称(例如, "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")

主要。工程师。EULER_API.[医]商业-Method

EULER_API.getUserCommands(session) -> String

返回包含可用用户命令名称的字符串。 命令之间用符号分隔 ";". 打开项目后可在任何模式下使用。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

例子

获取可用命令列表:

commands = EULER_API.getUserCommands(session)

println("Доступные команды: $commands")

主要。工程师。EULER_API.getVersion的-Method

EULER_API.getVersion(session) -> String

以字符串形式返回欧拉求解器的版本(例如, "13.05.43").

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

例子

解算器版本:

ver = EULER_API.getVersion(session)

println("Версия ЭЙЛЕР: $ver")
EULER_API.journalLoadPoint(session, index) -> Nothing

将日志点按索引加载到当前上下文中。 下载后 获取值或值 它将返回该点的传感器值,而不是上次计算的值。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 索引:Int64:点索引(索引计数从 0).

主要。工程师。EULER_API.期刊价值-Method

EULER_API.journalSensorValues(session, name) -> Vector{Float64}

按时间顺序返回计算日志中所有点的传感器值数组。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 名称::字符串:传感器的名称。

EULER_API.journalSize(session) -> Int

返回计算日志中保存的点数。 意义 0 对应于一个空的杂志。

论点

  • 会话::元组{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))")

主要。工程师。EULER_API.新闻时间-Method

EULER_API.journalTime(session, index) -> Float64

按索引返回日志点的模型时间(以秒为单位)。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 索引:Int64:点索引(索引计数从 0).

主要。工程师。EULER_API.开放项目-Method

EULER_API.openProject(session, path) -> String

打开欧拉项目(该。elr文件)。 打开后,命令,传感器和参数可用。 以字符串形式返回上载项目的路径;如果发生错误,将引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 路径::字符串:完整的路径。elr文件。

例子

项目开幕:

project = raw"C:\Users\Public\Engee\sample_project.elr"

EULER_API.openProject(session, project)

println("Проект открыт: $project")

主要。工程师。EULER_API.[医][医][医][医]-Method

EULER_API.runAnyCommand(session, command, step=1) -> Nothing

运行自定义命令*,没有时间限制*。 该计算在命令自然完成之前执行。 仅在研究模式下可用。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 命令::String:球队的名字。

  • 步骤::Int64:输出步骤。 默认情况下 1.

主要。工程师。EULER_API.n.跑动,跑动-Method

EULER_API.runCommand(session, command, calc_time=10.0, step=1.0) -> Nothing

运行具有时间限制的自定义命令。 计算将在到达时停止 钙时间 模型时间的秒数或命令结束时,以先到者为准。 仅在研究模式下可用(n.集,集).

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 命令::字符串:球队名称(从列表中 [医]商业).

  • calc_时间::Float64:模型时间的最大计算持续时间(以秒为单位)。 默认情况下 10.0.

  • 步骤::Float64:此命令的输出步骤。 默认情况下 1.0 (积分器的每个步骤)。

主要。工程师。EULER_API.保存项目-Method

EULER_API.saveProject(session) -> Nothing

保存当前项目。 更改将写入原始更改。的elr文件。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

主要。工程师。EULER_API.储蓄者-Method

EULER_API.saveResults(session, path) -> Nothing

将计算结果保存到.epp(欧拉项目包)文件。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 路径::字符串:路径保存。epp文件。

EULER_API.setCalcRegime(session) -> Nothing

使项目进入研究(计算)模式。 命令可以在此模式下运行(n.跑动,跑动, [医][医][医][医])和传感器读数。 更改标量不可用。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

主要。工程师。EULER_API.[医]集-Method

EULER_API.setEditRegime(session) -> Nothing

将项目切换到编辑模式。 在这种模式下,您可以通过以下方式更改参数(标量 [医]集. 计算启动不可用。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

主要。工程师。EULER_API.n.输出,输出-Method

EULER_API.setOutputParam(session, step_out=1, time_out=0.0, before_event=false, after_event=false) -> Nothing

调整用于在计算日志中显示结果的参数。

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • step_out::Int64:输出步骤。 每个第n个计算点进入日志。 默认情况下 1.

  • time_out::Float64:输出频率根据模型时间以秒为单位。 默认情况下 0.0 (禁用,仅使用 step_out).

  • before_event::Bool:是否在事件发生前保存一个点。 默认情况下 错误 --不要保存。

  • after_event::Bool:事件后是否保存点。 默认情况下 错误 --不要保存。

主要。工程师。EULER_API.[医]集-Method

EULER_API.setScalar(session, name, value) -> Nothing

按名称设置标量参数的值。 仅在编辑模式下可用([医]集).

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

  • 名称::字符串:标量的名称(例如, "外汇", "弥撒").

  • 价值:Float64:一个新的标量值。

例子

更改标量参数(仅在编辑模式下可用):

EULER_API.setEditRegime(会话)

EULER_API.setScalar(会议,"质量",2.0)

println("标量质量=2.0")

主要。工程师。EULER_API.startCalc-Method

EULER_API.startCalc(session) -> Nothing

将模型时间重置为 0.0 (起始位置)并初始化计算。 它在第一个命令之前被调用一次。 n.跑动,跑动[医][医][医][医].

发生错误时会引发异常。

论点

  • 会话::元组{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("Расчет запущен (без ограничения времени)")

主要。工程师。EULER_API.权宜之计-Method

EULER_API.stopCalc(session) -> Nothing

停止当前计算。 它可以在启动后随时调用。 n.跑动,跑动[医][医][医][医]. 停止的时刻可以通过 getcurrent时间.

发生错误时会引发异常。

论点

  • 会话::元组{Main.EngeeDeviceManager.EULER_API.EulerSession}:会话对象。

例子

停止计算:

EULER_API.stopCalc(session)
stop_time=EULER_API。getCurrentTime(会话)

println("计算停止。 停止时间:$stop_time with")

操作模式

打开后,项目处于编辑模式—您可以打开/关闭项目,通过以下方式更改参数(标量 [医]集. 在此模式下无法启动计算。 要运行模型,请切换到研究模式(n.集,集),之后就可以运行命令(n.跑动,跑动, [医][医][医][医])和在计算过程中读取传感器(getSensorValue,getSensorValue, 期刊价值),但更改标量将被阻止。 模式之间的切换是通过 [医]集n.集,集.

示例:模拟投掷一个重量为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文件 AnyMath 至 用户的计算机通过模块 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 functions 1

完成工作:

EULER_API.closeSession(session)
println("Сеанс завершен")
会议结束了