Программное управление таргетами
На этой странице представлены функции программного управления таргетами в Engee.
|
Чтобы работать с функциями программного управления таргетами в Engee, установите пакет поддержки оборудования, как указано в статье. После выполните:
|
Описание функций
#
EngeeDeviceManager.Targets.build_deploy_start — Function
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 завершения.
#
EngeeDeviceManager.Targets.compile_model — Function
compile_model(target::Target, model)::TargetResponse
Функция, предназначенная для сборки модели.
Аргументы
-
target::Target: экземпляр таргета. -
model: модель Engee.
#
EngeeDeviceManager.Targets.generate_executable_code — Function
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: печать дополнительной информации при генерации.
#
EngeeDeviceManager.Targets.start_model — Function
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, вызываемый при завершении цикла чтения.
#
EngeeDeviceManager.Targets.stop_model — Function
stop_model(target::Target)::TargetResponse
Функция, предназначенная для остановки работы модели на таргете.
Аргументы
-
target::Target: экземпляр таргета.
#
EngeeDeviceManager.Targets.upload_model — Function
upload_model(target::Target, model)::TargetResponse
Функция, предназначенная для загрузки скомпилированной модели на таргет.
Аргументы
-
target::Target: экземпляр таргета. -
model: модель Engee.
#
EngeeDeviceManager.Targets.wait_model_to_complete — Function
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: таймаут ожидания в секундах.
#
EngeeDeviceManager.Targets.change_param — Function
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— прогресс (обычно в диапазоне0–1); -
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)