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

Обратные вызовы (Callbacks)

Открыть пример в Engee

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

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

Эта демонстрация будет представлять из себя набор тестов, которые условно можно разбить на 4 группы:

  1. функции по условию открытия модели,
  2. функции по условиям выполнения модели,
  3. функции по условию сохранения модели,
  4. функции по условию закрытия модели.

image_2.png

Для открытия окна обратных вызовов необходимо отрыть «Настройки модели» -> «Редактировать исходный код».

Для срабатывания тестов, описанных ниже, нужно запустить model_callback.engee.

Первый тест – это срабатывание обратных вызовов при открытии модели.

image_3.png

image.png

Как мы видим, в момент открытия инициализируются две переменные:

  1. до открытия модели,
  2. после открытия модели.
In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
PreLoad: 1 / PostLoad: 1 / PreSave: 0 / PostSave: 0 / Close: 0

Второй тест – это действия при сохранении модели. image.png

image_2.png

image_3.png

Аналогично с предыдущим вариантом предусмотрено две функции с условиями до сохранения и после сохранения.

In [ ]:
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
PreLoad: 1 / PostLoad: 1 / PreSave: 1 / PostSave: 1 / Close: 0

Третий тест – это закрытие модели.

image_2.png

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

In [ ]:
print("Close: " * string(Close))
Close: 1

Последния группа обратных вызовов – это функции, происходящие по действиям во время моделирования. Их 5, как показано на рисунке ниже.

image_2.png

Теперь рассмотрим случаи, когда вызывается каждая из этих функций. Как видно на этапе до открытия модели, мы инициализировали все переменные, которые впоследствии меняем в зависимости от условия.

  1. Функция инициализации вызывается после этапа компиляции модели.
  2. Функция старта выполняется на первом шаге моделирования.
  3. Функция паузы вызывается в случае паузы во время моделирования.
  4. Функция выполняемая на всех шагах моделирования.
  5. Функция остановки процесса моделирования.

Соответственно, если мы запустим модель и во время моделирования хотя бы один раз поставим процесс на паузу, то все выше перечисленные функции выполнятся. На рисунке ниже видно, что после выполнения наших тестов в рабочем пространстве все переменные равны 1.

image.png

Вывод

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

Блоки, использованные в примере