Блок logically executed subsystem запускается один или несколько раз на шаге текущего времени, когда включено control block. Блок управления реализует управляющую логику, подобную выраженному оператором языка программирования (например, если затем, переключатель, в то время как, для).
Подсистемы итератора являются одним типом логически выполняемой подсистемы, которые выполняются один или несколько раз во время временного шага в ответ на блок управления, внутренний к блоку подсистемы.
В то время как Подсистема Итератора и Для блоков Subsystem Итератора не должна содержать блоки с непрерывными состояниями (например, блоки от Непрерывной библиотеки блоков). Шаги расчета всех блоков в подсистеме должны быть или наследованы (-1
) или постоянный (inf)
.
В то время как блок Subsystem Итератора является блоком Subsystem, предварительно сконфигурированным как отправная точка для создания подсистемы, которая повторяет выполнение во время шага времени симуляции, в то время как логическое (булево) выражение верно.
Рассмотрите следующую модель.
Вход 1
(true
) к, В то время как блок Iterator активирует подсистему. На каждом временном шаге текущий итеративный номер добавляется к рабочему общему количеству, пока максимальная сумма не достигнута.
В то время как структура в модели может быть представлена со следующим псевдо кодом.
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
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите некоторое время блок Subsystem Итератора в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните В то время как блок Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите Maximum number of iterations на 20
и States when starting к reset
. Установите флажок порта Show iteration number.
Дополнительная память, Оператор отношения и блоки Суммы. Соедините блоки как показано. Для Блока памяти установите флажок Inherit sample time.
Номер итерации от вывода, В то время как блок Iterator добавляется к своему предыдущему значению до суммы, больше или равен максимальной сумме от блока 1 Inport.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 2. Этот блок обеспечивает начальное логическое значение условия для В то время как блок Iterator. Установите Constant value на любой ненулевой номер.
Блок While Iterator требует начального логического условия (входной порт маркировал IC
) для его первой итерации. Этот сигнал включает, В то время как блок Subsystem Итератора и должен произойти снаружи подсистемы. Если это значение является ненулевым, первая итерация происходит.
Соедините второй блок Constant с входным портом 1. Этот блок обеспечивает максимальное значение для итеративного алгоритма. Алгоритм добавляет последовательные целые числа, пока максимальное значение не достигнуто.
Соедините блок Display с выходным портом 1. Этот блок показывает количество итераций от В то время как выходной порт блока Integrator.
Запустите симуляцию.
Во время одного временного шага первые четыре числа итерации добавляются для полной суммы (10
). С пятой итерацией сумма (15
) больше, чем максимальная сумма (10
), остановка итераций, и блок ожидает следующего временного шага.
Время симуляции не совершенствуется во время итеративного выполнения некоторое время блока Subsystem Итерации. Тем не менее, блоки в подсистеме обрабатывают каждую итерацию как временной шаг. В результате в некоторое время блоке Subsystem Итератора, выводе блока с состояниями (то есть, блок, вывод которого зависит от своего предыдущего входа), отражает значение его входа в предыдущей итерации цикла while
. Вывод не отражает, что блок ввел на предыдущем шаге времени симуляции. Например, блок Unit Delay в некоторое время подсистеме выводит значение своего входа в предыдущей итерации цикла while
, не значение на предыдущем шаге времени симуляции.
Для блока Subsystem Итератора блок Subsystem, предварительно сконфигурированный как отправная точка для создания подсистемы, которая повторяет выполнение во время шага времени симуляции для конкретного количества итераций.
Рассмотрите следующую модель.
Вход к блоку For Iterator задает количество итераций. На каждом временном шаге текущий итеративный номер добавляется к рабочему общему количеству для итераций 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
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите Для блока Subsystem Итератора в Редакторе Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните блок For Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите States when starting на reset
и Iteration limit source к external
.
Дополнительная память, Сумма и блоки Выходного порта. Соедините блоки как показано. Для Блока памяти установите флажок Inherit sample time.
Номер итерации от вывода блока For Iterator добавляется к своему предыдущему значению для конкретного количества итераций от блока 1 Inport.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 1. Этот блок обеспечивает количество итераций для блока For Iterator. Установите Constant value на 5
.
Соедините блоки Отображения с выходными портами 1 и 2. Эти блоки показывают количество итераций от выходного порта блока For Integrator и суммы от Блока памяти.
Запустите симуляцию.
Во время каждого временного шага первые пять чисел итерации добавляются для полной суммы (15
).
Для кладки блоков Итератора хорошо с блоком Assignment, чтобы повторно присвоить значения в векторе или матрице. Следующий пример показывает использование блока For Iterator. Отметьте матричные размерности в передаваемых данных.
Пример выводит значение синуса входа 2 5 матрица (2 строки, 5 столбцов) использование Для подсистемы, содержащей блок Assignment. Процесс следующие.
2 5 матрица вводится к Селекторному блоку и блоку Assignment.
Селектор блокирует полосы 2 1 матрица из входной матрицы в значении столбца, обозначенном текущим значением итерации блока For Iterator.
Синус 2 1 матрицы взят.
Значение синуса 2 1 матрица передается блоку Assignment.
Блок Assignment, который берет оригинал 2 5 матрица как одни из ее входных параметров, присваивает 2 1 матрица назад в исходную матрицу в местоположении столбца, обозначенном значением итерации.
Строки, заданные для переназначения в диалоговом окне параметра для блока Assignment в примере, [1,2]. Поскольку существует только две строки в исходной матрице, вы, возможно, также задали-1 для строк (то есть, всех строк).
Блок Trigonometric Function уже способен к взятию синуса матрицы. Пример использует блок Trigonometric Function только в качестве примера для изменения каждого элемента матрицы с сотрудничеством блока Assignment и блока For Iterator.