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

Программное управление таргетами

На этой странице представлены функции программного управления таргетами в Engee.

Чтобы работать с функциями программного управления таргетами в Engee, установите пакет поддержки оборудования, как указано в статье. После выполните:

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}

Функция, предназначенная для генерации кода модели, сборки, загрузки на таргет и запуска модели на таргете.

Аргументы

  • target::Target: экземпляр таргета.

  • model: модель Engee.

  • is_external_mode::Bool=false: режим запуска.

  • simulation_uuid::String: UUID симуляции.

  • status_callback::Function: функция, вызываемая при получении сообщения со статусом симуляции.

  • termination_callback::Function: callback завершения.

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

Функция, предназначенная для сборки модели.

Аргументы

  • target::Target: экземпляр таргета.

  • model: модель Engee.

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

Функция, предназначенная для генерации исходного кода модели для последующей сборки.

Аргументы

  • target::Target: экземпляр таргета.

  • model: модель Engee (например, через engee.gcm()).

  • is_ext_mode::Bool: режим запуска (external mode - интерактивный режим, или независимый).

  • verbose::Bool=false: печать дополнительной информации при генерации.

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}

Функция, предназначенная для запуска модели на таргете.

Аргументы

  • target::Target: экземпляр таргета.

  • model: модель Engee.

  • is_ext_mode::Bool: режим запуска (external mode - интерактивный режим, или независимый).

  • simulation_uuid::String: UUID симуляции.

  • status_callback::Function: callback, вызываемый на каждом статус-сообщении.

  • termination_callback::Function: callback, вызываемый при завершении цикла чтения.

stop_model(target::Target)::TargetResponse

Функция, предназначенная для остановки работы модели на таргете.

Аргументы

  • target::Target: экземпляр таргета.

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

Функция, предназначенная для загрузки скомпилированной модели на таргет.

Аргументы

  • target::Target: экземпляр таргета.

  • model: модель Engee.

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

Функция ожидания завершения модели в интерактивном режиме.

Аргументы

  • channel::Channel{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

Функция, предназначенная для изменения параметра блока модели, запущенной в интерактивном режиме. Должна вызываться в процессе работы модели.

Аргументы

  • target::Target: экземпляр таргета.

  • block_path: путь к блоку Engee.

  • value_name::String: имя параметра блока для изменения.

  • data::Union{Int64, Float64, Bool, Vector{Int64}, Vector{Float64}, Vector{Bool}}: данные, которые будут записаны в параметр.

Примеры

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

Меняет параметр Value текущего блока на значение 4.

Перед вызовом необходимо навести курсор на блок, значение параметра которого необходимо изменить, либо вместо engee.gcb() указать путь к конкретному блоку.

is_ext_mode

Флаг is_ext_mode задает режим выполнения:

  • false — независимый режим; start_model(…​) только запускает модель и возвращает nothing;

  • true — интерактивный режим; start_model(…​)/build_deploy_start(…​) возвращают Channel{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)
  • success == true — модель завершилась (канал закрылся);

  • success == false — вышли по таймауту.

Обратные вызовы в start_model / build_deploy_start

Можно передать:

  • status_callback(status::TargetSimulationStatus) — вызывается при каждом статус-сообщении;

  • termination_callback() — вызывается один раз при завершении цикла чтения статусов/данных.

status в обратном вызове имеет тип TargetSimulationStatus и поля:

  • status::String — состояние модели (обычно running, финальные — done или error; завершение определяется переходом из running в другое состояние);

  • model_time::Float64 — модельное время на таргете;

  • progress::Float64 — прогресс (обычно в диапазоне 01);

  • detail::String — дополнительная текстовая информация.

Пример:

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, stop_model, build_deploy_start) могут выбрасывать исключения при ошибках генерации, сборки, загрузки, запуска, связи с таргетом и т.д. Исключения нужно обрабатывать на стороне вызывающего кода (например, через try/catch).

TargetResponse — структура, содержащая информационное сообщение о статусе выполнения функции.

Пример запуска модели на 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)

Либо можно воспользоваться одной функцией, вместо четырех представленных, для генерации кода, сборки, загрузки скомпилированного кода на таргет и запуска модели на нем:

Targets.build_deploy_start(target, model, is_external_mode=is_external_mode)