Использование функций инициализации, сброса и завершения

Некоторые блоки поддерживают информацию о состоянии, которую они используют во время симуляции. Для примера Unit Delay блок использует текущее состояние блока, чтобы вычислить выход значения сигналов для следующего временного шага симуляции.

Subsystem блоки имеют стандартные программы инициализации и завершения. Можно добавить пользовательские стандартные программы к стандартным программам по умолчанию, используя Initialize Function и Terminate Function блоки для изменения или чтения состояний блока. Эти функциональные блоки содержат:

  • Event Listener блоки, которые выполняют объединенные стандартные программы при получении события инициализации или завершения вызова функции.

  • State Writer блоки, чтобы инициализировать состояние блока, и State Reader блоки, чтобы считать состояние.

Создайте компонент модели с состоянием

Можно задать алгоритмы модели с помощью Simulink® блоки. В этом примере один блок Discrete-Time Integrator задает алгоритм для интегрирования входного сигнала.

  1. Откройте новую модель Simulink. Сохраните эту модель с именем Model01.

  2. Добавьте блок Discrete-Time Integrator. Проверьте, что значения параметров по умолчанию 1.0 для Gain value, 0 для Initial condition, State (most efficient) для Initial condition setting и -1 для Sample time.

  3. Соедините блок Constant с входом блока Discrete-Time Integrator для моделирования входного сигнала. Подключите блок Scope к сигналу выхода.

  4. Откройте диалоговое окно Параметры конфигурации. Установите параметры симуляции для Type решатель равными Fixed-step, Solver к auto, и Fixed-step size к 1.

  5. Откройте блок Scope, а затем запустите симуляцию. Выходной сигнал увеличивается на 1 на каждом временном шаге.

Инициализация состояния блока

Некоторые алгоритмы модели содержат состояния, которые можно инициализировать. Для примера с алгоритмом, который читает значение датчика, можно выполнить расчет, чтобы задать начальное состояние датчика.

В начале симуляции инициализируйте состояние блока с помощью блока State Writer. Чтобы управлять, когда происходит инициализация, используйте Initialize Function блок, который включает в себя State Writer блок.

  1. Добавьте блок Initialize Function.

    По умолчанию блок Initialize Function включает в себя блок Event Listener с Event type набора параметров для Initialize. Блок также включает блок State Writer и блок Constant в качестве заполнителя для источника начального значения состояния.

  2. Моделируйте начальные условия. В этом примере установите параметр Constant value для блока Constant равным 4.

  3. Соедините средство записи состояний с владельцем состояния. Откройте диалоговое окно Средство Записи. Разверните дерево селектора состояния, выберите Discrete-Time Integrator, а затем нажмите Apply.

    В блоке State Writer отображается имя блока владельца состояния. Блок владельца состояния отображает тег, указывающий ссылку на блок State Writer. Если щелкнуть метку над тегом, откроется список со ссылкой для перехода к блоку State Writer.

  4. Запустите симуляцию, чтобы подтвердить, что ваша модель моделируется без ошибок.

    Блок Initialize Function выполняется в начале симуляции. Выходной сигнал начинается с и начального значения 4 а затем увеличивается на 1 до конца симуляции.

Сброс состояния блока

Во время симуляции можно сбросить состояние блока с помощью блока State Writer. Чтобы управлять, когда происходит сброс, используйте Initialize Function блок, который вы перенастраиваете в Reset Function блок.

  1. Добавьте блок Initialize Function.

  2. Откройте новый блок Initialize Function.

  3. Сконфигурируйте блок для сброса. Откройте диалоговое окно Параметров блоков для блока Event Listener. В раскрывающемся списке Event type выберите Reset. В Event name поле введите имя события. Для примера введите reset. Закройте диалоговое окно.

  4. Моделируйте условия сброса. В этом примере установите параметр Constant value для блока Constant равным 2.

  5. Соедините средство записи состояний с владельцем состояния. Откройте диалоговое окно Средство Записи. Разверните дерево селектора состояния, выберите Discrete-Time Integrator, а затем нажмите Apply.

  6. Переход к верхнему уровню Model01. Переименуйте блок из Initialize Function1 на Reset Function.

    После обновления модели имя события для блока Reset Function отображается на грани блока.

    Если щелкнуть над тегом, откроется список со ссылкой для перехода к блокам State Writer, расположенным в блоке Initialize Function и блоке Reset Function.

  7. Запустите симуляцию, чтобы подтвердить, что ваша модель моделируется без ошибок.

    Блок Reset Function не выполняется во время симуляции. Ему нужен сигнал события вызова функции.

    Чтобы создать сигнал события вызова функции для блока Reset Function, смотрите Создание Тестовой обвязки для Генерации Вызовов Функции.

Чтение и сохранение состояния блока

В конце симуляции можно считать состояние блока и сохранить это состояние.

  1. Добавьте блок Terminate Function.

    По умолчанию блок Terminate Function включает в себя блок Event Listener с параметром Event type установленным на Terminate. Блок также включает блок State Reader и блок Terminator в качестве заполнителя для сохранения значения состояния.

  2. Подключите устройство чтения состояний к владельцу состояния. Откройте диалоговое окно State Reader. В дереве селектора владельцев состояний выберите Discrete-Time Integrator, а затем нажмите Apply.

  3. Запустите симуляцию, чтобы подтвердить, что ваша модель моделируется без ошибок. Блок Terminate Function выполняется в конце симуляции.

  4. Удалите блоки, которые вы добавили для проверки. Замените Constant блок на Inport блок, а Scope блок на Outport блок.

Подготовьте компонент модели к проверке

Внесите следующие изменения, чтобы избежать ошибок симуляции, когда модель компонента помещена в модель экспорта функций для проверки симуляции.

  1. Откройте диалоговое окно Block Parameters для блока Discrete-Time Integrator . Установите Integrator method значение Accumulation:Forward Euler.

  2. Откройте диалоговое окно Параметры конфигурации модели (Model Configuration Parameters). Подтвердите, Type решатель установлен в Fixed-step и Solver установлено на auto. Измените Fixed-step size на 1 на auto.

    Это изменение избегает ошибки симуляции, вызванной несколькими шагами расчета в Подсистеме вызова функций.

Создайте модель экспорта функций

Размещение компонента модели в тестовую обвязку для проверки функций инициализации, сброса и завершения требует, чтобы модель следовала экспорт функций правилам. Смотрите Обзор моделей экспорта функций и создайте тестовую обвязку для генерации вызовов функций.

Чтобы создать модель экспорта функций, поместите компонент модели в блок Function-Call Subsystem с помощью блока Model. Соедините входные и выходные порты от модели с входными и выходными портами подсистемы.

  1. Создайте модель Simulink. Сохраните эту модель с именем Model02.

  2. Откройте диалоговое окно Параметры конфигурации. Установите параметр симуляции для Type решатель равным Fixed-step. Подтвердите, Solver установлено значение auto и Fixed-step size установлено на auto.

  3. Добавьте блок Function-Call Subsystem. Откройте подсистему, дважды кликнув по блоку.

  4. Добавьте блок Model в подсистему и установите Model name на Model01. Добавьте Inport и Outport блоки.

  5. Перейдите к верхнему уровню модели.

  6. Добавьте блок Inport. Этот блок является управляющим сигналом для выполнения подсистемы. Измените имя блока на Run и соедините его с function() порт.

    Откройте диалоговое окно Inport блоков и на вкладке Signal Attributes установите флажок Output function call .

  7. Добавьте второй Inport блок и переименуйте его в Signal In. Соедините его с In1 порт подсистемы. Этот блок является сигналом для алгоритма интегрирования.

    Добавьте Outport блок, переименуйте его в Signal Out, и затем соедините его с Out1 порт подсистемы. Этот блок является интегрированным сигналом.

  8. Откройте диалоговое окно Параметры конфигурации. На панели Модели установите для Total number of instances allowed per top model значение one.

  9. Обновите модель и подтвердите, что ошибок нет, нажав Ctrl-D.

Следующий шаг - создание тестовой обвязки. Смотрите раздел «Создание тестовых обвязок для генерации вызовов функций».

См. также

Блоки

Похожие темы