Используйте логику потока управления

Что такое Подсистема Потока управления

Подсистема потока управления выполняется один или несколько раз на шаге текущего времени, когда включено блоком потока управления. Блок потока управления реализует управляющую логику, похожую на выраженный операторами управления языков программирования (например, if-then, while-do, switch, и for).

Эквивалентные операторы языка C

Можно использовать блок-схемы, чтобы смоделировать логику потока управления, эквивалентную следующим операторам языка программирования C:

  • for

  • if-else

  • switch

  • while

Условная логика потока управления

Можно использовать следующие блоки, чтобы выполнить условную логику потока управления.

C операторЭквивалентные блоки

if-else

If, If Action Subsystem

switch

Switch Case, Switch Case Action Subsystem

Если еще поток управления

Следующая схема представляет if-else поток управления.

Создайте if-else схема потока управления можно следующим образом:

  1. Предоставьте вводы данных Если блок для построения если еще условия.

    В, Если диалоговое окно параметров блоков, набор вводит к Если блок. Внутренне, входные параметры определяются как u1, u2,..., un и используются, чтобы создать выходные условия.

  2. В, Если диалоговое окно параметров блоков, выходной порт набора, если еще условия для, Если блок.

    В, Если диалоговое окно параметров блоков, Выходные порты набора. Используйте входные значения u1, u2, ..., un выражать условия для если, elseif, и еще поля условия в диалоговом окне. Из них, только, если поле требуется. Можно ввести несколько elseif условий и установить флажок еще, чтобы включить условие.

  3. Соедините каждый выходной порт условия с подсистемой Действия.

    Соедините каждого, если, elseif, и еще выходной порт условия на, Если блок к подсистеме, которая будет выполняться, если случай порта верен.

    Создайте эти подсистемы путем размещения Блокировки порта Действия в подсистему. Это создает атомарную подсистему Действия с портом под названием Действие, которое вы затем соединяете с условием на Если блок.

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

Для более подробной информации смотрите блоки Action Port и If.

Примечание

Все блоки в подсистеме Действия, управляемой блоком If или Switch Case, должны запуститься на том же уровне как ведущий блок.

Переключите поток управления

Следующая схема представляет switch поток управления.

Создайте switch оператор управления можно следующим образом:

  1. Предоставьте ввод данных входу аргумента блока Switch Case.

    Вход с блоком Switch Case является аргументом к switch оператор управления. Это значение определяет соответствующий случай, чтобы выполниться. Входные параметры нецелого числа к этому порту являются усеченными.

  2. Добавьте случаи в блок Switch Case на основе числового значения входа аргумента.

    Используя диалоговое окно параметров блока Switch Case, добавьте случаи в блок Switch Case. Случаи могут быть одним или многозначными. Можно также добавить дополнительный случай по умолчанию, который верен, если никакие другие случаи не верны. После того, как добавленный, эти случаи появляются как выходные порты на блоке Switch Case.

  3. Соедините каждый выходной порт случая блока Switch Case с подсистемой Действия.

    Каждый выход случая блока Switch Case соединяется с подсистемой, которая будет выполняться, если случай порта верен. Вы создаете эти подсистемы путем размещения Блокировки порта Действия в подсистему. Это создает атомарную подсистему с портом под названием Действие, которое вы затем соединяете с условием на блоке Switch Case. После того, как соединенный, подсистема берет идентичность условия и ведет себя как активированная подсистема. Поместите все блочное программирование, выполняемое для того случая в этой подсистеме.

Для более подробной информации см. документацию для блоков Action Port и Switch Case.

Примечание

После того, как подсистема для конкретной ситуации выполняется, подразумеваемый пропуск выполняется, который выходит из switch оператор управления в целом. Simulink® switch реализации оператора управления не показывают “падение” через поведение switch C операторы.

В то время как и циклы for

Используйте следующие блоки, чтобы выполнить while и for циклы.

C операторЭквивалентные блоки

do-while

While Iterator Subsystem

for

For Iterator Subsystem

while

While Iterator Subsystem

Циклы с условием продолжения

Следующая схема иллюстрирует while цикл.

В этом примере Simulink неоднократно выполняет содержимое, В то время как подсистема на каждом временном шаге до условия, заданного, В то время как блоку Iterator удовлетворяют. В частности, для каждой итерации цикла, заданного, В то время как блок Iterator, Simulink вызывает методы обновления и выхода всех блоков в, В то время как подсистема в том же порядке, что методы были бы вызваны, если бы они были в невыполненной с помощью итераций атомарной подсистеме.

Примечание

Время симуляции не совершенствуется во время выполнения некоторое время итераций подсистемы. Тем не менее, блоки в некоторое время обработке подсистемы каждая итерация как временной шаг. В результате в некоторое время подсистеме, выходе блока с состояниями (то есть, блок, выход которого зависит от своего предыдущего входа), отражает значение его входа в предыдущей итерации while цикл. Выход не отражает, что вход блока в предыдущем времени симуляции продвигается. Например, блок Unit Delay в некоторое время подсистеме выводит значение своего входа в предыдущей итерации while цикл, не значение на предыдущем шаге времени симуляции.

Создайте while цикл можно следующим образом:

  1. Поместите некоторое время блок Iterator в подсистему.

    Подсистема хоста помечает изменения в while {...}, указать, что это моделирует некоторое время цикл. Эти подсистемы ведут себя как инициированные подсистемы. Эта подсистема является хостом блочного программирования, которого вы хотите выполнить итерации с В то время как блок Iterator.

  2. Обеспечьте ввод данных для начального порта ввода данных условия В то время как блок Iterator.

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

  3. Обеспечьте ввод данных для порта условий В то время как блок Iterator.

    Условия для остающихся итераций передаются порту ввода данных, пометил cond. Вход для этого порта должен произойти в В то время как подсистема.

  4. (Необязательно) Набор, В то время как блок Iterator, чтобы вывести его значение итератора через его диалоговое окно свойств.

    Значение итератора 1 для первой итерации и постепенно увеличивается 1 для каждой последующей итерации.

  5. (Необязательно) Изменение итерация, В то время как блок Iterator к do-while через его диалоговое окно свойств.

    Это изменяет метку подсистемы хоста к do {...} while. С do-while итерация, В то время как блок Iteration больше не имеет порт начального условия (IC), потому что все блоки в подсистеме выполняются однажды порт условия (пометил cond) проверяется.

  6. Создайте блок-схему в подсистеме, которая задает выходные параметры подсистемы.

    Примечание

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

Для получения дополнительной информации смотрите блок While Iterator.

Моделирование циклов for

Следующая схема представляет for цикл:

В этом примере Simulink выполняет содержимое В течение времен множителей подсистемы на каждом временном шаге. Вход с блоком For Iterator задает количество итераций. Для каждой итерации for цикл, Simulink вызывает методы обновления и выхода всех блоков в Для подсистемы в том же порядке, что это вызывает методы, если они находятся в невыполненной с помощью итераций атомарной подсистеме.

Примечание

Время симуляции не совершенствуется во время выполнения Для итераций подсистемы. Тем не менее, блоки в Для подсистемы обрабатывают каждую итерацию как временной шаг. В результате в Для подсистемы, выход блока с состояниями (то есть, блок, выход которого зависит от своего предыдущего входа) отражает значение своего входа в предыдущей итерации for цикл. Выход не отражает, что вход блока в предыдущем времени симуляции продвигается. Например, блок Unit Delay в Для подсистемы выводит значение своего входа в предыдущей итерации for цикл, не значение на предыдущем шаге времени симуляции.

Создайте for цикл можно следующим образом:

  1. Перетащите Для блока Subsystem Итератора из окна Library Browser или Library в вашу модель.

  2. (Необязательно) Устанавливает блок For Iterator, чтобы взять внешний или внутренний вход для количества итераций, которые это выполняет.

    Через диалоговое окно свойств блока For Iterator можно установить его брать вход для количества итераций через порт, пометил N. Этот вход должен прийти снаружи Для Подсистемы Итератора.

    Можно также определить номер итераций непосредственно в диалоговом окне свойств.

  3. (Необязательно) Набор блок For Iterator, чтобы вывести его значение итератора для использования в блочном программировании Для Подсистемы Итератора.

    Значение итератора 1 для первой итерации и постепенно увеличивается 1 для каждой последующей итерации.

  4. Создайте блок-схему в подсистеме, которая задает выходные параметры подсистемы.

    Примечание

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

Для кладки блоков Итератора хорошо с блоком Assignment, чтобы повторно присвоить значения в векторе или матрице. Следующий пример показывает использование блока For Iterator. Отметьте матричные размерности в передаваемых данных.

Вышеупомянутый пример выводит значение синуса входа 2 5 матрица (2 строки, 5 столбцов) использование Для подсистемы, содержащей блок Assignment. Процесс следующие.

  1. 2 5 матрица вводится с Селекторным блоком и блоком Assignment.

  2. Селектор блокирует полосы 2 1 матрица из входной матрицы в значении столбца, обозначенном текущим значением итерации блока For Iterator.

  3. Синус 2 1 матрицы взят.

  4. Значение синуса 2 1 матрица передается блоку Assignment.

  5. Блок Assignment, который берет оригинал 2 5 матрица как одни из ее входных параметров, присваивает 2 1 матрица назад в исходную матрицу в местоположении столбца, обозначенном значением итерации.

    Строки, заданные для переназначения в диалоговом окне свойства для блока Assignment в вышеупомянутом примере, [1,2]. Поскольку существует только две строки в исходной матрице, вы, возможно, также задали-1 для строк, (то есть, всех строк).

    Примечание

    Блок Trigonometric Function уже способен к взятию синуса матрицы. Вышеупомянутый пример использует блок Trigonometric Function только в качестве примера изменения каждого элемента матрицы с сотрудничеством блока Assignment и блока For Iterator.

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

| | | | |