Визуальное моделирование для профессионалов
Обратные вызовы
Обратные вызовы (Callback) — это функции, которые вызываются автоматически в ответ на определенные события в модели.
Обратные вызовы Engee создаются на языке программирования Julia.
Для открытия обратных вызовов зайдите в окно настроек
и нажмите Редактировать исходный код:
В открывшемся меню доступны все обратные вызовы Engee. Они по умолчанию пустые и не содержат кода:
Все обратные вызовы Engee можно разделить на 4 группы:
|
Открытие модели |
Выполнение модели |
Сохранение модели |
Закрытие модели |
|
|
|
|
|
Описание обратных вызовов
Открытие модели
Функции, которые используются для настройки поведения модели до и после открытия:
-
PreLoadFunc— выполняется до загрузки модели. Функция позволяет подготовить рабочее пространство Engee или выполнить инициализационные задачи перед загрузкой модели. В ней нельзя использовать методы программного управления, т.к. модель еще не успела загрузиться; -
PostLoadFunc— выполняется после загрузки модели. Функция позволяет настроить параметры модели или выполнить действия, которые зависят от загруженных данных.
Выполнение модели
Функции, которые используются в процессе симуляции:
InitFunc— выполняется после этапа компиляции модели;StartFunc— выполняется до первого шага симуляции;PauseFunc— вызывается в случае паузы во время симуляции;ContinueFunc— выполняется на одном шаге при запуске модели после паузы;StopFunc— выполняется во время остановки процесса симуляции.
При запуске модели и хотя бы разовой остановки процесса симуляции сработают все эти функции.
Сохранение модели
Функции, которые используются при сохранении модели:
PreSaveFunc— выполняется перед сохранением модели;PostSaveFunc— выполняется после сохранения модели.
Закрытие модели
Функция, которая используется при закрытии модели:
CloseFunc— выполняется после закрытия модели.
Обратные вызовы, выполняемые при закрытии модели, позволяют:
- освобождать ресурсы (память или файловые дескрипторы), которые были задействованы во время работы модели;
- выполнять любые завершающие задачи, которые необходимо сделать до закрытия модели;
- сохранять состояние модели (или ее данные) перед закрытием.
✏️Задание 1
Используйте обратные вызовы для инициализации параметров модели:
- Откройте уже знакомую вам модель
Синусоида с искажениями.engee. - В окне настроек модели зайдите в окно настроек и в разделе Обратные вызовы нажмите Редактировать исходный код.
- Выберите вкладку
PostLoadFuncи введите код, задающий значения параметров блока Sine Wave:
A = 10
B = 3
omega = 2
phi = pi/4
- В окне настроек блока Sine Wave задайте следующие значения параметров:
|
Параметр |
Amplitude |
Bias |
Frerquency (rad/sec) |
Phase (rad) |
|
Значение |
|
|
|
|
- Запустите модель и постройте графики выходных сигналов блоков SIne Wave и AWGN Channel.
Решение
Окно редактора обратных вызовов:
График результатов моделирования:
✏️Задание 2
Добавьте в обратные вызовы инициализацию еще двух параметров модели:
- В коде функции
PostLoadFuncдобавьте следующие строки:
K = 0.8
SNR = 5
- В окне настроек блока Gain задайте значение параметра Gain равным
K. - В окне настроек блока AWGN Channel задайте значение параметра Eb/No (dB) равным
SNR. - Запустите модель и постройте графики выходных сигналов блоков SIne Wave и AWGN Channel.
Решение
Окно редактора обратных вызовов:
График результатов моделирования:
Сообщение в окно диагностики
В коде обратных вызовов модели можно отправлять сообщения в окно диагностики модели
с помощью следующих функций:
engee.info(msg)— информационное сообщение;engee.warning(msg)— сообщение-предупреждение.
Примечание
Эти функции работают только внутри обратных вызовов. Собирайте текст через интерполяцию ("Значение = $(x)") или string(…).
✏️Задание 3
Выведите сообщение в окно диагностики:
- В окне редактора обратных вызовов выберите вкладку
StopFuncи введите следующий код:
engee.info("Симуляция выполнена при SNR = $(SNR)")
При завершении симуляции в окне диагностики будет выводиться сообщение о том, при каком значении параметра SNR выполнена симуляция.
- Запустите модель.
- Откройте окно диагностики модели
и просмотрите сообщения в этом окне.
Решение
Окно редактора обратных вызовов:
Окно диагностики модели: