Управляйте Подсистемами вызова функций при помощи bind Действия

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

Привязка подсистемы вызова функций к состоянию

По умолчанию подсистема вызова функций управляется графиком, на котором определяется выходное событие связанного вызова функции. Эта ассоциация означает, что подсистема вызова функций активируется, когда график просыпается и остается активным, пока график не переходит в спящий режим. Чтобы достичь более мелкого уровня управления, можно связать подсистему вызова функций с состоянием в иерархии графиков с помощью bind действие (см. связывание Действия).

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

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

Выходы указателя, когда подсистема отключена

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

  1. Дважды кликните блок outport подсистемы, чтобы открыть диалоговое окно Параметров блоков.

  2. Выберите опцию для Output when disabled:

    Выберите:Кому:
    heldПоддержание самого последнего выходного значения
    resetОбнулите выход до его начального значения
  3. Щелкните OK, чтобы записать настройки.

    Примечание

    Установка Output when disabled имеет значение только, когда подсистема вызова функций связана с состоянием, как описано в разделе «Связать подсистему вызова функций с состоянием».

Управление поведением состояний, Когда Подсистема включена

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

  1. Дважды кликните порт триггера подсистемы, чтобы открыть диалоговое окно Параметров блоков.

  2. Выберите опцию для States when enabling:

    Выберите:Кому:
    heldСохраните самые последние значения состояний подсистемы, которая содержит порт триггера
    resetВернитесь к начальным условиям состояний подсистемы, которая содержит этот порт триггера
    inherit

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

  3. Щелкните OK, чтобы записать настройки.

    Примечание

    Установка States when enabling имеет значение только, когда подсистема вызова функций связана с состоянием, как описано в разделе «Связать подсистему вызова функций с состоянием».

Привязка подсистемы вызова функций к состоянию

Эта модель запускает подсистему вызова функций с событием триггера E который привязывается к состоянию графика. На панели Решатель диалогового окна Параметры конфигурации модели (Model Configuration Parameters) модель задает решатель с фиксированным шагом с размером 1.

График содержит два состояния. Событийные E связывает с состоянием A с действием

  bind:E

Событийные E определяется для графика с возможностями Output to Simulink и тип триггера function-call.

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

Диалоговое окно Параметров блоков для порта триггера содержит следующие настройки:

  • Тип триггера: function-call.

  • Состояния при включении: reset. Этот параметр устанавливает значения состояния для подсистемы вызова функций, чтобы нуль, когда он включен.

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

Установка типа шага расчета на periodic включает поле Шага расчета под ним, которое по умолчанию равняется 1. Эти настройки заставляют подсистему вызова функций выполняться для каждого временного шага, заданного в поле Шага расчета, пока он включен. Для этого состояние, которое связывает вызывающее событие для подсистемы вызова функций, должно послать событие для временного шага, совпадающего с заданной частотой дискретизации в поле Шага расчета. Состояния могут отправлять события со входом или во время действий с частотой выборки симуляции.

  • Для дискретизации с фиксированным шагом Шага расчета значение должно быть целым числом, кратным размеру с фиксированным шагом.

  • Для выборки с переменным шагом Шага расчета значение не имеет никаких ограничений.

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

  • В момент t = 0 переход по умолчанию в состояние A происходит. Конечные A выполняет свою привязку и действия входа. Действие привязки связывает событие E в состояние A, включение подсистемы вызова функций и сброс ее переменных состояния на 0. Действие входа запускает подсистему вызова функций и выполняет ее блок. Блок-схема увеличивает счетчик на 1, используя блок Unit Delay. Блок Unit Delay выводит значение 0 и сохраняет новое значение 1 до следующего вызова подсистемы.

  • В момент t = 1 следующее событие обновления из состояния тестирования модели A для исходящего перехода. Переход к статусу B не происходит, потому что темпоральный оператор after(10,tick) позволяет выполнить переход только после получения десяти событий обновления. Конечные A остается активным, и его во время действия запускает подсистему вызова функций. Блок Unit Delay выводит удержанное значение 1. Подсистема также увеличивает свой счетчик, чтобы получить значение 2, которое блок Unit Delay сохраняет до следующего инициированного выполнения.

  • Следующие восемь событий обновления увеличивают вывод подсистемы на один на каждом временном шаге.

  • В момент t = 10 переход от состояния A в состояние B происходит. Потому что привязка к состоянию A больше не является активным, подсистема вызова функций отключена, и ее выход переходит назад к 0.

  • В момент t = 11 переход от состояния B в состояние A происходит. Снова, действие привязки включает подсистему вызова функций. Последующие события обновления увеличивают вывод подсистемы на единицу в каждый временной шаг до следующего перехода в состояние B происходит в момент t = 21.

Избегайте мулированных Инициирований событий с привязкой

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

На графике E1 связывает с состоянием A, но E2 не делает. Государственный B отправляет инициирующее событие E2 в действии входа.

Когда вы моделируете эту модель, выход не сбрасывается при переходе от состояния A в состояние B происходит.

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