Логически исполняемый блок подсистемы работает один или более раз на текущем шаге времени, когда активируется блоком управления. Блок управления реализует логику управления, аналогичную той, которая выражается оператором языка программирования (например, if-then, switch, while, for).
Подсистемы итератора представляют собой один тип логически исполняемой подсистемы, которые выполняются один или более раз в течение временного шага в ответ на блок управления, внутренний для блока подсистемы.
Примечание
Блоки While Iterator Subsystem и For Iterator Subsystem не должны содержать блоки с непрерывными состояниями (например, блоки из библиотеки блоков Continuous). Время выборки всех блоков в подсистеме должно быть либо наследуемым (-1) или константа (inf).
Блок While Iterator Subsystem является блоком Subsystem, предварительно настроенным в качестве начальной точки для создания подсистемы, которая повторяет выполнение во время временного шага моделирования, в то время как логическое (логическое) выражение является истинным.
Рассмотрим следующую модель. Сведения об открытии модели см. в разделе ex_while_iterator_block.

Вход 1 (true) к блоку While Iterator активизирует подсистему. На каждом шаге времени текущее итеративное число добавляется к текущей сумме до тех пор, пока не будет достигнута максимальная сумма.
Структура while в модели может быть представлена следующим псевдокодом.
maximum_sum = 10; sum = 0; iteration_number = 0 condition = (maximum_sum > 0) WHILE condition NOT EQUAL 0 iteration_number = iteration_number + 1 sum = sum + iteration_number IF (sum > maximum_sum OR iteration_number > maximum_iterations) THEN condition = 0 END WHILE
Чтобы создать пример модели, выполните следующие действия.
Поместите блок подсистемы итератора в редактор Simulink ®. Дважды щелкните блок подсистемы, чтобы отобразить его содержимое.

Дважды щелкните блок «Итератор», чтобы открыть диалоговое окно параметров блока. Задайте для параметра Максимальное число итераций значение 20 и государств при начале reset. Установите флажок Показать порт номера итерации.
Добавьте блоки «Память», «Реляционный оператор» и «Сумма». Соедините блоки, как показано на рисунке. Для блока «Память» установите флажок «Наследовать время образца».

Номер итерации с выхода блока Итератор (While Iterator) добавляется к его предыдущему значению до тех пор, пока сумма не будет больше или равна максимальной сумме из блока 1 ввода.
Перейдите на верхний уровень модели.
Подключите блок константы к входному порту 2. Этот блок предоставляет начальное значение логического условия для блока While Iterator. Установите для значения Константа (Constant) любое ненулевое число.
Для блока итератора требуется начальное логическое условие (входной порт с меткой IC) для первой итерации. Этот сигнал включает блок While Iterator Subsystem и должен исходить извне подсистемы. Если это значение не равно нулю, выполняется первая итерация.
Подключите второй блок константы к входному порту 1. Этот блок обеспечивает максимальное значение для итеративного алгоритма. Алгоритм добавляет последовательные целые числа до тех пор, пока не будет достигнуто максимальное значение.
Подключите блок отображения к порту вывода 1. Этот блок показывает количество итераций выходного порта блока While Integrator.
Запустите моделирование.
В течение одного временного шага первые четыре числа итераций добавляются к общей сумме (10). При пятой итерации сумма (15) больше максимальной суммы (10), итерации прекращаются, и блок ожидает следующего временного шага.
Примечание
Время моделирования не увеличивается во время итеративного выполнения блока While Iteration Subsystem. Тем не менее, блоки в подсистеме рассматривают каждую итерацию как временной шаг. В результате в блоке While Iterator Subsystem выход блока с состояниями (то есть блока, выход которого зависит от его предыдущего входа) отражает значение его входа при предыдущей итерации while цикл. Выходные данные не отражают блок, введенный на предыдущем этапе моделирования. Например, блок единичной задержки в подсистеме While выводит значение своего входа при предыдущей итерации while цикл, а не значение на предыдущем шаге времени моделирования.
Блок For Iterator Subsystem является блоком Subsystem, предварительно сконфигурированным в качестве начальной точки для создания подсистемы, которая повторяет выполнение во время временного шага моделирования для указанного количества итераций.
Рассмотрим следующую модель. Сведения об открытии модели см. в разделе ex_for_iterator_block.

На входе в блок «Для итератора» указывается количество итераций. На каждом шаге времени текущее итеративное число добавляется к текущей сумме для 5 итерации.
Для структуры в модели может быть представлен следующий псевдокод.
number_of_iterations = 5
sum = 0;
iteration_number = 0
FOR iteration_number = 0 TO number_of_iterations
iteration_number = iteration_number + 1
sum = sum + iteration_number
END FOR
Чтобы создать пример модели, выполните следующие действия.
Поместите блок «Для подсистемы итератора» в редактор Simulink. Дважды щелкните блок подсистемы, чтобы отобразить его содержимое.

Дважды щелкните блок «Для итератора», чтобы открыть диалоговое окно параметров блока. Задать состояния при запуске в reset и источник ограничения итерации external.
Добавьте блоки «Память», «Сумма» и «Исходящий». Соедините блоки, как показано на рисунке. Для блока «Память» установите флажок «Наследовать время образца».

Номер итерации из вывода блока для итератора добавляется к его предыдущему значению для указанного количества итераций из блока 1 ввода.
Перейдите на верхний уровень модели.
Подключите блок константы к входному порту 1. Этот блок предоставляет количество итераций для блока для итератора. Задайте значение константы как 5.
Подключите блоки отображения к портам вывода 1 и 2. Эти блоки показывают количество итераций из выходного порта блока для интегратора и сумму из блока памяти.
Запустите моделирование.
В течение каждого временного шага первые пять чисел итерации добавляются к общей сумме (15).
Блок For Iterator хорошо работает с блоком Assignment для переназначения значений в векторе или матрице. В следующем примере показано использование блока для итератора. Обратите внимание на размеры матрицы в передаваемых данных.


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