exponenta event banner

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

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

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

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

  • Блоки записи состояния для инициализации состояния блока и блоки чтения состояния для считывания состояния.

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

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

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

  2. Добавьте блок интегратора дискретного времени. Убедитесь, что значения параметров по умолчанию: 1.0 для значения коэффициента усиления, 0 для исходного состояния, State (most efficient) для настройки начального состояния, и -1 для времени выборки.

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

  4. Откройте диалоговое окно «Параметры конфигурации». Задайте параметры моделирования для типа решателя как Fixed-step, Решатель для autoи Фиксированный размер шага до 1.

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

Инициализировать состояние блока

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

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

  1. Добавьте функциональный блок инициализации.

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

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

  3. Соедините устройство записи состояния с владельцем штата. Откройте диалоговое окно «Устройство записи состояния». Разверните дерево выбора владельца состояния и выберите Discrete-Time Integratorи нажмите кнопку «Применить».

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

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

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

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

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

  1. Добавьте функциональный блок инициализации.

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

  3. Настройка блока для сброса. Откройте диалоговое окно «Параметр блока» для блока «Прослушиватель событий». В раскрывающемся списке Тип события выберите Reset. В поле Имя события введите имя события. Например, введите reset. Закройте диалоговое окно.

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

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

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

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

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

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

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

    Чтобы создать сигнал события вызова функции для блока сброса функции, см. раздел Создание тестового кабеля для генерации вызовов функции.

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

В конце моделирования можно прочитать состояние блока и сохранить его.

  1. Добавьте функциональный блок завершения.

    По умолчанию блок «Завершить функцию» включает блок «Прослушиватель событий» с параметром «Тип события», равным Terminate. Блок также включает блок чтения состояния и блок терминатора в качестве местозаполнителя для сохранения значения состояния.

  2. Соедините считыватель состояния с владельцем штата. Откройте диалоговое окно Программа чтения состояния (State Reader). В дереве выбора владельца состояния выберите Discrete-Time Integratorи нажмите кнопку «Применить».

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

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

Подготовка компонента модели к тестированию

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

  1. Откройте диалоговое окно «Параметры блока» для блока интегратора дискретного времени. Задайте для метода интегратора значение Accumulation:Forward Euler.

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

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

Создание модели Export-Function

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

Чтобы создать модель export-function, поместите компонент модели в блок Function-Call Subsystem с использованием блока Model. Подключите входные и выходные порты модели к входным и выходным портам подсистемы.

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

  2. Откройте диалоговое окно «Параметры конфигурации». Задайте для параметра моделирования Тип решателя значение Fixed-step. Убедитесь, что для решателя установлено значение auto и для параметра Фиксированный размер шага установлено значение auto.

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

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

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

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

    Откройте диалоговое окно Блок ввода и на вкладке Атрибуты сигнала установите флажок Вызов функции вывода.

  7. Добавить второй блок ввода и переименовать его в Signal In. Подключите его к In1 порт подсистемы. Этот блок является сигналом для алгоритма интеграции.

    Добавить блок исходящего порта, переименовать его в Signal Out, а затем подключите его к Out1 порт подсистемы. Этот блок является интегрированным сигналом.

  8. Откройте диалоговое окно «Параметры конфигурации». На панели Привязка модели (Model Referencing) задайте для параметра Общее количество экземпляров, разрешенных для модели верхнего уровня (Total number of instances allowed per top model one.

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

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

См. также

Блоки

Связанные темы