Подсистема потока управления выполняется один или несколько раз на шаге текущего времени, когда включено блоком потока управления. Блок потока управления реализует управляющую логику, подобную выраженному операторами управления языков программирования (например, if-then
, while-do
, switch
и for
).
Можно использовать блок-схемы, чтобы смоделировать логику потока управления, эквивалентную следующим операторам языка программирования C:
for
if-else
switch
while
Можно использовать следующие блоки, чтобы выполнить условную логику потока управления.
C оператор | Эквивалентные блоки |
---|---|
| |
| Переключите случай, подсистему действия случая переключателя |
Следующая схема представляет поток управления if-else
.
Создайте схему потока управления if-else
можно следующим образом:
Предоставьте вводы данных Если блок для построения если еще условия.
В, Если диалоговое окно параметров блоков, набор вводит к Если блок. Внутренне, входные параметры определяются как u1, u2,..., un
и используются, чтобы создать выходные условия.
В, Если диалоговое окно параметров блоков, выходной порт набора, если еще условия для, Если блок.
В, Если диалоговое окно параметров блоков, Выходные порты набора. Используйте входные значения u1, u2, ..., un
, чтобы выразить условия для если, elseif, и еще поля условия в диалоговом окне. Из них, только, если поле требуется. Можно ввести несколько elseif условий и установить флажок еще, чтобы включить условие.
Соедините каждый выходной порт условия с подсистемой Действия.
Соедините каждого, если, elseif, и еще выходной порт условия на, Если блок к подсистеме, которая будет выполняться, если случай порта верен.
Создайте эти подсистемы путем размещения Блокировки порта Действия в подсистему. Это создает атомарную подсистему Действия с портом под названием Действие, которое вы затем соединяете с условием на Если блок.
После того, как соединенный, подсистема берет идентичность условия, с которым это соединяется и ведет себя как активированная подсистема.
Для более подробной информации смотрите Если и Блокировки порта Действия.
Все блоки в подсистеме Действия, управляемой, Если или Switch Case блок должен запуститься на том же уровне как ведущий блок.
Следующая схема представляет поток управления switch
.
Создайте оператор управления switch
можно следующим образом:
Предоставьте ввод данных входу аргумента блока Switch Case.
Вход к блоку Switch Case является аргументом к оператору управления switch
. Это значение определяет соответствующий случай, чтобы выполниться. Входные параметры нецелого числа к этому порту являются усеченными.
Добавьте случаи в блок Switch Case на основе числового значения входа аргумента.
Используя диалоговое окно параметров блока Switch Case, добавьте случаи в блок Switch Case. Случаи могут быть одним или многозначными. Можно также добавить дополнительный случай по умолчанию, который верен, если никакие другие случаи не верны. После того, как добавленный, эти случаи появляются как выходные порты на блоке Switch Case.
Соедините каждый выходной порт случая блока Switch Case с подсистемой Действия.
Каждый вывод случая блока Switch Case соединяется с подсистемой, которая будет выполняться, если случай порта верен. Вы создаете эти подсистемы путем размещения Блокировки порта Действия в подсистему. Это создает атомарную подсистему с портом под названием Действие, которое вы затем соединяете с условием на блоке Switch Case. После того, как соединенный, подсистема берет идентичность условия и ведет себя как активированная подсистема. Поместите все блочное программирование, выполняемое для того случая в этой подсистеме.
Для более подробной информации см. документацию для Блокировок порта Случая и Действия Переключателя.
После того, как подсистема для конкретной ситуации выполняется, подразумеваемый пропуск выполняется, который выходит из оператора управления switch
в целом. Реализации оператора управления Simulink® switch
не показывают “падение” через поведение операторов C switch
.
Используйте следующие блоки, чтобы выполнить циклы for
и while
.
C оператор | Эквивалентные блоки |
---|---|
| |
| |
|
Следующая схема иллюстрирует цикл while
.
В этом примере Simulink неоднократно выполняет содержимое, В то время как подсистема на каждом временном шаге до условия, заданного, В то время как блок Iterator удовлетворен. В частности, для каждой итерации цикла, заданного, В то время как блок Iterator, Simulink вызывает методы обновления и вывода всех блоков в, В то время как подсистема в том же порядке, что методы были бы вызваны, если бы они были в невыполненной с помощью итераций атомарной подсистеме.
Время симуляции не совершенствуется во время выполнения некоторое время итераций подсистемы. Тем не менее, блоки в некоторое время обработке подсистемы каждая итерация как временной шаг. В результате в некоторое время подсистеме, выводе блока с состояниями (то есть, блок, вывод которого зависит от своего предыдущего входа), отражает значение его входа в предыдущей итерации цикла while
. Вывод не отражает, что вход блока в предыдущем времени симуляции продвигается. Например, блок Unit Delay в некоторое время подсистеме выводит значение своего входа в предыдущей итерации цикла while
, не значение на предыдущем шаге времени симуляции.
Создайте цикл while
можно следующим образом:
Поместите некоторое время блок Iterator в подсистему.
Подсистема хоста маркирует изменения в while {...}
, чтобы указать, что это моделирует некоторое время цикл. Эти подсистемы ведут себя как инициированные подсистемы. Эта подсистема является хостом блочного программирования, которого вы хотите выполнить итерации с В то время как блок Iterator.
Обеспечьте ввод данных для начального порта ввода данных условия В то время как блок Iterator.
Блок While Iterator требует начального ввода данных условия (маркировал IC
) для его первой итерации. Это должно произойти вне В то время как подсистема. Если это значение является ненулевым, первая итерация происходит.
Обеспечьте ввод данных для порта условий В то время как блок Iterator.
Условия для остающихся итераций передаются порту ввода данных, маркировал cond
. Вход для этого порта должен произойти в В то время как подсистема.
(Необязательно) Набор, В то время как блок Iterator, чтобы вывести его значение итератора через его диалоговое окно свойств.
Значение итератора 1 для первой итерации и постепенно увеличивается 1 для каждой последующей итерации.
(Необязательно) Изменение итерация, В то время как блок Iterator к
do-while
через его диалоговое окно свойств.
Это изменяет метку подсистемы хоста к do {...} while
. С итерацией do-while
, В то время как блок Iteration больше не имеет порт начального условия (IC), потому что все блоки в подсистеме выполняются однажды порт условия (маркировал cond
) проверяется.
Создайте блок-схему в подсистеме, которая задает выходные параметры подсистемы.
Схема не должна содержать блоки с непрерывными состояниями (например, блоки от Непрерывной библиотеки блоков). Шаги расчета всех блоков должны быть или наследованы (-1
) или постоянный (inf)
.
Для получения дополнительной информации смотрите В то время как блок Iterator.
Следующая схема представляет цикл for
:
В этом примере Simulink выполняет содержимое В течение времен множителей подсистемы на каждом временном шаге. Вход к блоку For Iterator задает количество итераций. Для каждой итерации цикла for
Simulink вызывает методы обновления и вывода всех блоков в Для подсистемы в том же порядке, что это вызывает методы, если они находятся в невыполненной с помощью итераций атомарной подсистеме.
Время симуляции не совершенствуется во время выполнения Для итераций подсистемы. Тем не менее, блоки в Для подсистемы обрабатывают каждую итерацию как временной шаг. В результате в Для подсистемы, вывод блока с состояниями (то есть, блок, вывод которого зависит от своего предыдущего входа) отражает значение своего входа в предыдущей итерации цикла for
. Вывод не отражает, что вход блока в предыдущем времени симуляции продвигается. Например, блок Unit Delay в Для подсистемы выводит значение своего входа в предыдущей итерации цикла for
, не значение на предыдущем шаге времени симуляции.
Создайте цикл for
можно следующим образом:
Перетащите Для блока Subsystem Итератора из окна Library Browser или Library в вашу модель.
(Необязательно) Устанавливает блок For Iterator, чтобы взять внешний или внутренний вход для количества итераций, которые это выполняет.
Через диалоговое окно свойств блока For Iterator можно установить его брать вход для количества итераций через порт, маркировал N
. Этот вход должен прийти снаружи Для Подсистемы Итератора.
Можно также определить номер итераций непосредственно в диалоговом окне свойств.
(Необязательно) Набор блок For Iterator, чтобы вывести его значение итератора для использования в блочном программировании Для Подсистемы Итератора.
Значение итератора 1 для первой итерации и постепенно увеличивается 1 для каждой последующей итерации.
Создайте блок-схему в подсистеме, которая задает выходные параметры подсистемы.
Схема не должна содержать блоки с непрерывными состояниями (например, блоки от Непрерывной библиотеки блоков). Шаги расчета всех блоков должны быть или наследованы (-1
) или постоянный (inf)
.
Для кладки блоков Итератора хорошо с блоком 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.
“()” Присвоение | Для итератора | Для подсистемы итератора | В то время как итератор | В то время как подсистема итератора | В то время как подсистема итератора