AnyMath 文档

方案化目标管理

本页介绍了程序化目标管理的功能 AnyMath .

与目标管理软件功能一起工作 AnyMath ,按照指定的方式安装硬件支持包 文章. 之后,执行:

using Main.EngeeDeviceManager.Targets

功能说明

build_deploy_start(
    target::Target,
    model;
    is_external_mode::Bool=false,
    simulation_uuid::String=string(uuid4()),
    status_callback::Function=((args...) -> nothing),
    termination_callback::Function=((args...) -> nothing),
)::Union{Channel{TargetSimulationStatus},Nothing}

一个功能,旨在生成模型代码,构建它,将其上传到目标,并在目标上运行模型。

论点

  • 目标::目标:目标实例。

  • 模型:型号 AnyMath .

  • is_external_mode::Bool=false:启动模式。

  • simulation_uuid::字符串:模拟的UUID。

  • status_callback::函数:接收到仿真状态消息时调用的函数。

  • termination_callback::函数:完成回调。

compile_model(target::Target, model)::TargetResponse

用于构建模型的函数。

论点

  • 目标::目标:目标实例。

  • 模型:*Engee*模型。

generate_executable_code(target::Target, model, is_ext_mode::Bool, verbose::Bool=false)::TargetResponse

用于生成模型的源代码以供后续组装的函数。

论点

  • 目标::目标:目标实例。

  • 模型:*Engee*模型(例如,通过 恩吉。gcm()).

  • is_ext_mode::Bool:启动模式(外部模式-交互模式,或独立模式)。

  • 详细::Bool=错误:在生成过程中打印附加信息。

start_model(
    target::Target,
    model,
    is_ext_mode::Bool;
    simulation_uuid::String=string(uuid4()),
    status_callback::Function=((args...) -> nothing),
    termination_callback::Function=((args...) -> nothing),
)::Union{Channel{TargetSimulationStatus},Nothing}

旨在启动目标模型的功能。

论点

  • 目标::目标:目标实例。

  • 模型:型号 AnyMath .

  • is_ext_mode::Bool:启动模式(外部模式-交互模式,或独立模式)。

  • simulation_uuid::字符串:模拟的UUID。

  • status_callback::函数:对每个状态消息调用的回调。

  • termination_callback::函数:读取周期结束时调用的回调。

stop_model(target::Target)::TargetResponse

旨在阻止模型在目标上工作的功能。

论点

  • 目标::目标:目标实例。

upload_model(target::Target, model)::TargetResponse

旨在将编译后的模型上传到目标的函数。

论点

  • 目标::目标:目标实例。

  • 模型:型号 AnyMath .

wait_model_to_complete(
    channel::Channel{TargetSimulationStatus},
    timeout_seconds::Real = 60,
)::Tuple{Bool,Float64}

交互模式下等待模型完成的功能。

论点

  • 频道::频道{TargetSimulationStatus}:状态通道返回 start_model的build_deploy_start 在交互模式下。

  • timeout_seconds::Real=60:超时以秒为单位。

change_param(target::Target, block_path::String, value_name::String, data::Union{Int64, Float64, Bool, Vector{Int64}, Vector{Float64}, Vector{Bool}})::TargetResponse

用于更改交互式运行的模型块的参数的函数。 它必须在模型运行期间调用。

论点

  • 目标::目标:目标实例。

  • block_path:通往街区的路径 AnyMath .

  • value_name::字符串:要更改的块参数的名称。

  • 数据::联合{Int64, Float64, Bool, Vector{Int64},向量{Float64},向量{Bool}}:要写入参数的数据。

例子

change_param(target, engee.gcb(), "Value", 4)

更改参数 价值 当前块设置为 4.

在调用之前,您必须将光标悬停在要更改其参数值的块上,或者代替 恩吉。gcb() 指定特定块的路径。

is_ext_mode

旗帜 is_ext_mode 设置执行模式:

  • 错误 -独立模式; start_model(。..) 它只运行模型并返回 什么都没有;

  • 真的 -互动模式; start_model(。..)/build_deploy_start(。..) 他们回来了 频道{TargetSimulationStatus} 用于监控状态。

完成模型执行

对于交互模式,请使用由 start_model的build_deploy_start:

channel = Targets.build_deploy_start(target, model, is_external_mode=true)
success, elapsed = Targets.wait_model_to_complete(channel, 120)
  • 成功==真 -模型已结束(通道已关闭);

  • 成功==错误 -我们超时出去了.

回调 start_model的 / build_deploy_start

您可以发送:

  • status_callback(状态::TargetSimulationStatus) -在每个状态消息中调用;

  • 终止_回退() -在状态/数据读取周期结束时调用一次。

状况 在回调中,它具有类型 目标;目标 和领域:

  • 状态::字符串 -模型的状态(通常 跑步,决赛 — 完成了错误;完成由从 跑步 到不同的状态);

  • model_时间::Float64 -模型时间在目标;

  • 进度::Float64 -进展(通常在 01);

  • 细节::字符串 -附加文本信息。

例子::

function status_cb(status)
    println("status=$(status.status), progress=$(status.progress)")
end

function done_cb()
    println("simulation finished")
end

channel = Targets.start_model(
    target, model, true;
    status_callback=status_cb,
    termination_callback=done_cb,
)

如果回调抛出异常,则模型的执行不会中断:回调错误记录为警告。

例外情况

所有目标管理功能(generate_executable_code, compile_model的, upload_model, start_model的, 停止模型, build_deploy_start)可能会在生成,构建,下载,启动,目标连接等情况下抛出异常。 错误。 异常必须在调用代码端处理(例如,通过 尝试/捕捉).

目标反应 —包含有关功能状态的信息消息的结构。

在独立模式下在STM32上运行模型的示例

using Main.EngeeDeviceManager.Targets
using Main.EngeeDeviceManager.Targets.STM32
model = engee.gcm()
target = STM32.Stm32()

is_external_mode = false

# 程序化目标管理的功能:

Targets.generate_executable_code(target, model, is_external_mode)
Targets.compile_model(target, model)
Targets.upload_model(target, model)
Targets.start_model(target, model, is_external_mode)
Targets.stop_model(target)

或者,您可以使用一个函数(而不是呈现的四个函数)来生成代码,构建,将编译的代码上传到目标并在其上运行模型。:

目标。build_deploy_start(目标,模型,is_external_mode=is_external_mode)