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

Программное управление РИТМ

Чтобы работать с функциями программного управления КПМ «РИТМ» в Engee, установите подсистему Engee.Интеграции:

engee.package.install("Engee-Device-Manager")

На этой странице представлены все доступные функции программного управления КПМ «РИТМ» в Engee.

Методы RITM

Ritm(spec::AbstractString)::RITM.Ritm

Создает объект для управления машиной RITM.

Аргументы

  • spec::AbstractString: спецификация машины РИТМ. Спецификация машины может быть задана одним из двух способов:

    • полный URL, например, "http://192.168.56.3:8000/";

    • имя машины или IP-адрес, сохраненные в памяти машины (например, "RITM 1" или "192.168.56.3"). Полный URL-адрес определяется на основе сохраненной карточки машины.

К несохраненной машине невозможно обратиться: сначала ее необходимо добавить с помощью метода addMachine или через приложение «РИТМ.Управление машинами», иначе возникнет ошибка ArgumentError.

Каждый вызов создает новый дескриптор и заменяет кэшированный дескриптор машины. При передаче строковых аргументов методам RITM_API для каждой машины используется общий дескриптор, тогда как явно переданный дескриптор используется без изменений. Если клиент был перезапущен, то при следующем вызове со строковым аргументом дескриптор будет создан заново автоматически.

Примеры

ritm = RITM_API.Ritm("http://192.168.56.3:8000/")
ritm = RITM_API.Ritm("192.168.56.3")
ritm = RITM_API.Ritm("RITM 1")
_resolve_ritm_address(spec::AbstractString)::String

Преобразует спецификацию машины в полный URL. Если передан полный URL, он возвращается без изменений; в противном случае выполняется поиск машины в хранилище по имени или сохраненному IP-адресу. Если машина не зарегистрирована в хранилище, выбрасывается стандартное исключение ArgumentError с сообщением о том, что машина не найдена.

Аргументы

spec::AbstractString: спецификация машины РИТМ.

_ritm_cache_key(address::AbstractString)::String

Канонический ключ реестра для адреса машины РИТМ.

Аргументы

  • address::AbstractString: имя хоста (в нижнем регистре) и порт; если порт не указан, используется значение по умолчанию RITM_MACHINE_DEFAULT_PORT. Допускается ввод полного URL, пары host:port или только имени хоста; также поддерживаются компоненты userinfo, IPv6-адреса в квадратных скобках и строки запроса (query strings). Адреса без указания схемы интерпретируются как http://, чтобы пары host:port не принимались ошибочно за схему.

addMachine(name, ip; port="8000", is_default=false)::Nothing

Добавляет карточку машины РИТМ в хранилище машин.

В случае успешного добавления в журнал записывается сообщение с подтверждением.

Вызывает исключение RitmMachinesStorageConflict, если хранилище было изменено параллельно: в этом случае следует повторно считать список машин и повторить вызов.

Аргументы

  • name::AbstractString: имя машины.

  • ip::AbstractString: IP-адрес машины.

  • port::AbstractString: порт машины. Этот аргумент передается как именованный (port="..."). Значение по умолчанию — "8000".

  • is_default::Bool: пометка машины как используемой по умолчанию. Этот аргумент передается как именованный (is_default=true). Значение по умолчанию — false. Если is_default=true, новая машина становится единственной машиной по умолчанию.

Примеры

RITM_API.addMachine("RITM 2", "192.168.56.4")
RITM_API.addMachine("RITM 3", "192.168.56.5"; is_default=true)
buildModel(ritm, model, is_interactive_mode::Bool=false)::Nothing

Собирает и подготавливает модель для запуска на РИТМе.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model::Any: структура модели.

  • is_interactive_mode::Bool: флаг, указывающий режим выполнения модели: true — модель выполняется в интерактивном режиме; false (по умолчанию) — модель выполняется в независимом режиме.

Примеры

# Собираем и запускаем на РИТМе открытую на холсте standalone-модель:

model = engee.gcm()
RITM_API.buildModel(ritm, model, false)
RITM_API.runModel(ritm, model, false)
changeParam(ritm, block_key, param, data)::String

Изменяет параметр модели, выполняемой на машине РИТМ в интерактивном режиме. Выполнение модели не прерывается; новое значение приводится к типу параметра, объявленному в модели на стороне хоста.

Модель должна быть собрана и запущена в интерактивном режиме, т.е. с параметром is_interactive_mode=true (для buildModel и runModel).

Возвращает сообщение о результате операции.

Аргументы

  • ritm: адрес (URL), IP-адрес или имя машины РИТМ.

  • block_key::Union{String, UUID}: путь к блоку в модели (например, "model_name/Block Name") или UUID блока.

  • param::String: имя параметра.

  • data: новое значение параметра: число, логическое значение или вектор чисел либо логических значений.

Примеры

RITM_API.changeParam(ritm, "my_model/Gain", "Gain", 2.5)
disableAutostart(ritm)::Dict{String, Union{String, Int64, Bool, Nothing}}

Удаляет модель из автозапуска.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.disableAutostart(ritm)
downloadFile(ritm, filename; from="/home/ritm/", to=pwd())::Nothing

Загружает файл с машины РИТМ в локальную директорию Engee.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • filename::AbstractString: имя файла для загрузки.

  • from::AbstractString: исходный каталог на машине РИТМ. Этот аргумент передается как именованный (from="..."). Значение по умолчанию — "/home/ritm/".

  • to::AbstractString: локальный каталог назначения. Этот аргумент передается как именованный (to="..."). Значение по умолчанию — текущий каталог.

Примеры

RITM_API.downloadFile(ritm, "profile.txt"; from="/home/ritm/build/my_model/", to="/tmp/")
getAutostart(ritm)::Union{Dict{String, Union{String, Int64, Bool, Nothing}}, Nothing}

Получает модель, находящуюся в автозапуске.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.getAutostart(ritm)
getData(ritm::Any, model_name::String, file_path::String, in_file::Bool = false)

Возвращает результат профилирования модели на РИТМе. В зависимости от значения in_file, результат может быть возвращен как строка либо сохранен в файл по указанному пути.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model_name::String: имя модели, для которой запрашиваются данные профилирования.

  • file_path::String: путь, по которому сохранить результат (если in_file = true). Если in_file = false, значение игнорируется.

  • in_file::Bool = false: указывает, как вернуть результат. Если true, данные сохраняются в файл по file_path. Если false, возвращается строка с результатом.

Примеры

# Получить данные профилирования как строку
result = RITM_API.getData(ritm, "newmodel_1", "", false)

# Сохранить данные в файл на РИТМе
RITM_API.getData(ritm, "newmodel_1", "/user/profile.txt", true)
getDiagnostic(ritm)::Nothing

Загружает диагностический архив ritm_diagnostic.zip в текущую директорию Engee.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.getDiagnostic(ritm)
getFile(ritm::Any, file_name::String; from::String, to::String)

Получает указанный файл file_name из директории from.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • file_name::String: имя интересующего файла.

  • from::String: путь до интересующей директории (по умолчанию /home/ritm/).

  • to::String: путь до директории в Engee для сохранения файла (по умолчанию в текущей).

Примеры

# Получаем файл install_manifest.txt из директории /home/ritm/build/newmodel_1/build в текущую директорию Engee:

RITM_API.getFile(ritm, "install_manifest.txt"; from="/home/ritm/build/newmodel_1/build/", to="")
getIPByName(name::AbstractString)::Union{String, Nothing}

Возвращает IP-адрес машины РИТМ, сохраненный в хранилище машин.

Аргументы

  • name::AbstractString: имя машины, сохраненное в хранилище машин.

Примеры

RITM_API.getIPByName("RITM 1")
getLog(ritm, number_of_lines::Int64)::String

Возвращает указанное число строк логов выполнения модели на РИТМе.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • number_of_lines::Int64: число выводимых строк из логов.

Примеры

RITM_API.getLog(ritm, 10)
getMachines()::Vector{Dict{String, Any}}

Возвращает вектор описаний машин РИТМ, сохраненных в хранилище машин.

Каждое описание представляет собой словарь с ключами "name", "ip", "port" и "default".

Примеры

RITM_API.getMachines()
getNameByIP(ip::AbstractString)::Vector{String}

Возвращает имена всех машин РИТМ с заданным IP-адресом.

Результатом всегда является вектор: одно имя для одной соответствующей машины, несколько имен при дублировании IP-адреса (в порядке хранения) или пустой вектор, если машина с таким IP-адресом отсутствует.

Аргументы

  • ip::AbstractString: IP-адрес машины.

Примеры

RITM_API.getNameByIP("192.168.56.3")
getProfileData(ritm, model_name; engee_location="/user/", in_file=false)::Union{String, Nothing}

Получает данные профилирования модели, собранные на машине РИТМ.

Если in_file=false, возвращает данные в виде строки. Если in_file=true, записывает данные в файл <model_name>.txt в указанной локальной директории и возвращает nothing.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model_name::AbstractString: имя модели.

  • engee_location::AbstractString: локальный каталог для записи файла, если in_file=true. Этот аргумент передается как именованный параметр (engee_location="..."). Значение по умолчанию — /user/.

  • in_file::Bool: режим получения данных. При значении false возвращается строка, при значении true данные записываются в файл, а возвращаемое значение отсутствует. Этот аргумент передается как именованный параметр (in_file=true).

Примеры

data = RITM_API.getProfileData(ritm, "my_model")
RITM_API.getProfileData(ritm, "my_model"; engee_location="/user/", in_file=true)
getPtpSettings(ritm)::Vector{String}

Получает сохраненные настройки PTP. Возвращает настройки PTP — вектор строк с выбранным интерфейсом, механизмом задержки, сетевым транспортом, ролью и атрибутами PTP-часов.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.getPtpSettings(ritm)
getPtpState(ritm)::Vector{String}

Получает состояние PTP. Возвращает текущее состояние PTP: запущен или остановлен, а также интерфейс и роль, если PTP запущен.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.getPtpState(ritm)
getScreenshot(ritm, filename::String="screenshot.png"; to=pwd())::String

Создает скриншот на целевой платформе РИТМ и загружает его в файловую систему Engee.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • filename::String = "screenshot.png": имя файла, в который будет сохранен скриншот (на стороне РИТМа).

  • to=pwd(): локальная целевая директория на стороне Engee. Этот аргумент передается как именованный параметр (to="..."). Значение по умолчанию — текущая директория.

Примеры

# Создает скриншот и получает путь к нему
path = RITM_API.getScreenshot(ritm, "example.png")
isConnected(ritm::Any)::Bool

Проверяет доступность машины РИТМ. Возвращает true, если машина РИТМ доступна, и false в противном случае.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.isConnected(ritm)
isMachineExists(name::AbstractString)::Bool

Проверяет, сохранена ли машина РИТМ с заданным именем в хранилище машин.

Возвращает true если машина существует, и false в противном случае.

Аргументы

  • name::AbstractString: имя машины.

Примеры

RITM_API.isMachineExists("RITM 1")
isRunning(ritm::Any, model_name::String)::Bool

Проверяет, выполняется ли указанная модель на целевой платформе РИТМ. Возвращает true, если модель с заданным именем в данный момент в процессе выполнения на машине РИТМ, и false, если не выполняется.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model_name::String: имя модели, состояние которой необходимо проверить.

Примеры

# Проверяет, запущена ли модель "newmodel_1"
is_active = RITM_API.isRunning(ritm, "newmodel_1")
listFiles(ritm, path::String)::Vector{String}

Возвращает список файлов в указанной директории.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • path::String: путь до интересующей директории.

Примеры

RITM_API.listFiles(ritm, "/home/ritm/")
memInfo(ritm, model_name=nothing)::Union{Vector{Int64}, Int64}

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

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model_name::Union{String, Nothing}: имя модели. Если этот аргумент не указан или задан пустой строкой, возвращается информация о системной памяти. Если указано имя модели — объем памяти, потребляемой моделью

Примеры

RITM_API.memInfo(ritm, "newmodel_1")
poweroff(ritm)::Dict{String, Union{String, Int64, Bool, Nothing}}

Выключает машину.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.poweroff(ritm)
readFile(ritm, filename::String; path="/home/ritm/")::String

Возвращает содержимое указанного файла на машине РИТМ.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • file_name::String: имя интересующего файла.

  • path::String: путь до директории на машине РИТМ. Этот аргумент передается

как именованный (path="..."). Значение по умолчанию — "/home/ritm/".

Примеры

# Выводим содержимое файла install_manifest.txt из директории /home/ritm/build/newmodel_1/build:

RITM_API.readFile(ritm, "install_manifest.txt"; path="/home/ritm/build/newmodel_1/build/")
reboot(ritm)::Dict{String, Union{String, Int64, Bool, Nothing}}

Перезагружает машину.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.reboot(ritm)
removeFile(ritm::Any, path::String)::String

Удаляет файл по указанному пути на целевой платформе РИТМ. Возвращает сообщение со статусом удаления файла.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • path::String: путь к удаляемому с РИТМа файлу.

Примеры

# Удалить файл newmodel_1 на РИТМ:
RITM_API.removeFile(ritm, "/home/ritm/newmodel_1.engee")
removeMachine(name::AbstractString)::Nothing

Удаляет карточку машины РИТМ из хранилища машин.

Вызывает исключение RitmMachinesStorageConflict, если хранилище было изменено параллельно: повторно считайте список машин и повторите вызов.

В случае успешного удаления в журнал записывается сообщение с подтверждением.

Аргументы

  • name::AbstractString: имя машины.

Примеры

RITM_API.removeMachine("RITM 2")
resetPtpSettings(ritm)::Dict{String, Union{String, Int64, Bool, Nothing}}

Сбрасывает сохраненные настройки PTP на РИТМе. Возвращает словарь с результатом операции: статус и сообщение об ошибке (если есть).

После сброса перед запуском PTP заново настройте интерфейс через setupEthPtp.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

runModel(
    ritm,
    model,
    is_interactive_mode::Bool=false;
    simulation_uuid=string(uuid4()),
    status_callback=nothing,
    termination_callback=nothing,
)::Union{Channel{TargetSimulationStatus}, Nothing}

Запускает на РИТМе ранее собранную модель.

В независимом режиме возвращает nothing. В интерактивном режиме возвращает канал, по которому передаются обновления статуса выполнения модели.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model::Any: структура модели.

  • is_interactive_mode::Bool: флаг, указывающий режим выполнения модели: true — модель выполняется в интерактивном режиме; false (по умолчанию) — модель выполняется в независимом режиме.

  • simulation_uuid::String: идентификатор запуска для интерактивного режима.

  • status_callback: функция вызывается для каждого полученного статуса выполнения.

  • termination_callback: функция вызывается по завершении интерактивного выполнения.

Примеры

RITM_API.runModel(ritm, model)
setAutostart(ritm, model_name::String)::Dict{String, Union{String, Int64, Bool, Nothing}}

Помещает модель в автозапуск.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • model_name::String: имя модели.

Примеры

RITM_API.setAutostart(ritm, "my_model")

setupEthPtp(
    ritm,
    eth_number,
    role;
    delay_mech="E2E",
    network_tr="UDPv4",
    priority1=128,
    priority2=128,
    clock_class=248,
    clock_accuracy=254,
)::Dict{String, String}

Настраивает PTP на выбранном Ethernet-интерфейсе РИТМа. Возвращает словарь с результатом операции: статус и сообщение об ошибке (если есть).

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • eth_number: номер Ethernet-интерфейса РИТМа, например, 1 для Ethernet 1.

  • role: задает роль локальных часов PTP: "Master" или "Slave".

  • delay_mech: режим работы PTP. Возможные значения "E2E", "P2P" или "Auto". Значение по умолчанию "E2E".

  • network_tr: сетевой протокол. Возможные значения "UDPv4", "UDPv6" и "L2". Значение по умолчанию "UDPv4".

  • priority1: атрибут локальных часов "Priority 1". Возможный диапазон от 0 до 255. Значение по умолчанию 128.

  • priority2: атрибут локальных часов "Priority 2". Возможный диапазон от 0 до 255. Значение по умолчанию 128.

  • clock_class: атрибут локальных часов "Class". Возможный диапазон от 0 до 255. Значение по умолчанию 248.

  • clock_accuracy: атрибут локальных часов "Accuracy". Возможный диапазон от 0 до 255. Значение по умолчанию 254.

setupEthernet(ritm, interface_id::Int64, ip::String, mask::Int64)::Dict{String, Union{String, Int64, Bool, Nothing}}

Настраивает Ethernet-интерфейс машины.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • interface_id::Int64: идентификатор Ethernet-интерфейса.

  • ip::String: IP-адрес интерфейса.

  • mask::Int64: маска сети.

Примеры

RITM_API.setupEthernet(ritm, 0, "192.168.0.10", 24)
startPtp(ritm, eth_number)::Dict{String, Union{String, Int64, Bool, Nothing}}

Запускает PTP на выбранном Ethernet-интерфейсе РИТМа. Возвращает словарь с результатом операции: статус и сообщение об ошибке (если есть).

Перед запуском PTP необходимо настроить интерфейс через setupEthPtp.

Аргументы

  • eth_number: номер Ethernet-интерфейса. Возможные значения "HostTarget" или "1" — "max ethernet number".

Примеры

RITM_API.startPtp(ritm, 1)
stopModel(ritm)::Nothing

Останавливает модель на РИТМе.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.stopModel(ritm)
stopPtp(ritm, eth_number)::Dict{String, Union{String, Int64, Bool, Nothing}}

Останавливает PTP на выбранном Ethernet-интерфейсе РИТМа. Возвращает словарь с результатом операции: статус и сообщение об ошибке (если есть).

Аргументы

  • eth_number: номер Ethernet-интерфейса. Возможные значения "HostTarget" или "1" — "max ethernet number".

Примеры

RITM_API.stopPtp(ritm, 1)

updateFirmware(
    ritm,
    firmware_path::String="",
    checksum_path::String="";
    reboot::Bool=true,
    show_progress=false,
)::Nothing

Обновляет прошивку РИТМ.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • firmware_path::String: локальный путь к файлу прошивки.

  • checksum_path::String: локальный путь к файлу контрольной суммы.

  • reboot::Bool: перезагрузка машины РИТМ после успешного обновления. Значение по умолчанию — true.

  • show_progress::Bool: вывести в лог информацию о ходе обновления. Значение по умолчанию — false

Примеры

RITM_API.updateFirmware(ritm; show_progress=true)
RITM_API.updateFirmware(ritm, "/user/firmware.raucb", "/user/firmware.raucb.checksum")
updateSupportPackage(ritm, support_package_path::String=""; show_progress=false)::Nothing

Обновляет пакет поддержки РИТМ.

Если аргумент support_package_path не указан, устанавливается пакет, соответствующий текущей версии Engee. Если аргумент support_package_path задан, устанавливается пакет из указанного локального файла.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • support_package_path::String: локальный путь к пакету поддержки.

  • show_progress::Bool: выводить в лог информацию о ходе выполнения обновления.

Примеры

RITM_API.updateSupportPackage(ritm)
RITM_API.updateSupportPackage(ritm, "/user/ritm_support_package.tar.gz"; show_progress=true)
uploadFile(ritm::Any, filename::AbstractString; from::AbstractString=pwd(), to::AbstractString="/home/ritm")::String

Загружает файл из Engee на целевую платформу РИТМ.

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

  • filename::AbstractString: имя загружаемого на РИТМ файла.

  • from::AbstractString = pwd(): путь в Engee к директории, где расположен загружаемый файл (по умолчанию — текущая директория).

  • to::AbstractString = "/home/ritm": путь на РИТМе, куда будет загружен файл (по умолчанию — /home/ritm).

Примеры

using EngeeDeviceManager.Targets
using EngeeDeviceManager.Targets.RITM_API

# Создает объект машины РИТМ и задает адрес
ritm = Targets.RITM_API.Ritm("http://192.168.56.3:8000/")

# Загружает файл test.bin из текущей директории Engee (pwd()) в /home/ritm на РИТМе
res = RITM_API.uploadFile(ritm, "test.bin")

# Загружает файл из указанной директории Engee (/user/...) в указанную директорию на РИТМе
res = RITM_API.uploadFile(ritm, "install_manifest.txt"; from="/user/project/", to="/home/ritm/data/")
version(ritm)::Dict{String, String}

Версии прошивки и пакета поддержки РИТМ. Возвращает словарь с ключами:

  • "firmware" — версия прошивки.

  • "support_package" — версия пакета поддержки (sysimage).

Аргументы

  • ritm::Any: объект целевой платформы РИТМ.

Примеры

RITM_API.version(ritm)