Чтобы создать код из компонента моделирования, который реагирует на события инициализации, сброса и завершения во время выполнения, используйте блоки Инициализация функции и Завершение функции. Сведения об использовании этих блоков см. в разделе Использование функций инициализации, сброса и завершения. Блоки можно использовать в любом месте иерархии модели.
Примеры времени создания кода, который реагирует на события инициализации, сброса или завершения:
Запуск и остановка компонента.
Расчет начальных условий.
Сохранение и восстановление состояния из энергонезависимой памяти.
Создание функций сброса точки входа, которые реагируют на внешние события.
Каждая невиртуальная подсистема и ссылочная модель могут иметь собственный набор функций инициализации, сброса и завершения.
Генератор кода создает код инициализации и окончания иначе, чем код сброса. Для кода инициализации и окончания генератор кода включает код инициализации и окончания компонента в функции точки входа по умолчанию. и model_initialize. Генератор кода создает код сброса только при моделировании поведения сброса. model_terminate
При создании кода для компонента, включающего блоки «Инициализация функции» и «Завершение функции», генератор кода:
Включает код инициализации события с кодом инициализации по умолчанию в функцию точки входа .model_initialize
Включает код завершения с кодом завершения по умолчанию в функцию точки входа .model_terminate
Рассмотрим модель rtwdemo_irt_base.

Для этой модели генератор кода создает функции инициализации и завершения точек входа, с которыми может взаимодействовать другой код.
void rtwdemo_irt_base_initialize(void) void rtwdemo_irt_base_terminate(void)
Этот код появляется в созданном файле rtwdemo_irt_base.c. Функция инициализации, rtwdemo_irt_base_initialize:
Инициализирует состояние ошибки.
Выделяет память для параметров блочного ввода-вывода и состояния.
Устанавливает выходное значение
Устанавливает начальное условие для дискретного интегратора.
Функция завершения,,rtwdemo_irt_base_terminate, не требует кода.
Этот код предполагает, что поддержка неокончательных номеров и ведения журнала MAT-файлов отключена.
void rtwdemo_irt_base_initialize(void)
{
rtmSetErrorStatus(rtwdemo_irt_base_M, (NULL));
(void) memset((void *)&rtwdemo_irt_base_DW, 0,
sizeof(DW_rtwdemo_irt_base_T));
rtwdemo_irt_base_Y.Out1 = 0.0;
rtwdemo_irt_base_DW.DiscreteIntegrator_DSTATE = 0.0;
}
void rtwdemo_irt_base_terminate(void)
{
/* (no terminate code required) */
}
Добавление в модель блоков Initialize Function и Terminate Function (см. rtwdemo_irt_initterm). Блок инициализации функции использует блок записи состояния для установки начального состояния блока дискретного интегратора. Блок завершения функции включает в себя блок считывания состояния, который считывает состояние блока дискретного интегратора.

Параметр Тип события для блока прослушивателя событий для функций инициализации и завершения имеет значение Initialize и Terminateсоответственно. Функция инициализации использует блок записи состояния для инициализации входного значения для блока дискретного интегратора на 10. Функция завершения использует блок считывания состояния для считывания состояния блока дискретного интегратора.


Генератор кода включает код события, который он создает для блоков Initialize Function и Terminate Function со стандартным кодом initialize и terminate в функциях начального уровня. rtwdemo_irt_initterm_initialize и rtwdemo_irt_initterm_terminate. Этот код предполагает, что поддержка неокончательных номеров и ведения журнала MAT-файлов отключена.
void rtwdemo_irt_initterm_initialize(void)
{
rtmSetErrorStatus(rtwdemo_irt_initterm_M, (NULL));
(void) memset((void *)&rtwdemo_irt__initterm_DW, 0,
sizeof(DW_rtwdemo_irt__initterm_T));
rtwdemo_irt_initterm_Y.Out1 = 0.0;
rtwdemo_irt_initterm_DW.DiscreteIntegrator_DSTATE = 10.0;
}
void rtwdemo_irt__initterm_terminate(void)
{
/* (no terminate code required) */
} Создайте код, реагирующий на событие сброса, включив в компонент моделирования блок «Инициализация функции» или «Завершение функции». Настройте блок для сброса, установив для параметра Event type его блока Event Listener значение Reset. Также задайте параметр Имя события. Имя по умолчанию: reset.
Генератор кода создает функцию сброса точки входа только при моделировании поведения сброса. Если компонент содержит несколько спецификаций сброса, код, создаваемый генератором кода, зависит от того, имеют ли функции сброса общее имя события. Для данной иерархии компонентов:
Для функций сброса с уникальными именами событий генератор кода создает отдельную функцию точки входа для каждого именованного события. Имя каждой функции - это имя соответствующего события.
Для функций сброса, совместно использующих имя события, генератор кода агрегирует код сброса в одну функцию точки входа. Код для функций сброса отображается по порядку, начиная с самого низкого уровня (самого внутреннего) иерархии компонентов и заканчивая корнем (самым внешним). Имя функции: . Дополнительные сведения см. в разделе Имена событий и агрегирование кодов.model_reset
Рассмотрим модель rtwdemo_irt_reset, который включает в себя блок сброса функции, полученный из блока инициализации функции.

Для параметра Тип события (Event type) и Имя события (Event name) блока Прослушиватель событий (Event Listener) установлено значение Reset и resetсоответственно. Функция использует блок записи состояния, чтобы сбросить входное значение для блока дискретного интегратора на 5.

Генератор кода создает функцию сброса rtwdemo_irt_reset_reset.
void rtwdemo_irt_reset_reset(void)
{
rtwdemo_irt_reset_DW.DiscreteIntegrator_DSTATE = 5.0;
}Блоки Initialize Function и Terminate Function используются для определения нескольких функций инициализации, сброса и завершения иерархии компонентов. Определите только одну функцию инициализации и одну функцию завершения на уровне иерархии. Для уровня иерархии можно определить несколько функций сброса. Имена событий, настраиваемые для функций на данном уровне, должны быть уникальными.
При создании кода генератор кода агрегирует код для функций с заданным именем события по всей иерархии компонентов в одну функцию точки входа. Код для функций сброса отображается по порядку, начиная с самого низкого уровня (самого внутреннего) иерархии компонентов и заканчивая корнем (самым внешним). Генератор кода использует имя события для присвоения имени функции.
Например, модель rtwdemo_irt_shared включает в себя подсистему, которая реплицирует функции инициализации, сброса и завершения, находящиеся в родительской модели.

Хотя модель включает несколько копий функций инициализации, сброса и завершения, генератор кода создает одну функцию точки входа для сброса (rtwdemo_irt_shared_reset), один для инициализации (rtwdemo_irt_shared_initialize) и один для завершения (rtwdemo_irt_shared_terminate). В каждой функции точки входа после перечисления кода для блоков, сконфигурированных с начальным условием (), генератор кода упорядочивает код для компонентов, начиная с самого низкого уровня иерархии и заканчивая корнем.model_P.block_IC
.
.
.
void rtwdemo_irt_shared_reset(void)
{
rtwdemo_irt_shared_DW.SubIntegrator2_DSTATE = 5.0;
rtwdemo_irt_shared_DW.Integrator2_DSTATE = 5.0;
}
.
.
.
void rtwdemo_irt_shared_initialize(void)
{
rtmSetErrorStatus(rtwdemo_irt_shared_M, (NULL));
(void) memset(((void *)&rtwdemo_irt_shared_DW), 0,
sizeof(DW_rtwdemo_irt_shared_T));
rtwdemo_irt_shared_Y.Out1 = 0.0;
rtwdemo_irt_shared_DW.Integrator1_DSTATE = 0.0;
rtwdemo_irt_shared_DW.SubIntegrator2_DSTATE = 2.0;
rtwdemo_irt_shared_DW.Integrator2_DSTATE = 10.0;
.
.
.
void rtwdemo_irt_shared_terminate(void)
{
/* (no terminate code required) */
}
При переименовании события, сконфигурированного для функции сброса подсистемы, в reset_02генератор кода создает две функции сброса точки входа, rtwdemo_irt_shared_reset и rtwdemo_irt_shared_reset_02.
void rtwdemo_irt_shared_reset(void)
{
rtwdemo_irt_shared_DW.SubIntegrator2_DSTATE = 5.0;
}
void rtwdemo_irt_shared_reset_02(void)
{
rtwdemo_irt_shared_DW.Integrator2_DSTATE = 5.0;
}Нельзя создать код из модели кабельных трасс - корневой модели, содержащей блок «Модель», который открывает порты функций инициализации, сброса или завершения.