Описание пользователя
Глава 3. Использование стандартных модулей автокомпиляции
§3.7. Краткий перечень вводимых в модель описаний и реакций на события
§3.7.2. Создание и уничтожение блока
Рассматриваются реакции на события, связанные с созданием и уничтожением блока.
§3.7.2.1. Инициализация блока
Событие инициализации – это самое первое событие в «жизни» блока. Оно возникает только один раз за все время работы модели в момент подключения этой модели к блоку: при добавлении блока в схему из библиотеки или из буфера обмена, при загрузке схемы из файла, при ручной смене модели блока пользователем через окно параметров блока и т.п. На момент возникновения события параметры блока еще не загружены и переменные еще не созданы, поэтому в реакции на него нельзя обращаться к переменным блока. Если попытаться обратиться к переменным блока в реакции на событие инициализации, будет выведено сообщение об ошибке (рис. 486).
Рис. 486. Сообщение о недопустимости обращения
к переменным блока
Не следует вводить в реакцию на инициализацию блока какие-либо команды, задающие начальные параметры расчета, выполняемого блоком. Событие инициализации возникает только один раз, а начальные параметры расчета необходимо задавать после каждого его сброса. Для этого можно использовать специальные флаги, обрабатываемые в реакции на такт расчета (см. пример в §3.6.4.2) или реакцию на сброс расчета.
Реакция на событие инициализации вводится на вкладке «» левой панели редактора модели: раздел «», подраздел «» (см. рис. 463). Чаще всего эта реакция используется для настройки каких-либо объектов блока, параметры которых не настраиваются пользователем и не изменяются в процессе работы блока. Например, в примере из §3.6.12 в реакции инициализации модель блока добавляет свой собственный пункт в главное меню RDS.
Для реакции на инициализацию модуль автоматически создает в классе блока функцию без параметров с именем rdsbcppInit, внутрь которой вставляется текст программы, введенной пользователем на соответствующей вкладке редактора. Функция имеет следующий вид:
// Block data creation and initialization
void rdsbcppBlockClass::rdsbcppInit(void)
{
… пользовательский текст реакции …
}
При написании моделей блоков без использования модуля автокомпиляции событию инициализации соответствует константа RDS RDS_BFM_INIT.