Подсистема потока управления выполняет один или более раз на текущем временном шаге, когда это разрешено блоком потока управления. Блок потока управления реализует логику управления, аналогичную той, которая выражается операторами потока управления языков программирования (например, if-then, while-do, switch, и for).
Можно использовать блок-схемы для моделирования логики управления потоком, эквивалентной следующим операторам языка программирования C:
for
if-else
switch
while
Для выполнения логики потока условного управления можно использовать следующие блоки.
| Заявление C | Эквивалентные блоки |
|---|---|
| |
|
Следующая диаграмма представляет if-else управление потоком.

Построение if-else блок-схема управления:
Введите данные в блок If для создания условий if-else.
В диалоговом окне «Параметры блока» задайте входные данные для блока «Если». Внутренние входы обозначены как u1, u2,..., un и используются для построения выходных условий.
В диалоговом окне «Параметры блока If» задайте для блока «If» условия «If» для порта вывода.
В диалоговом окне Параметры блока (If block parameters) задайте Порты вывода (Output ports). Использовать входные значения u1, u2, ..., un для выражения условий для полей if, elseif и else в диалоговом окне. Из них требуется только поле if. Можно ввести несколько условий elseif и установить флажок, чтобы включить условие elseif.
Подключите каждый выходной порт условия к подсистеме действия.
Подключите каждый выходной порт if, elseif и в противном случае условие в блоке If к подсистеме, которая должна быть выполнена, если регистр порта равен true.
Создайте эти подсистемы, поместив блок порта действия в подсистему. При этом создается атомарная подсистема Action с портом Action, который затем подключается к условию в блоке If.
После подключения подсистема получает идентификатор состояния, к которому она подключена, и ведет себя как включенная подсистема.
Для получения дополнительной информации см. блоки If и Action Port.
Примечание
Все блоки в подсистеме Action, управляемой блоком If или Switch Case, должны работать с той же скоростью, что и управляющий блок.
Следующая диаграмма представляет switch управление потоком.

Построить switch оператор потока управления следующим образом:
Введите данные на вход аргумента блока Switch Case.
Вход в блок Switch Case является аргументом для switch оператор потока управления. Это значение определяет подходящий случай для выполнения. Неинтегренные входы в этот порт усечены.
Добавьте варианты в блок Switch Case на основе числового значения входного аргумента.
С помощью диалогового окна параметров блока «Вариант переключения» добавьте варианты в блок «Вариант переключения». Варианты могут быть одиночными или многозначными. Можно также добавить дополнительный вариант по умолчанию, который имеет значение true, если другие варианты не имеют значения true. После добавления эти варианты отображаются как выходные порты в блоке «Switch Case».
Подключите каждый выходной порт блока вариантов коммутатора к подсистеме действий.
Каждый вариант выхода блока «Switch Case» подключается к подсистеме, которая должна выполняться, если вариант порта имеет значение true. Эти подсистемы создаются путем размещения блока порта действия в подсистеме. При этом создается атомарная подсистема с портом Action, который затем подключается к условию в блоке Switch Case. После подключения подсистема принимает идентификатор состояния и ведет себя как включенная подсистема. Поместите все блочное программирование, выполняемое для данного случая, в эту подсистему.
Для получения дополнительной информации см. документацию по блокам «Switch Case» и «Action Port».
Примечание
После выполнения подсистемы для конкретного случая выполняется подразумеваемый разрыв, который выходит из switch утверждение контрольного потока в целом. Симулинк
®switch реализации оператора управляющего потока не демонстрируют «сквозного» поведения C switch заявления.
Используйте следующие блоки для выполнения while и for петли.
| Заявление C | Эквивалентные блоки |
|---|---|
| |
| |
|
Следующая диаграмма иллюстрирует while цикл.

В этом примере Simulink многократно выполняет содержимое подсистемы While на каждом шаге времени до тех пор, пока не будет выполнено условие, заданное блоком While Iterator. В частности, для каждой итерации цикла, заданного блоком While Iterator, Simulink вызывает методы обновления и вывода всех блоков в подсистеме While в том же порядке, в котором эти методы вызывались бы, если бы они находились в неистерируемой атомной подсистеме.
Примечание
Время моделирования не увеличивается во время выполнения итераций подсистемы While. Тем не менее блоки в подсистеме While рассматривают каждую итерацию как шаг времени. В результате в подсистеме While выход блока с состояниями (то есть блока, выход которого зависит от его предыдущего входа) отражает значение его входа при предыдущей итерации while цикл. Выходные данные не отражают входные данные этого блока на предыдущем этапе моделирования. Например, блок единичной задержки в подсистеме While выводит значение своего входа при предыдущей итерации while цикл, а не значение на предыдущем шаге времени моделирования.
Построить while цикл следующим образом:
Поместите блок итератора в подсистему.
Метка подсистемы хоста изменяется на while {...}, чтобы указать, что он моделирует цикл while. Эти подсистемы ведут себя подобно запускаемым подсистемам. Эта подсистема является хостом блочного программирования, которое необходимо выполнить итерацией с блоком While Iterator.
Введите данные для порта ввода данных исходного условия блока While Iterator.
Для блока итератора требуется ввод исходных данных условия (с меткой IC) для первой итерации. Это должно происходить вне подсистемы While. Если это значение не равно нулю, выполняется первая итерация.
Введите данные для порта условий блока While Iterator.
Условия для оставшихся итераций передаются в порт ввода данных с меткой cond. Вход для этого порта должен исходить из подсистемы While.
(Необязательно) Задайте для блока «Итератор» вывод значения итератора через диалоговое окно свойств.
Значение итератора равно 1 для первой итерации и увеличивается на 1 для каждой последующей итерации.
(Необязательно) Измените итерацию блока итератора на do-while через диалоговое окно свойств.
При этом метка подсистемы хоста изменяется на do {...} while. С помощью do-while итерация, тогда как блок итерации больше не имеет начального порта условия (IC), потому что все блоки в подсистеме выполняются один раз перед портом условия (помечен cond) проверяется.
Создайте в подсистеме блок-схему, определяющую выходные данные подсистемы.
Примечание
Диаграмма не должна содержать блоки с непрерывными состояниями (например, блоки из библиотеки блоков Continuous). Время выборки всех блоков должно быть либо наследуемым (-1) или константа (inf).
Дополнительные сведения см. в разделе Блок итератора.
Следующая диаграмма представляет for цикл:

В этом примере Simulink выполняет содержимое подсистемы For многократно на каждом временном шаге. На входе в блок «Для итератора» указывается количество итераций. Для каждой итерации for loop, Simulink вызывает методы обновления и вывода всех блоков в подсистеме For в том же порядке, в котором она вызывает методы, если они находятся в неитерируемой атомной подсистеме.
Примечание
Время моделирования не увеличивается во время выполнения итераций подсистемы For. Тем не менее блоки в подсистеме For рассматривают каждую итерацию как шаг времени. В результате в подсистеме For выход блока со состояниями (то есть блока, выход которого зависит от его предыдущего входа) отражает значение его входа при предыдущей итерации for цикл. Выходные данные не отражают входные данные этого блока на предыдущем этапе моделирования. Например, блок единичной задержки в подсистеме For выводит значение своего входа при предыдущей итерации for цикл, а не значение на предыдущем шаге времени моделирования.
Построить for цикл следующим образом:
Перетащите в модель блок «Для подсистемы итератора» из окна «Браузер библиотеки» или «Библиотека».
(Необязательно) Задайте для блока «Для итератора» внешний или внутренний ввод количества выполняемых итераций.
В диалоговом окне свойств блока «Для итератора» можно задать его для ввода количества итераций через порт с меткой N. Эти входные данные должны поступать из внешней подсистемы итератора.
Можно также задать количество итераций непосредственно в диалоговом окне свойств.
(Необязательно) Установите блок «Для итератора» для вывода значения итератора для использования в блочном программировании подсистемы «Для итератора».
Значение итератора равно 1 для первой итерации и увеличивается на 1 для каждой последующей итерации.
Создайте в подсистеме блок-схему, определяющую выходные данные подсистемы.
Примечание
Диаграмма не должна содержать блоки с непрерывными состояниями (например, блоки из библиотеки блоков Continuous). Время выборки всех блоков должно быть либо наследуемым (-1) или константа (inf).
Блок For Iterator хорошо работает с блоком Assignment для переназначения значений в векторе или матрице. В следующем примере показано использование блока для итератора. Обратите внимание на размеры матрицы в передаваемых данных.


В приведенном выше примере выводится синусоидальное значение входной матрицы 2 на 5 (2 строки, 5 столбцов) с помощью подсистемы For, содержащей блок Assignment. Процесс выглядит следующим образом.
Матрица 2 на 5 вводится в блок селектора и блок назначения.
Блок селектора удаляет матрицу 2 на 1 из входной матрицы при значении столбца, указанном текущим значением итерации блока для итератора.
Синус матрицы 2 на 1 принимается.
Матрица с синусоидальным значением 2 на 1 передается блоку назначения.
Блок Назначение (Assignment), который принимает исходную матрицу 2 на 5 в качестве одного из своих входов, назначает матрицу 2 на 1 обратно в исходную матрицу в месте столбца, указанном значением итерации.
Строки, указанные для переназначения в диалоговом окне свойств для блока Assignment в приведенном выше примере, имеют значение [1,2]. Поскольку в исходной матрице только две строки, можно также указать -1 для строк (то есть всех строк).
Примечание
Тригонометрический функциональный блок уже способен принимать синус матрицы. В приведенном выше примере блок тригонометрической функции используется только в качестве примера изменения каждого элемента матрицы с помощью блока назначения и блока для итератора.
Назначение | Для итератора | Для итераторной подсистемы | Пока итератор | Подсистема итератора | Подсистема итератора