Чтобы сгенерировать код от компонента моделирования, который отвечает, чтобы инициализировать, сбросьте, и оконечные события во время выполнения, использования, блоки Инициализируют Функцию и Оконечную Функцию. Для получения информации о том, как использовать эти блоки, смотрите Используя, Инициализируют, Сброс и Оконечные Функции (Simulink). Можно использовать блоки где угодно в иерархии модели.
Примеры того, когда сгенерировать код, который отвечает, чтобы инициализировать, сбросьте, или оконечные события включают:
Запуск и остановка компонента.
Вычисление начальных условий.
Сохранение и восстановление состояния от энергонезависимой памяти.
Генерация сбросила функции точки входа, которые отвечают на внешние события.
Каждая невиртуальная подсистема и модель, на которую ссылаются, могут иметь свой собственный набор, инициализируют, сбрасывают, и оконечные функции.
Генератор кода производит код инициализации и завершения по-другому, чем код сброса. Для кода инициализации и завершения генератор кода включает ваш код инициализации и завершения компонента в функции точки входа по умолчанию,
и 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
:
Инициализирует ошибочное состояние.
Выделяет память для блока I/O и параметров состояния.
Устанавливает выходное значение
Устанавливает начальное условие для дискретного интегратора.
Оконечная функция, 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) */ }
Добавьте Инициализируют Функцию и Отключают Функциональные блоки к модели (см. rtwdemo_irt_initterm
). Инициализировать Функциональный блок использует блок State Writer, чтобы установить начальное условие блока Discrete Integrator. Оконечный Функциональный блок включает блок State Reader, который читает состояние блока Discrete Integrator.
Параметр Event type блока Event Listener для инициализирования и оконечных функций устанавливается на Initialize
и Terminate
, соответственно. Инициализировать функция использует блок State Writer, чтобы инициализировать входное значение для блока Discrete Integrator к 10. Оконечная функция использует блок State Reader, чтобы считать состояние блока Discrete Integrator.
Генератор кода включает код события, который он производит для Инициализировать Функции, и Оконечные Функциональные блоки со стандартом инициализируют и отключают код в функциях точки входа 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
. Также установите параметр Event name. Именем по умолчанию является reset
.
Генератор кода производит функцию точки входа сброса, только если вы моделируете поведение сброса. Если компонент содержит несколько спецификаций сброса, код, который производит генератор кода, зависит от того, совместно используют ли сброшенные функции имя события. Для данной иерархии компонентов:
Для функций сброса с уникальными именами события генератор кода производит отдельную функцию точки входа для каждого именованного события. Имя каждой функции является именем соответствующего события.
Для функций сброса, которые совместно используют имя события, генератор кода агрегировал код сброса в одну функцию точки входа. Код для функций сброса появляется по порядку, начиная с самого низкого уровня (самого внутреннего) из иерархии компонентов и заканчивающийся (наиболее удаленным) корнем. Именем функции является
. Для получения дополнительной информации смотрите Имена События и Агрегацию Кода.model_reset
Рассмотрите модель rtwdemo_irt_reset
, которая включает Функциональный блок Сброса, выведенный от Инициализировать Функционального блока.
Event type и параметры Event name блока Event Listener установлены в Reset
и reset
, соответственно. Функция использует блок State Writer, чтобы сбросить входное значение для блока Discrete Integrator к 5.
Генератор кода производит функцию сброса rtwdemo_irt_reset_reset
.
void rtwdemo_irt_reset_reset(void) { rtwdemo_irt_reset_DW.DiscreteIntegrator_DSTATE = 5.0; }
Используйте Инициализировать Функцию и Отключите Функциональные блоки, чтобы задать, несколько инициализируют, сбрасывают, и оконечные функции для иерархии компонентов. Задайте только один инициализирует функцию и одну оконечную функцию на уровень иерархии. Можно задать несколько функций сброса для уровня иерархии. Имена события, которые вы конфигурируете для функций на данном уровне, должны быть уникальными.
При создании кода генератор кода агрегировал код для функций, которые имеют данное имя события через целую иерархию компонентов в одну функцию точки входа. Код для функций сброса появляется по порядку, начиная с самого низкого уровня (самого внутреннего) из иерархии компонентов и заканчивающийся (наиболее удаленным) корнем. Генератор кода использует имя события, чтобы назвать функцию.
Например, модель 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; }
Вы не можете сгенерировать код от модели тестовой обвязки — корневая модель, которая содержит блок Model, который представляет, инициализируют, сбрасывают, или оконечные функциональные порты.