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

Блок logically executed subsystem запускается один или несколько раз на шаге текущего времени, когда включено control block. Блок управления реализует управляющую логику, похожую на выраженный оператором языка программирования (например, если затем, переключатель, в то время как, для).

Подсистемы итератора являются одним типом логически выполняемой подсистемы, которые выполняются один или несколько раз во время временного шага в ответ на блок управления, внутренний с блоком подсистемы.

Примечание

While Iterator Subsystem и блоки For Iterator Subsystem не должны содержать блоки с непрерывными состояниями (например, блоки из Непрерывной библиотеки блоков). Шаги расчета всех блоков в подсистеме должны быть или наследованы (-1) или постоянный (inf).

Модели, с в то время как структуры

Блок While Iterator Subsystem является блоком Subsystem, предварительно сконфигурированным как начальная точка для создания подсистемы, которая повторяет выполнение во время шага времени симуляции, в то время как логическое (булево) выражение верно.

Рассмотрите следующую модель.

Вход 1 TRUE) к While 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. Поместите блок While Iterator Subsystem в Редактор Simulink. Дважды кликните блок подсистемы, чтобы отобразить его содержимое.

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

  3. Добавьте Memory, Relational Operator и блоки Sum. Соедините блоки как показано. Для блока Memory установите флажок Inherit sample time.

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

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

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

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

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

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

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

    Во время одного временного шага первые четыре числа итерации добавляются для полной суммы (10). С пятой итерацией, сумма (15) больше максимальной суммы (10), остановка итераций и блок ожидают следующего временного шага.

Примечание

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

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

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

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

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

  3. Добавьте Memory, Sum и блоки Outport. Соедините блоки как показано. Для блока Memory установите флажок Inherit sample time.

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

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

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

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

  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.

Примеры модели

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

Блоки