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

Обратные вызовы

Не путайте обратные вызовы, описанные в этой статье, с обратными вызовами библиотеки DiffEqCallbacks.jl. Подробнее о работе с ними читайте здесь.

Обратные вызовы (Callback) — это функции, которые вызываются автоматически в ответ на определенные события в модели. Обратные вызовы Engee создаются на языке программирования Julia.

Для открытия обратных вызовов зайдите в окно настроек lk 5 и нажмите Редактировать исходный код pen button graphs:

callbacks start 1

В открывшемся меню доступны все обратные вызовы Engee. Они по умолчанию пустые и не содержат кода:

callback start 2

Все обратные вызовы Engee можно условно разделить на 4 группы:

Открытие модели Выполнение модели Сохранение модели Закрытие модели

PreLoadFunc

PostLoadFunc

InitFunc

StartFunc

PauseFunc

ContinueFunc

StopFunc

PreSaveFunc

PostSaveFunc

CloseFunc

Открытие модели

Используются для настройки поведения модели до и после открытия.

Подробнее об обратных вызовах открытия модели

Используемые обратные вызовы: PreLoadFunc (открытие) и PostLoadFunc (закрытие).

Описание:

  • PreLoadFunc — выполняется до загрузки модели.

    Методы программного управления нельзя использовать в обратном вызове этой модели, потому что модель еще не успела загрузиться.
  • PostLoadFunc — выполняется после загрузки модели. В ней можно использовать параметры модели, так как они уже загружены.

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

  • Подготовить рабочее пространство Engee или выполнить инициализационные задачи перед загрузкой модели с помощью PreLoadFunc;

  • Настроить параметры модели или выполнить действия, которые зависят от загруженных данных, после загрузки модели с помощью PostLoadFunc.

Выполнение модели

Используются в процессе симуляции.

Подробнее об обратных вызовах выполнения модели

Используемые обратные вызовы: InitFunc (инициализация), StartFunc (запуск), PauseFunc (пауза), ContinueFunc (выполнение), StopFunc (остановка).

При запуске модели и хотя бы разовой остановки процесса симуляции сработают все эти функции.

Описание:

  • InitFunc — выполняется после этапа компиляции модели;

  • StartFunc — выполняется до первого шага симуляции;

  • PauseFunc — вызывается в случае паузы во время симуляции;

  • ContinueFunc — выполняется на одном шаге при запуске модели после паузы;

  • StopFunc — выполняется во время остановки процесса симуляции.

Сохранение модели

Используются при сохранении модели.

Подробнее об обратных вызовах сохранения модели

Используемые обратные вызовы: PreSave (перед сохранением), PostSave (после сохранения)

Описание:

  • PreSave — выполняется перед сохранением модели;

  • PostSave — выполняется после сохранения модели.

Закрытие модели

Используется при закрытии модели.

Подробнее об обратных вызовах закрытия модели

Используемые обратные вызовы: CloseFunc (закрытие)

Описание:

  • CloseFunc — выполняется после закрытия модели.

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

  • Освобождать ресурсы (память или файловые дескрипторы), которые были задействованы во время работы модели;

  • Выполнять любые завершающие задачи, которые необходимо сделать до закрытия модели;

  • Сохранять состояние модели (или ее данные) перед закрытием.

Пример работы

Для каждого обратного вызова в Engee можно присвоить переменную. Это удобно, чтобы отслеживать срабатывание в зависимости от условия симуляции, например, внутри вызова открытия модели PreLoadFunc можно использовать код:

#переменные открытия модели
PreL = 1 #выполняется до загрузки модели
PostL = 0 #выполняется после загрузки модели

# переменные выполнения модели
Init = 0 #выполняется после компиляции модели
Start = 0 #выполняется до первого шага симуляции
Pause = 0 #вызывается в случае паузы симуляции
Continue = 0 #выполняется на одном шаге при запуске модели после паузы
Stop = 0 #выполняется во время остановки симуляции

#переменные сохранения модели
PreS = 0 #выполняется перед сохранением модели
PostS = 0 #выполняется после сохранения модели

#переменные закрытия модели
Close = 0 #выполняется после закрытия модели

Этот код инициализирует переменные с нулевыми значениями. Переменная PreL, связанная с открытием модели, равна единице, так как ее параметры загружаются до и после загрузки модели (всегда выполняются). Например, в обратных вызовах выполнения модели StartFunc можно установить переменную Start = 1. При успешном выполнении этого обратного вызова значение переменной изменится с 0 (не выполнен) на 1 (выполнен). Следить за выполнением обратных вызовов можно с помощью окна переменных:

callback variables 1

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