Логически исполняемый блок подсистемы работает один или более раз на текущем шаге времени, когда активируется блоком управления. Блок управления реализует логику управления, аналогичную той, которая выражается оператором языка программирования (например, if-then, switch, while, for).
Селекторные подсистемы являются одним из типов логически выполняемых подсистем, которые выполняются один раз в течение временного шага в ответ на сигнал действия от блока управления, расположенного вне подсистемы. Simulink ® поддерживает две структуры селекторных подсистем, if-else и switch-case.
Блок If Action Subsystem является блоком Subsystem, предварительно сконфигурированным в качестве начальной точки для создания подсистемы, выполнение которой разрешено блоком If.
Внешний блок If управляет выполнением. Блок If вычисляет логическое выражение, а затем, в зависимости от результата вычисления, выводит сигнал действия в блок подсистемы If Action.
Рассмотрим следующую модель. Сведения об открытии модели см. в разделе ex_if_block.

В этой модели входные данные блока If предоставляют значения операндов для логических выражений, представленных как выходные порты. Каждый выходной порт подключается к блоку подсистемы If Action. Выражения в блоке If вычисляются сверху вниз, начиная с if выражение. Если выражение имеет значение true, выполняется соответствующая подсистема If Action, а остальные выражения не вычисляются.
Структура if-else в модели может быть представлена следующим псевдокодом.
IF u1 > 0 THEN
Subsystem 1
ELSEIF u2 > 0
Subsystem 2
ELSE
Subsystem 3
END IFЧтобы создать пример модели, выполните следующие действия.
Поместите блок If в редактор Simulink. Дважды щелкните блок, чтобы открыть диалоговое окно параметров блока.
В поле «Количество вводов» введите 2.
К блоку добавляются два входных порта. Входные порты предназначены для сигналов, содержащих значения операндов, а количество операндов необязательно. Входной сигнал может быть вектором. Например, можно указать пятый элемент вектора u в выражении как u(5) > 0.
В текстовом поле «Если выражение» введите u1 > 0.
Выходной порт добавляется к блоку с меткой if(u1 > 0). Этот порт является единственным необходимым выходом для блока If.
В текстовом поле Выражения Elseif введите u2 > 0.
Можно ввести несколько выражений elseif с запятой, разделяющей выражения. Каждое выражение добавляет выходной порт к блоку If с меткой формы elseif(expression).
Установите флажок Показать условие else.
Выходной порт добавляется к блоку с меткой else.
Добавьте три блока подсистемы If Action.
Эти блоки являются блоками подсистемы с блоком порта действия. При размещении блока «Порт действия» внутри подсистемы к блоку добавляется входной порт с именем «Действие».
Подключите каждый выходной порт из блока If к порту действия блока подсистемы If Action.
При установлении соединения значок блока «Если подсистема действий» переименовывается в тип выражения, присоединенного к нему.
В каждом блоке подсистемы действий введите блоки Simulink, которые должны выполняться для состояния, которое он обрабатывает.
Подключите выходы из блоков подсистемы If Action к блоку Merge.
Запустите моделирование.
Линии сигналов действий между блоками If и If Action Subsystem изменяются с твердого тела на пунктирную линию.
Примечание
Все блоки в блоке подсистемы If Action, управляемом блоком If, должны работать с той же скоростью, что и управляющий блок.
Блок Switch Case Action Subsystem является блоком Subsystem, предварительно сконфигурированным в качестве начальной точки для создания подсистемы, выполнение которой разрешено блоком Switch Case.
Внешний блок «Switch Case» управляет выполнением. Блок Switch Case оценивает индекс варианта и затем, в зависимости от выбранного варианта, выводит сигнал действия в блок Switch Case Action Subsystem.
Рассмотрим следующую модель со структурой коммутатора. Сведения об открытии модели см. в разделе ex_switch_case_block.

В этой модели вход в блок Switch Case обеспечивает значение индекса для выбора варианта, представленного в качестве выходных портов. Каждый выходной порт подключается к блоку подсистемы If Action. При выборе варианта выполняется соответствующая подсистема If Action.
Структура коммутатора в модели может быть представлена следующим псевдокодом.
CASE u1
u1 = 1:
subsystem_1
break
u1 = 2 or 3:
subsystem_2_3
break
u1 = OTHER VALUES:
subsystem_default
break
END CASEЧтобы создать пример модели, выполните следующие действия.
Поместите блок «Switch Case» в редактор Simulink Editor. Дважды щелкните блок, чтобы открыть диалоговое окно параметров блока.
В поле Условия варианта введите {1, [2,3]}.
Определены два варианта. Первый случай, когда входным значением является 1и второй случай, когда входным значением является 2 или 3. Варианты могут быть одинарными или многозначными и отображаться как выходные порты в блоке «Switch Case». Не целочисленные входные значения усекаются до целых чисел.
Установите флажок Показать обращение по умолчанию.
Порт вывода с меткой default:добавляется в блок. Этот порт посылает сигнал действия, если не выбраны другие варианты.
Добавьте три блока подсистемы действия варианта коммутатора.
Эти блоки являются блоками подсистемы с блоком порта действия. При размещении блока «Порт действия» внутри подсистемы к блоку добавляется входной порт с именем «Действие».
Подключите каждый выходной порт из блока «Switch Case» к порту действия блока «Switch Case Action Subsystem».
При установлении соединения значок блока «Switch Case Action Subsystem» переименовывается в тип присоединенного к нему выражения.
В каждом блоке Switch Case Action Subsystem введите блоки Simulink, которые должны выполняться для обрабатываемого им случая.
Запустите моделирование.
Линии сигналов действий между блоком «Вариант переключения» и блоками «Вариант переключения» изменяются с сплошной на пунктирную линию.
Примечание
После выполнения подсистемы для конкретного случая подразумеваемый разрыв завершает выполнение блока варианта коммутатора. Блоки Simulink Switch Case не демонстрируют поведение C через падение switch заявления.