Некоторые блоки обеспечивают информацию состояния, которую они используют во время симуляции. Например, блок Unit Delay использует текущее состояние блока, чтобы вычислить значение выходного сигнала для следующего шага времени симуляции.
Блоки Subsystem имеют значение по умолчанию, инициализируют и стандартные программы завершения. Можно добавить пользовательские стандартные программы в стандартные программы по умолчанию с помощью Initialize Function и блоков Terminate Function, чтобы изменить или считать состояния блока. Эти функциональные блоки содержат:
Блоки Event Listener, которые выполняют объединенные стандартные программы при получении инициализирования или оконечного события вызова функции.
State Writer блокируется, чтобы инициализировать состояние блока и блоки State Reader, чтобы считать состояние.
Вы можете алгоритмы модели define с помощью блоков Simulink®. В этом примере один блок Discrete-Time Integrator задает алгоритм для интеграции входного сигнала.
Откройте новую модель Simulink. Сохраните эту модель с именем Model01
.
Добавьте блок Discrete-Time Integrator. Проверьте, что значениями параметров по умолчанию является 1.0
для Gain value, 0
для Initial condition, State (most efficient)
для Initial condition setting и -1
для Sample time.
Соедините блок Constant с входом блока Discrete-Time Integrator, чтобы смоделировать входной сигнал. Соедините блок Scope с выходным сигналом.
Откройте диалоговое окно Configuration Parameters. Установите параметры симуляции для Решателя Type к Fixed-step
, Solver к auto
, и Fixed-step size к 1
.
Откройте блок Scope, и затем запустите симуляцию. Выходной сигнал увеличивается 1
на каждом временном шаге.
Некоторые моделируют алгоритмы, содержат состояния, которые можно инициализировать. Например, с алгоритмом, который читает значение датчика, можно выполнить расчет, чтобы установить начальное состояние датчика.
В начале симуляции инициализируйте состояние блока с помощью блока State Writer. Чтобы управлять, когда инициализация происходит, используйте блок Initialize Function, который включает блок State Writer.
Добавьте блок Initialize Function.
По умолчанию блок Initialize Function включает блок Event Listener с набором параметра Event type к Initialize
. Блок также включает блок State Writer и блок Constant как заполнитель для источника значения начального состояния.
Начальные условия модели. В этом примере, установленном параметр Constant value для блока Constant к 4
.
Соедините средство записи состояния с владельцем состояния. Откройте диалоговое окно State Writer. Расширьте владельца состояния Селектора Три, выберите Discrete-Time Integrator
, и затем нажмите Apply.
Блок State Writer отображает имя блока владельца состояния. Блок владельца состояния отображает тег, указывающий на ссылку на блок State Writer. Если вы кликаете по метке выше тега, список открывается ссылкой для навигации с блоком State Writer.
Запустите симуляцию, чтобы подтвердить, что ваша модель симулирует без ошибок.
Блок Initialize Function выполняется в начале симуляции. Выходной сигнал запускается с и начальное значение 4
и затем увеличения 1
до конца симуляции.
Во время симуляции можно сбросить состояние блока с помощью блока State Writer. Чтобы управлять, когда сброшенный происходит, используйте блок Initialize Function, который вы реконфигурировали с блоком Reset Function.
Добавьте блок Initialize Function.
Откройте новый блок Initialize Function.
Сконфигурируйте блок для сброса. Откройте диалоговое окно Block Parameter для блока Event Listener. От Event type выпадающий список выберите Reset
. В поле Event name введите имя события. Например, введите reset
. Закройте диалоговое окно.
Условия сброса модели. В этом примере, установленном параметр Constant value для блока Constant к 2
.
Соедините средство записи состояния с владельцем состояния. Откройте диалоговое окно State Writer. Расширьте владельца состояния Селектора Три, выберите Discrete-Time Integrator
, и затем нажмите Apply.
Перейдите к верхнему уровню Model01
. Переименуйте блок из Initialize Function1
к Reset Function
.
После обновления вашей модели имя события для блока Reset Function отображено на поверхности блока.
Если вы щелкаете выше тега, список открывается ссылкой для навигации с блоками State Writer, расположенными в блоке Initialize Function и блоке Reset Function.
Запустите симуляцию, чтобы подтвердить, что ваша модель симулирует без ошибок.
Блок Reset Function не выполняется во время симуляции. Этому нужен сигнал события вызова функции.
Чтобы создать сигнал события вызова функции для Функционального блока Сброса, смотрите, Создают Тестовую обвязку, чтобы Сгенерировать Вызовы функции.
В конце симуляции можно считать состояние блока и сохранить то состояние.
Добавьте блок Terminate Function.
По умолчанию блок Terminate Function включает блок Event Listener параметром набор Event type к Terminate
. Блок также включает блок State Reader и блок Terminator как заполнитель для сохранения значения состояния.
Соедините читателя состояния с владельцем состояния. Откройте диалоговое окно State Reader. От владельца состояния Селектора Три выберите Discrete-Time Integrator
, и затем нажмите Apply.
Запустите симуляцию, чтобы подтвердить, что ваша модель симулирует без ошибок. Блок Terminate Function выполняется в конце симуляции.
Удалите блоки, которые вы добавили для тестирования. Замените блок Constant на блок Inport и блок Scope с блоком Outport.
Внесите следующие изменения, чтобы избежать ошибок симуляции, когда модель компонента будет помещена в модель экспорта функций для тестирования симуляции.
Откройте диалоговое окно Block Parameters для блока Discrete-Time Integrator . Установите Integrator method на Accumulation:Forward Euler
.
Откройте диалоговое окно Model Configuration Parameters. Подтвердите решатель, Type установлен в Fixed-step
и Solver установлен в auto
. Измените Fixed-step size от 1
к auto
.
Это изменение избегает ошибки симуляции, вызванной при наличии нескольких шагов расчета в Подсистеме вызова функций.
При размещении компонента модели в тестовую обвязку для тестирования инициализирования сброс и оконечные функции требуют, чтобы модель следовала правилам экспорта функций. См. Обзор Моделей Экспорта функций и Создайте Тестовую обвязку, чтобы Сгенерировать Вызовы функции.
Чтобы создать модель экспорта функций, поместите компонент модели в блок Function-Call Subsystem с помощью блока Model. Соедините порты ввода и вывода от модели до портов ввода и вывода подсистемы.
Создайте модель Simulink. Сохраните эту модель с именем Model02
.
Откройте диалоговое окно Configuration Parameters. Установите параметр симуляции для Решателя Type к Fixed-step
. Подтвердите, что Solver установлен в auto
и Fixed-step size установлен в auto
.
Добавьте блок Function-Call Subsystem. Откройте подсистему путем двойного клика по блоку.
Добавьте блок Model в подсистему и установите Model name на Model01
. Добавьте блоки Outport и Inport.
Перейдите к верхнему уровню модели.
Добавьте блок Inport. Этот блок является управляющим сигналом для выполнения подсистемы. Измените имя блока в Run
и соедините его с function()
порт.
Откройте диалоговое окно блока Inport и на вкладке Signal Attributes, установите флажок Output function call .
Добавьте второй блок Inport и переименуйте его к Signal In
. Соедините его с In1
порт подсистемы. Этот блок является сигналом для алгоритма интегрирования.
Добавьте блок Outport, переименуйте его к Signal Out
, и затем соедините его с Out1
порт подсистемы. Этот блок является интегрированным сигналом.
Откройте диалоговое окно Configuration Parameters. На Модели, Ссылающейся на панель, набор Total number of instances allowed per top model к one
.
Обновите свою модель и подтвердите, что нет никаких ошибок путем нажатия Ctrl-D.
Следующий шаг, создают тестовую обвязку. Смотрите Создают Тестовую обвязку, чтобы Сгенерировать Вызовы функции.