Обратные вызовы (Callbacks)¶
В данной демонстрации покажем возможности вызова из модели функций по условиям, выполняемым внутри модели.
Сама модель представляет из себя логируемую синусоиду. Схема работы, при которой в процессе моделирования есть возможность включения обратных вызовов, показана на рисунке ниже.
Эта демонстрация будет представлять из себя набор тестов, которые условно можно разбить на 4 группы:
- функции по условию открытия модели,
- функции по условиям выполнения модели,
- функции по условию сохранения модели,
- функции по условию закрытия модели.
Для открытия окна обратных вызовов необходимо отрыть «Настройки модели» -> «Редактировать исходный код».
Для срабатывания тестов, описанных ниже, нужно запустить model_callback.engee.
Первый тест – это срабатывание обратных вызовов при открытии модели.
Как мы видим, в момент открытия инициализируются две переменные:
- до открытия модели,
- после открытия модели.
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
Второй тест – это действия при сохранении модели.
Аналогично с предыдущим вариантом предусмотрено две функции с условиями до сохранения и после сохранения.
print("PreLoad: " * string(PreL) * " / PostLoad: " * string(PostL) *
" / PreSave: " * string(PreS) * " / PostSave: " * string(PostS) *
" / Close: " * string(Close))
Третий тест – это закрытие модели.
Из него мы видим, что в случае закрытия модели срабатывает именно эта функция.
print("Close: " * string(Close))
Последния группа обратных вызовов – это функции, происходящие по действиям во время моделирования. Их 5, как показано на рисунке ниже.
Теперь рассмотрим случаи, когда вызывается каждая из этих функций. Как видно на этапе до открытия модели, мы инициализировали все переменные, которые впоследствии меняем в зависимости от условия.
- Функция инициализации вызывается после этапа компиляции модели.
- Функция старта выполняется на первом шаге моделирования.
- Функция паузы вызывается в случае паузы во время моделирования.
- Функция выполняемая на всех шагах моделирования.
- Функция остановки процесса моделирования.
Соответственно, если мы запустим модель и во время моделирования хотя бы один раз поставим процесс на паузу, то все выше перечисленные функции выполнятся. На рисунке ниже видно, что после выполнения наших тестов в рабочем пространстве все переменные равны 1.
Вывод¶
В данной демонстрации мы показали, как использовать обратные вызовы. Этот инструмент предназначен для автоматизации процессов моделирования, а также для сохранения и анализа результатов моделирования. При помощи обратных вызовов мы можем полностью избавиться от привязки к скриптам и реализовать весь наш проект исключительно в моделях, начиная от этапа объявления параметров и заканчивая этапом анализа результатов.