Выполните итерации выполнения подсистемы

Блок 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

Создайте модель с в то время как структура

Чтобы создать модель в качестве примера, используйте следующую процедуру.

  1. Поместите некоторое время блок Subsystem Итератора в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.

  2. Дважды кликните В то время как блок Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите Maximum number of iterations на 20 и States when starting к reset. Установите флажок порта Show iteration number.

  3. Дополнительная память, Оператор отношения и блоки Суммы. Соедините блоки как показано. Для Блока памяти установите флажок Inherit sample time.

    Номер итерации от вывода, В то время как блок Iterator добавляется к своему предыдущему значению до суммы, больше или равен максимальной сумме от блока 1 Inport.

  4. Перейдите к верхнему уровню модели.

  5. Соедините блок Constant с входным портом 2. Этот блок обеспечивает начальное логическое значение условия для В то время как блок Iterator. Установите Constant value на любой ненулевой номер.

    Блок While Iterator требует начального логического условия (входной порт маркировал IC) для его первой итерации. Этот сигнал включает, В то время как блок Subsystem Итератора и должен произойти снаружи подсистемы. Если это значение является ненулевым, первая итерация происходит.

  6. Соедините второй блок Constant с входным портом 1. Этот блок обеспечивает максимальное значение для итеративного алгоритма. Алгоритм добавляет последовательные целые числа, пока максимальное значение не достигнуто.

  7. Соедините блок Display с выходным портом 1. Этот блок показывает количество итераций от В то время как выходной порт блока Integrator.

  8. Запустите симуляцию.

    Во время одного временного шага первые четыре числа итерации добавляются для полной суммы (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

Создайте модель с для структуры

Чтобы создать модель в качестве примера, используйте следующую процедуру.

  1. Поместите Для блока Subsystem Итератора в Редакторе Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.

  2. Дважды кликните блок For Iterator, чтобы открыть его диалоговое окно параметров блоков. Установите States when starting на reset и Iteration limit source к external.

  3. Дополнительная память, Сумма и блоки Выходного порта. Соедините блоки как показано. Для Блока памяти установите флажок Inherit sample time.

    Номер итерации от вывода блока For Iterator добавляется к своему предыдущему значению для конкретного количества итераций от блока 1 Inport.

  4. Перейдите к верхнему уровню модели.

  5. Соедините блок Constant с входным портом 1. Этот блок обеспечивает количество итераций для блока For Iterator. Установите Constant value на 5.

  6. Соедините блоки Отображения с выходными портами 1 и 2. Эти блоки показывают количество итераций от выходного порта блока For Integrator и суммы от Блока памяти.

  7. Запустите симуляцию.

    Во время каждого временного шага первые пять чисел итерации добавляются для полной суммы (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.

Образцовые примеры

Смотрите также

Блоки