Логически выполняемый блок подсистемы запускается один или несколько раз на шаге текущего времени, когда включено блоком управления. Блок управления реализует управляющую логику, подобную выраженному оператором языка программирования (e. g., если затем, переключатель, в то время как, для).
Подсистемы итератора являются одним типом логически выполняемой подсистемы, которые выполняются один или несколько раз во время временного шага в ответ на блок управления, внутренний к блоку подсистемы.
В то время как Подсистема Итератора и Для блоков Подсистемы Итератора не должна содержать блоки с непрерывными состояниями (например, блоки от Непрерывной библиотеки блоков). Частоты дискретизации всех блоков в подсистеме должны быть или наследованы (-1
) или постоянный (inf)
.
Блок While Iterator 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
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите некоторое время блок Iterator Subsystem в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните В то время как блок Iterator, чтобы открыть его блочное диалоговое окно параметров. Определите Максимальный номер итераций к 20
и состояниям при запуске к reset
. Установите флажок порта номера итерации Show.
Дополнительная память, Оператор отношения и блоки Суммы. Соедините блоки как показано. Для Блока памяти установите флажок частоты дискретизации Inherit.
Номер итерации от вывода, В то время как блок Iterator добавляется к его предыдущему значению до суммы, больше или равен максимальной сумме от блока Inport 1.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 2. Этот блок обеспечивает начальное логическое значение условия для В то время как блок Iterator. Установите Постоянное значение к любому ненулевому номеру.
Блок While Iterator требует начального логического условия (входной порт маркировал IC
) для его первой итерации. Этот сигнал включает, В то время как блок Iterator Subsystem и должен произойти снаружи подсистемы. Если это значение является ненулевым, первая итерация происходит.
Соедините второй блок Constant с входным портом 1. Этот блок обеспечивает максимальное значение для итеративного алгоритма. Алгоритм добавляет последовательные целые числа, пока максимальное значение не достигнуто.
Соедините блок Display с выходным портом 1. Этот блок показывает количество итераций от В то время как выходной порт блока Integrator.
Запустите моделирование.
Во время единственного временного шага первые четыре числа итерации добавляются для полной суммы (10
). С пятой итерацией сумма (15
) больше, чем максимальная сумма (10
), остановка итераций, и блок ожидает следующего временного шага.
Время симуляции не совершенствуется во время итеративного выполнения некоторое время блока Iteration Subsystem. Тем не менее, блоки в подсистеме обрабатывают каждую итерацию как временной шаг. В результате в некоторое время блоке Iterator Subsystem, выводе блока с состояниями (то есть, блок, вывод которого зависит от своего предыдущего входного параметра), отражает значение его входного параметра в предыдущей итерации цикла while
. Вывод не отражает, что блок ввел на предыдущем шаге времени симуляции. Например, блок Unit Delay в некоторое время подсистеме выводит значение своего входного параметра в предыдущей итерации цикла while
, не значение на предыдущем шаге времени симуляции.
Блок For Iterator 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
Чтобы создать модель в качестве примера, используйте следующую процедуру.
Поместите блок For Iterator Subsystem в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.
Дважды кликните блок For Iterator, чтобы открыть его блочное диалоговое окно параметров. Установите состояния при запуске к reset
и источнике предела Итерации к external
.
Дополнительная память, Сумма и блоки Выходного порта. Соедините блоки как показано. Для Блока памяти установите флажок частоты дискретизации Inherit.
Номер итерации от вывода блока For Iterator добавляется к его предыдущему значению для конкретного количества итераций от блока Inport 1.
Перейдите к верхнему уровню модели.
Соедините блок Constant с входным портом 1. Этот блок обеспечивает количество итераций для блока For Iterator. Установите Постоянное значение к 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.