Управляйте и отобразите отсортированный порядок

Что сортируется порядок?

Во время фазы обновления симуляции Simulink® определяет порядок, в котором можно вызвать методы блока во время симуляции. Это упорядоченное расположение вызова блока является отсортированным порядком.

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

Примечание

Для получения дополнительной информации о методах блока и выполнении, см.:

Отобразите отсортированный порядок

Отобразить отсортированный порядок модели vdp:

  1. Откройте модель уравнения Ван дер Поля:

  2. В окне модели выберите Display> Blocks> Sorted Execution Order.

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

Например, в модели уравнения Ван дер Поля, блоке Integrator с отсортированным порядком 0:0 выполняется сначала. Блок Out1, с отсортированным порядком 0:1, выполняется второй. Точно так же остающиеся блоки выполняются в числовом порядке от 0:2 до 0:8.

Можно сохранить отсортированную настройку порядка с моделью. Чтобы отобразить отсортированный порядок, когда вы вновь откроете модель, выберите Simulation> Update diagram.

Отсортированное обозначение порядка

Отсортированное обозначение порядка отличается в зависимости от типа блока. Следующая таблица обобщает различные форматы отсортированного обозначения порядка. Каждый формат описан подробно в разделах, который следует таблице.

Тип блокаОтсортированное обозначение порядкаОписание
Невиртуальные блокиs : b
  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • b задает положение блока в отсортированном порядке для обозначенного контекста выполнения.

  • x, y является системными индексами подсистем, выполнением которых управляет этот блок.

s : b {x, y}
Невиртуальные Подсистемы (не включая подсистемы вызова функции и действия)s : b
  • s является системным индексом модели или подсистемы.

  • b задает положение блока в отсортированном порядке для обозначенного контекста выполнения.

Виртуальные блоки и подсистемыНе применяетсяВиртуальные блоки не выполняются.
Подсистемы действияs : b'
  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • b' является индексом блока блока действия (но не подсистемы действия).

Модели Function-Call Subsystems и Function-Call

Один неоснованный инициатор:

s :bi

  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • bi является индексом блока корневого инициатора в иерархии подсистемы.

Два или больше инициатора:

  • :bi1, s:bi2, ..., s:bin s, где n является количеством неоснованных инициаторов.

  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • bin является индексом блока энного корневого инициатора в иерархии подсистемы.

Инициаторы являются или Наземными блоками или не связаны:

  • s :G

  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • G указывает, что все инициаторы вызова функции основываются.

Разветвленные сигналы вызова функцииs:bi[Bk]
  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • bi является индексом блока корневого инициатора в иерархии подсистемы.

  • Книга указывает, что это - разветвленная подсистема вызова функций с индексом k ответвления.

Блоки фиксатора обратной связи вызова функцииs:bi[Bm]
  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • bi является индексом блока корневого инициатора в иерархии подсистемы.

  • BM указывает, что это - разветвленная подсистема с индексом m ответвления.

Блоки в модели с асинхронными входными параметрами вызова функцииКорневой уровень вызова функции Inport и блоки Outport: Fi
  • F указывает, что выполняется в контексте вызова функции.

  • i является индексом вызова функции.

Данные корневого уровня блоки Inport: Если они управляют подсистемой вызова функций, это - индекс вызова функции подсистемы.

Если они - часть модели, которая не управляется асинхронными входными параметрами вызова функции, то никакой индекс вызова функции не отображен.

 

Блоки вызова функции корневого уровня: Fi

Корневой уровень перешел блоки вызова функции: Fi[Bk]

  • F указывает, что выполняется в контексте вызова функции.

  • i является индексом вызова функции.

Блоки в Моделях Экспорта функций (См. Порядок выполнения для Вызова функции Корневого Уровня Блоки Inport),Корневой уровень вызова функции Inport и блоки Outport: Fi
  • F указывает, что это - блок вызова функции.

  • i является порядком выполнения для блока Inport или Outport корневого уровня вызова функции в нормальном режиме симуляции.

Подсистемы вызова функций корневого уровня: Fi

Корневой уровень перешел подсистемы вызова функций: Fi[Bk]

  • F указывает, что это - блок вызова функции.

  • i является порядком выполнения для блока Inport корневого уровня вызова функции в нормальном режиме симуляции.

  • Bk указывает на разветвленную подсистему вызова функций с индексом k.

Слияние и Блоки памяти Хранилища данных: Fi, Fj, ...
  • F указывает, что это - блок вызова функции.

  • i является индексом выполнения блока.

Данные корневого уровня Inport и блоки Outport: Тот же порядок выполнения как подсистемы вызова функций они соединяются с. 
Способные к шине блокиs:B
  • s является системным индексом модели или подсистемы, в которой находится блок. Для моделей корневого уровня s всегда является 0.

  • B указывает на способный к шине блок.

Невиртуальные блоки

В модели уравнения Ван дер Поля все невиртуальные блоки в модели имеют отсортированный порядок. Системным индексом для модели верхнего уровня является 0 и диапазоны порядка выполнения блока от 0 до 8.

Невиртуальные подсистемы

Следующая модель содержит атомарную, невиртуальную подсистему под названием Дискретный Контроллер Круиза.

Когда вы включаете отсортированное отображение порядка для системы корневого уровня, Simulink отображает отсортированный порядок блоков.

Блок Scope в этой модели имеет самый низкий отсортированный порядок, но его вход зависит от вывода Автомобильной подсистемы Динамики. Автомобильная подсистема Динамики является виртуальной, таким образом, она не имеет отсортированного порядка и не выполняется как атомарный модуль. Однако блоки в подсистеме выполняются на корневом уровне, таким образом, блок Integrator в Автомобильной подсистеме Динамики выполняется сначала. Блок Integrator отправляет свой вывод в блок Scope в модели корневого уровня, которая выполняется второй.

Дискретная Подсистема контроллера Круиза имеет отсортированный порядок 0:5:

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

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

Отсортированный порядок каждого блока в Дискретной Подсистеме контроллера Круиза имеет форму 1 : b, где:

  • 1 является системным индексом для той подсистемы.

  • b является положением блока в порядке выполнения. В Дискретной Подсистеме контроллера Круиза отсортированный порядок колеблется от 0 до 8.

Примечание

В зависимости от вашей настройки модели Simulink может вставить скрытые, невиртуальные подсистемы в вашу модель. В результате видимые блоки в скрытом блоке подсистемы могут иметь системный индекс, который отличается от индекса существующей системы. Например, если вы выбираете Conditional input branch execution, Simulink создает скрытые, невиртуальные подсистемы, которые могут влиять на отсортированный порядок выполнения.

Виртуальные блоки и подсистемы

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

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

В модели в Невиртуальных Подсистемах виртуальная Автомобильная Динамика подсистемы не имеет отсортированного порядка. Однако блоки в подсистеме имеют отсортированный порядок в контексте выполнения модели корневого уровня. Блоки имеют тот же системный индекс как модель корневого уровня. Блок Integrator в Автомобильной подсистеме Динамики имеет отсортированный порядок 0:0, указывая, что блок Integrator является первым блоком, выполняемым в контексте модели верхнего уровня.

Function-Call подсистемы

Один Инициатор.  Подсистема вызова функций (или модель) выполняется, когда инициатор вызывает подсистему вызова функций (или модель) и, поэтому, не имеет отсортированного порядка независимым от его инициатора. А именно, для подсистемы, которая соединяется с одним инициатором, Simulink использует обозначение s :bi, где s является индексом системы, которая содержит инициатора, и bi является индексом блока корневого инициатора в иерархии подсистем.

Например, отсортированным порядком для подсистем f и g является 0:0, поскольку отсортированным порядком их корневого инициатора, Графика, является 0:0.

Несколько Инициаторов.  Для подсистемы вызова функций, которая соединяется больше чем с одним инициатором, отсортированным обозначением порядка является s :bi1, s:bi2, ..., s:bin, где n является количеством неоснованных инициаторов, s является системным индексом модели или подсистемы, в которой находится блок, и bin является индексом блока энного корневого инициатора в иерархии подсистемы.

Например, откройте модель sl_subsys_fcncall6. F подсистема имеет трех инициаторов от того же уровня в иерархии подсистемы. Два из графика Stateflow®, Chart1, и один от диаграммы Stateflow, Графика.

Поскольку Chart1 имеет отсортированный порядок, 0:2 и График имеют отсортированный порядок 0:4, подсистема вызова функций f имеет отсортированное обозначение порядка 0:2,0:4.

Разветвленные сигналы вызова функции

Когда инициатор вызова функции переходится с помощью блока Function-Call Split, Simulink отображает порядок, в который подсистемы или модели, которые являются подключением к ответвлениям, выполняются. Simulink использует обозначение s:bi [Книга], чтобы указать на этот порядок. s является системным индексом подсистемы, или смоделируйте блок, находится в, bi является индексом блока корневого инициатора в иерархии подсистемы, и Книга указывает, что это - разветвленная подсистема вызова функций с индексом k ответвления.

В следующем примере отсортированный порядок указывает на подсистему f с индексом ответвления, который выполняет 0 перед подсистемой g с ответвлением индексирует 1.

Способные к шине блоки

Способный к шине блок с виртуальным входом шины не выполняется как модуль и поэтому не имеет уникального отсортированного порядка. Такой блок отображает свой отсортированный порядок как s :B, где B обозначает шину.

Например, отсортированным порядком для этого блока Unit Delay с виртуальным входом шины является 0:B.

Для списка способных к шине блоков смотрите Способные к шине Блоки.

Как Simulink определяет отсортированный порядок

Прямое проходное влияние портов на отсортированный порядок

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

Примеры блоков, которые имеют входные параметры "не прямое сквозное соединение":

  • Интегратор — Вывод является функцией своего состояния.

  • Постоянный — не имеет входа.

  • Memory Выведите зависит от его входа от предыдущего временного шага.

Правила для сортировки блоков

К блокам вида Simulink использует следующие правила:

  • Если блок управляет прямым проходным портом другого блока, блок должен появиться в отсортированном порядке перед блоком, которым это управляет.

    Это правило гарантирует, что прямые проходные входные параметры к блокам допустимы, когда Simulink вызывает методы блока, которые требуют текущих входных параметров.

  • Блоки, которые не имеют прямых проходных входных параметров, могут появиться где угодно в отсортированном порядке, пока они предшествуют любым прямым проходным блокам, которыми они управляют.

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

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

Следующая модель, от Невиртуальных Подсистем, иллюстрирует этот результат. Следующие блоки не имеют прямого сквозного соединения и поэтому появляются в начале отсортированного порядка системы корневого уровня:

  • Блок Integrator в Автомобильной Динамике виртуальная подсистема

  • Блок Speed в модели корневого уровня

В Дискретной Подсистеме контроллера Круиза, всех блоках Усиления, которые имеют прямые проходные порты, выполнение перед блоком Sum, которым они управляют.

Присвойте приоритеты блока

Можно присвоить приоритет невиртуальному блоку или целой подсистеме. Более высокие приоритетные блоки появляются перед более низкими приоритетными блоками в отсортированном порядке. Чем ниже номер, тем выше приоритет. Установите приоритет блока во вкладке General диалогового окна Block Properties.

Правила для приоритетов блока

Simulink соблюдает приоритеты блока, которые вы задаете, если они не нарушают зависимости по данным. (Блокируйтесь, Приоритетные Нарушения описывает ситуации что нарушения свойства блока причины.)

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

Три правила принадлежат приоритетам:

Приоритеты относительны

Приоритеты относительны; приоритет блока относительно приоритета блоков в той же системе или подсистеме.

Например, предположите, что вы устанавливаете следующие приоритеты в Дискретной Подсистеме контроллера Круиза в модели в Невиртуальных Подсистемах.

БлокПриоритет
Усиление3
Gain12
Gain21

После обновления схемы отсортированный порядок для блоков Усиления следующие.

Отсортированные стоимости заказов Усиления, Gain1 и блоков Gain2 отражают соответствующие присвоенные приоритеты: Gain2 имеет самый высокий приоритет и выполняется перед Gain1 и Усилением; Gain1 имеет вторую по важности задачу и выполняется после Gain2; и Усиление выполняется после Gain1. Simulink учитывает присвоенные приоритеты относительно других блоков в той подсистеме.

Блоки Усиления не являются первыми, вторыми, и третьими блоками, которые выполнятся. И при этом у них нет последовательных отсортированных порядков. Отсортированные стоимости заказов не обязательно соответствуют приоритетным значениям. Simulink располагает блоки так, чтобы их приоритеты соблюдались друг относительно друга.

Приоритеты являются иерархическими

В Автомобильной Динамике виртуальная подсистема предположите, что вы устанавливаете приоритеты блоков Усиления можно следующим образом.

БлокПриоритет
Усиление2
Gain11

После обновления схемы как проиллюстрирован отсортированный порядок для блоков Усиления. С этими приоритетами Gain1 всегда выполняется перед Усилением.

Можно установить приоритет 1 к одному блоку в каждой из этих двух подсистем из-за иерархической природы подсистем в модели. Simulink никогда не сравнивает приоритеты блоков в одной подсистеме к приоритетам блоков ни в какой другой подсистеме.

Например, рассмотрите эту модель снова.

Блоки в Автомобильной Динамике виртуальная подсистема является частью системной иерархии корневого уровня и является частью корневого уровня отсортированный порядок. Дискретная Подсистема контроллера Круиза имеет независимый отсортированный порядок с блоками, расположенными последовательно от 1:0 до 1:7.

Отсутствие приоритета не может привести к низкому приоритету

Отсутствие приоритета не обязательно приводит к низкому приоритету (более высокий порядок сортировки) для данного блока. Блоки, которые не имеют прямых проходных портов, выполняются перед блоками, которые имеют прямые проходные порты, независимо от их приоритета.

Если модель имеет две атомарных подсистемы, A и B, можно присвоить приоритеты 1 и 2 соответственно к A и B. Этот приоритет заставляет все блоки в выполняться перед любым из блоков в B. Блоки в атомарной подсистеме выполняются как единый блок, таким образом, подсистема имеет свой собственный системный индекс и свой собственный отсортированный порядок.

Блокируйте приоритетные нарушения

Программное обеспечение Simulink соблюдает приоритеты блока, которые вы задаете, если они не нарушают зависимости по данным. Если Simulink не может соблюдать приоритет блока, он отображает сообщение диагностики Block Priority Violation.

Как пример:

  1. Откройте модель sldemo_bounce.

    Заметьте, что вывод Блока памяти предоставляет вход блоку Coefficient of Restitution Gain.

  2. Установите приоритет блока Coefficient of Restitution к 1 и установите приоритет Блока памяти к 2.

    Установка этих приоритетов указывает, что блок Coefficient of Restitution выполняется перед Блоком памяти. Однако блок Coefficient of Restitution зависит от вывода Блока памяти, таким образом, приоритеты, которые вы только устанавливаете, нарушают зависимости по данным.

  3. В окне модели включите отсортированный порядок путем выбора Format> Block displays> Sorted Order.

  4. Выберите Simulation> Update Diagram.

    Приоритетное нарушение блока, предупреждающее, появляется в Diagnostic Viewer. Чтобы открыть окно Diagnostic Viewer, нажмите View> Diagnostic Viewer. Предупреждение включает приоритет для соответствующих блоков:

    Warning: Unable to honor user-specified priorities. 
    'sldemo_bounce/Memory' (pri=[2]) has to execute
    before 'sldemo_bounce/Coefficient of  Restitution'
     (pri=[1]) to satisfy data dependencies 
  5. Удалите приоритеты из Коэффициента восстановления и Блоков памяти и обновите схему снова, чтобы видеть правильный отсортированный порядок.

Похожие темы