Блок logically executed subsystem запускается один или несколько раз в текущий временной шаг, когда включен control block. Блок управления реализует логику управления, подобную той, которая выражена оператором языка программирования (например, если-то, switch, while, for).
Селекторные подсистемы являются одним из типов логически выполненных подсистем, которые выполняются один раз в течение временного шага в ответ на сигнал действия от блока управления, расположенного вне подсистемы. Simulink® поддерживает две структуры подсистемы селектора, if-else и switch-case.
Блок If Action Subsystem является блоком Subsystem, предварительно сконфигурированным как начальная точка для создания подсистемы, выполнение которой разрешено блоком If.
Блок внешнего If управляет выполнением. Блок If оценивает логическое выражение и затем, в зависимости от результата оценки, выводит сигнал действия в блок If Action Subsystem.
Рассмотрим следующую модель. Чтобы открыть модель, смотрите ex_if_block
.
В этой модели входы в блок If обеспечивают значения для логических выражений, представленных в качестве выходных портов. Каждый выходной порт присоединен к блоку If Action Subsystem. Выражения в блоке If оцениваются верхней частью вниз, начиная с if
выражение. Когда выражение вычисляется как true, его соответствующее If Action Subsystem выполняется, а остальные выражения не вычисляются.
Структура 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
.
В If expression текстовом поле введите u1 > 0
.
Порт выхода добавляется к блоку с меткой if(u1 > 0)
. Этот порт является единственным необходимым выходом для блока If.
В Elseif expressions текстовом поле введите u2 > 0
.
Можно ввести несколько выражений elseif с запятыми, разделяющими выражения. Каждое выражение добавляет к блоку выхода порт с меткой формы If elseif(expression)
.
Установите флажок Show else condition.
Порт выхода добавляется к блоку с меткой else
.
Добавьте три блока If Action Subsystem.
Эти блоки являются Subsystem блоками с блоком Action Port. Когда вы помещаете Action Port блок в подсистему, к блоку добавляется вход порт с именем Action.
Соедините каждый выходной порт из блока If с операционным портом блока If Action Subsystem.
При соединении значок блока If Action Subsystem переименовывается в тип выражений, присоединенных к нему.
В каждом блоке If Action Subsystem введите блоки Simulink, которые будут выполнены для условия, которое он обрабатывает.
Соедините выходы из блоков If Action Subsystem с блоком Merge.
Запустите симуляцию.
Линии сигнала действия между блоком If и блоками If Action Subsystem изменяются с твердого тела на штриховую линию.
Примечание
Все блоки в If Action Subsystem блоке, управляемые блоком If, должны запускаться с той же скоростью, что и ведущий блок.
Блок Switch Case Action Subsystem является блоком Subsystem, предварительно сконфигурированным как начальная точка для создания подсистемы, выполнение которой разрешено блоком Switch Case.
Блок внешнего Switch Case управляет выполнением. Блок Switch Case оценивает индекс случая и затем, в зависимости от выбранного случая, выводит сигнал действия в блок Switch Case Action Subsystem.
Рассмотрим следующую модель со структурой switch. Чтобы открыть модель, смотрите ex_switch_case_block
.
В этой модели вход в блок Switch Case обеспечивает значение индекса для выбора случая, представленного как выходные порты. Каждый выходной порт присоединен к блоку If Action Subsystem. Когда выбран случай, выполняется его соответствующий If Action Subsystem.
Структура switch в модели может быть представлена следующими псевдослучайными кодами.
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. Дважды кликните блок, чтобы открыть диалоговое окно параметров блоков.
В Case conditions поле введите {1, [2,3]}
.
Определены два случая. Первый случай, когда входное значение 1
и второй случай, когда входное значение 2
или 3
. Случаи могут быть одинарными или многозначными и отображаться как выходные порты на блоке Switch Case. Нецелочисленные входные значения обрезаются до целых чисел.
Установите флажок Show default case.
Порт выхода с меткой default:
добавляется к блоку. Этот порт отправляет сигнал действия, если другие случаи не выбраны.
Добавьте три блока Switch Case Action Subsystem.
Эти блоки являются Subsystem блоками с блоком Action Port. Когда вы помещаете Action Port блок в подсистему, к блоку добавляется вход порт с именем Action.
Соедините каждый выходной порт из блока Switch Case с операционным портом блока Switch Case Action Subsystem.
При соединении значок блока Switch Case Action Subsystem переименовывается в тип выражений, присоединенных к нему.
В каждом блоке Switch Case Action Subsystem введите блоки Simulink, которые будут выполнены для случая, который он обрабатывает.
Запустите симуляцию.
Линии сигнала действия между блоком Switch Case и блоками Switch Case Action Subsystem изменяются с твердого тела на штриховую линию.
Примечание
После выполнения подсистемы для конкретной ситуации подразумеваемый пропуск прекращает выполнение блока Switch Case. Блоки Switch Case Simulink не показывают падающее поведение C switch
операторы.