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

Пример использования программного управления для работы с КПМ «РИТМ»

РИТМ — это аппаратное решение для запуска моделей в реальном времени. Оно позволяет интегрировать сценарии работы с физическим оборудованием и управлять им непосредственно из Engee.

Чтобы приступить к работе с целевой платформой «РИТМ»:

  1. Установите подсистему Engee.Интеграции, как показано в статье.

  2. После этого становится доступен модуль работы с внешним оборудованием, обеспечивающий программное управление КПМ «РИТМ». Для подключения модуля введите следующую команду:

    using Main.EngeeDeviceManager.Targets: RITM_API
  3. Добавьте машину РИТМ в Engee через приложение РИТМ.Управление машинами ritm icon или через RITM_API.addMachine.

  4. Установите поддержку блоков РИТМ:

    engee.package.install("RITM-Engee-Blocks")

Основные методы работы с РИТМ

Для работы с оборудованием на РИТМе доступны следующие методы:

  • RITM_API.buildModel — собирает модель на РИТМе.

  • RITM_API.runModel — запускает модель на РИТМе.

  • RITM_API.stopModel — останавливает модель на РИТМе.

  • RITM_API.isConnected — проверяет доступность РИТМа.

  • RITM_API.isRunning — проверяет, запущена ли модель РИТМа.

  • RITM_API.listFiles — возвращает список файлов в указанной директории.

  • RITM_API.readFile — возвращает содержимое указанного файла из заданной директории.

  • RITM_API.downloadFile — получает указанный файл из заданной директории.

  • RITM_API.memInfo — возвращает информацию о потребляемой моделью памяти.

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

  • RITM_API.getScreenshot — создает скриншот на РИТМе и возвращает путь к файлу изображения.

  • RITM_API.getProfileData — возвращает результат профилирования модели на РИТМе.

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

Пошаговый пример работы с моделью РИТМ

  1. Подключение модулей и добавление машины — импортируем модуль и добавим машину РИТМ:

    using Main.EngeeDeviceManager.Targets: RITM_API
    
    if !RITM_API.isMachineExists("RITM 1")
        RITM_API.addMachine("RITM 1", "192.168.56.3")
    end
  2. Проверка доступности РИТМ — проверим, установлена ли связь с устройством РИТМ:

    RITM_API.isConnected("RITM 1")

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

  3. Версия прошивки и пакета поддержки — узнаем версии прошивки и пакета поддержки РИТМ:

    RITM_API.version("RITM 1")
  4. Сборка открытой в Engee модели на РИТМе в независимом режиме:

    engee.open("/user/Engee-Device-Manager-demos/example_RITM/example_ritm_extmodel.engee")
    model = engee.gcm()
    RITM_API.buildModel("RITM 1", model)
  5. Запуск модели — запустим модель на машине РИТМ:

    RITM_API.runModel("RITM 1", model; is_interactive_mode=false)

    После запуска модель начнет выполняться в заданном ранее режиме (в нашем случае — в независимом).

  6. Остановка модели — остановим выполнение всех запущенных моделей на РИТМе:

    RITM_API.stopModel("RITM 1")
  7. Вывод содержимого директории на РИТМ — получим список файлов в указанной директории (/home/ritm/):

    RITM_API.listFiles("RITM 1", "/home/ritm/build/example_ritm_extmodel")
  8. Чтение содержимого файла — выведем содержимое файла example_ritm_extmodel_profile.txt из директории /home/ritm/build/example_ritm_extmodel/:

    RITM_API.readFile("RITM 1", "example_ritm_extmodel_profile.txt"; path="/home/ritm/build/example_ritm_extmodel/")
  9. Получение файла в текущую директорию — скачаем указанный файл (example_ritm_extmodel_profile.txt) из директории /home/ritm/build/example_ritm_extmodel/ в текущую директорию Engee:

    RITM_API.downloadFile("RITM 1", "example_ritm_extmodel_profile.txt"; from="/home/ritm/build/example_ritm_extmodel/", to="")
  10. Получение информации о памяти — запросим данные о потреблении памяти моделью:

    engee.open("/user/Engee-Device-Manager-demos/example_RITM/example_ritm_extmodel.engee")
    
    model = engee.gcm()
    
    RITM_API.buildModel("RITM 1", model)
    RITM_API.runModel("RITM 1", model)
    
    memInfoBytes = RITM_API.memInfo("RITM 1", "example_ritm_extmodel")
    memInfoMb = memInfoBytes / 1024
    println("Used memory: $(memInfoMb) MB")
  11. Просмотр последних 10 строк логов — получим последние 10 строк журнала выполнения модели:

    ritm_log = RITM_API.getLog("RITM 1", 10);
    print(ritm_log)

    Их можно использовать для отладки и диагностики модели.

  12. Создание скриншота и получение пути к нему — сделаем снимок экрана машины РИТМ:

    screenshot_path = RITM_API.getScreenshot("RITM 2", "example.png")

    Файл выгружается в Engee, а функция возвращает локальный путь к нему.

    using FileIO
    using Images
    
    load("example.png")
  13. Проверка состояния модели — убедимся, что модель запущена на РИТМе:

    RITM_API.isRunning("RITM 1", "example_ritm_extmodel")

    Если функция вернет true, то модель выполняется.

  14. Получение данных профилирования — получим данные профилирования модели с РИТМа в виде файла или строки:

    RITM_API.getProfileData("RITM 1", "example_ritm_extmodel")
  15. Загрузка файла — загрузим файл example_ritm_data.jld2 из директории Engee /user/Engee-Device-Manager-demos/example_RITM/ в директорию РИТМ /home/ritm/data:

    RITM_API.uploadFile("RITM 1", "example_ritm_data.jld2"; from="/user/Engee-Device-Manager-demos/example_RITM/", to="/home/ritm/data")
  16. Удаление файла — удалим загруженный файл example_ritm_data.jld2 на РИТМе:

    RITM_API.removeFile("RITM 1", "/home/ritm/data/example_ritm_data.jld2")
  17. Получение диагностики — получим диагностику машины РИТМ:

    RITM_API.getDiagnostic("RITM 1")

    Файл ritm_diagnostic.zip будет записан в текущую директорию.

  18. Перезагрузка — перезагрузим машину РИТМ:

    RITM_API.reboot("RITM 1")
  19. Выключение — выключим машину РИТМ:

    RITM_API.poweroff("RITM 1")
  20. Настройка Ethernet-интерфейса — настроим Ethernet-интерфейс машины РИТМ:

    RITM_API.setupEthernet("RITM 1", ethernetNumber, "192.168.0.10", 24)
  21. Работа с автозапуском

    Поместим модель в автозапуск:

    RITM_API.setAutostart("RITM 1", model.name)

    Получим список моделей в автозапуске (пустой, если автозапуск не настроен):

    RITM_API.getAutostart("RITM 1")

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

    RITM_API.disableAutostart("RITM 1")

Пример управления машинами в Engee

  1. Список машин — выведем список известных машин в Engee:

    RITM_API.getMachines()
  2. Имя и IP-адрес машины — получим IP-адрес машины по ее имени или имя машины по ее IP-адресу:

    RITM_API.getIPByName("RITM 1")
    RITM_API.getNameByIP("192.168.56.3")
  3. Добавление машины — добавим машину в список известных в Engee, если она еще не добавлена:

    if !RITM_API.isMachineExists("RITM 2")
        RITM_API.addMachine("RITM 2", "192.168.56.4")
    end
  4. Удаление машины — удалим машину по точному имени, если она есть в списке известных в Engee:

    if RITM_API.isMachineExists("RITM 2")
        RITM_API.removeMachine("RITM 2")
    end