Подсистемы итератора, такой как, В то время как Итератор и Для подсистем Итератора, являются типом логически выполняемой подсистемы, которая выполняется один или несколько раз во время временного шага в ответ на блок управления, внутренний с блоком подсистемы. Блок управления реализует управляющую логику, похожую на описанный построением языка программирования, таким как while
цикл или for
цикл.
Для получения информации о Для Каждой подсистемы, какие входные сигналы разделов или параметры маски в отдельные элементы или подрешетки и применяют алгоритм к каждому, видят Каждую Подсистему.
Примечание
While Iterator Subsystem и блоки For Iterator Subsystem не должны содержать блоки с непрерывными состояниями (например, блоки из Непрерывной библиотеки блоков). Шаги расчета всех блоков в подсистеме должны быть или наследованы (-1
) или постоянный (inf)
.
Блок While Iterator Subsystem является блоком Subsystem, предварительно сконфигурированным как начальная точка для создания подсистемы, которая повторяет выполнение во время шага времени симуляции, в то время как логическое (булево) выражение верно.
Откройте модель ex_while_iterator_block
.
Вход 1
TRUE
) к While Iterator блок активирует подсистему. На каждом временном шаге текущий итеративный номер добавляется к рабочему общему количеству, пока максимальная сумма не достигнута.
В то время как структура в модели может быть представлена следующим псевдо кодом.
maximum_sum = 10 sum = 0 iteration_number = 1 condition = TRUE WHILE (condition is TRUE) AND (iteration_number <= maximum_iterations) sum = sum + iteration_number IF (sum > maximum_sum) THEN condition = FALSE END IF iteration_number = iteration_number + 1 END WHILE
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите блок While Iterator Subsystem в Simulink® Редактор. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните блок While Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите Maximum number of iterations на 20
и States when starting к reset
. Установите флажок порта Show iteration number.
Добавьте Memory, Relational Operator и блоки Sum. Соедините блоки как показано. Для блока Memory установите флажок Inherit sample time.
Номер итерации от выхода блока While Iterator добавляется к своему предыдущему значению, пока сумма не больше или равна максимальной сумме от блока 1 Inport.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 2. Этот блок вводит начальное логическое значение условия для блока While Iterator. Установите Constant value на любой ненулевой номер.
Блок While Iterator требует начального логического условия (входной порт пометил IC
) для его первой итерации. Этот сигнал включает блок While Iterator Subsystem и должен произойти снаружи подсистемы. Если это значение является ненулевым, первая итерация происходит.
Соедините второй блок Constant с входным портом 1. Этот блок вводит максимальное значение для итеративного алгоритма. Алгоритм добавляет последовательные целые числа, пока максимальное значение не достигнуто.
Соедините блок Display с выходным портом 1. Этот блок показывает количество итераций от выходного порта блока While Iterator.
Запустите симуляцию.
Во время одного временного шага первые четыре числа итерации добавляются для полной суммы (10
). С пятой итерацией, сумма (15
) больше максимальной суммы (10
), остановка итераций и блок ожидают следующего временного шага.
Примечание
Время симуляции не совершенствуется во время итеративного выполнения блока While Iterator Subsystem. Тем не менее, блоки в подсистеме обрабатывают каждую итерацию как временной шаг. В результате в блоке While Iterator Subsystem, выходе блока с состояниями (то есть, блок, выход которого зависит от своего предыдущего входа), отражает значение его входа в предыдущей итерации while
цикл. Выход не отражает, что блок ввел на предыдущем шаге времени симуляции. Например, блок Unit Delay в некоторое время подсистеме Итератора выводит значение своего входа в предыдущей итерации while
цикл, не значение на предыдущем шаге времени симуляции.
Блок For Iterator Subsystem является блоком Subsystem, предварительно сконфигурированным как начальная точка для создания подсистемы, которая повторяет выполнение во время шага времени симуляции для конкретного количества итераций.
Откройте модель ex_for_iterator_block
.
Вход с блоком For Iterator задает количество итераций. На каждом временном шаге текущий итеративный номер добавляется к рабочему общему количеству для 5
итерации.
Для структуры в модели может быть представлен следующим псевдо кодом.
number_of_iterations = 5 sum = 0 FOR iteration_number = 1 TO number_of_iterations sum = sum + iteration_number END FOR
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите блок For Iterator Subsystem в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните блок For Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите States when starting на reset
и Iteration limit source к external
.
Добавьте Memory, Sum и блоки Outport. Соедините блоки как показано. Для блока Memory установите флажок Inherit sample time.
Номер итерации от выхода блока For Iterator добавляется к своему предыдущему значению для конкретного количества итераций от блока 1 Inport.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 1. Этот блок обеспечивает количество итераций для блока For Iterator. Установите Constant value на 5
.
Соедините блоки Display с выходными портами 1 и 2. Эти блоки показывают количество итераций от выходного порта блока For Iterator и суммы от блока Memory.
Запустите симуляцию.
Во время каждого временного шага первые пять чисел итерации добавляются для полной суммы (15
).
Кладка блоков For Iterator хорошо с блоком Assignment, чтобы повторно присвоить значения в векторе или матрице. Следующий пример показывает использование блока For Iterator. Отметьте матричные размерности в передаваемых данных.
Пример выводит значение синуса входа 2 5 матрица (2 строки, 5 столбцов) использование Для подсистемы Итератора, содержащей блок Assignment. Процесс следующие.
2 5 матрица вводится с блоком Selector и блоком Assignment.
Selector блокирует полосы 2 1 матрица из входной матрицы в значении столбца, обозначенном текущим значением итерации блока For Iterator.
Синус 2 1 матрицы взят.
Значение синуса 2 1 матрица передается блоку Assignment.
Блок Assignment, который берет оригинал 2 5 матрица как одни из ее входных параметров, присваивает 2 1 матрица назад в исходную матрицу в местоположении столбца, обозначенном значением итерации.
Обратите внимание на то, что блок Assignment копирует первый вход (Y0) в выход (Y) только на первой итерации. Значение второго входа (U) копируется в выход на первом и каждой последующей итерации. Все эти операции происходят во время одного временного шага.
Строки, заданные для переназначения в диалоговом окне параметра для блока Assignment в примере, [1,2]. Поскольку существует только две строки в исходной матрице, вы, возможно, также задали-1 для строк (то есть, всех строк).
Примечание
Блок Trigonometric Function уже способен к взятию синуса матрицы. Пример использует блок Trigonometric Function только в качестве примера для изменения каждого элемента матрицы с сотрудничеством блока Assignment и блока For Iterator.