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

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

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

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

Примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Подсистемы вызова функций и модели Вызова функции

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

s: bi

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

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

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

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

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

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

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

  • s: G

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

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

Разветвленные сигналы вызова функцииs: bi [Книга]
  • 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, Simulink создает скрытые, невиртуальные подсистемы, которые могут влиять на отсортированный порядок выполнения.

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

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

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

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

Подсистемы вызова функций

Единственный Инициатор.  Подсистема вызова функций (или модель) выполняется, когда инициатор вызывает подсистему вызова функций (или модель) и, поэтому, не имеет отсортированного порядка независимым от его инициатора. В частности, для подсистемы, которая соединяется с одним инициатором, Симулинк использует обозначение 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, Симулинк отображает порядок, в которых подсистемах (или модели) что подключение к ответвлениям выполняются, когда инициатор вызывает вызов функции. Симулинк использует обозначение s:bi [Книга], чтобы указать на этот порядок. s является системным индексом модели или подсистемы, в которой находится блок, bi является блочным индексом корневого инициатора в иерархии подсистемы, и Книга указывает, что это - разветвленная подсистема вызова функций с индексом k ответвления.

Например, откройте модель sl_subsys_fcncall11 и отобразите отсортированный порядок. Отсортированный порядок указывает, что подсистема f (B0) выполняется перед подсистемой g (B1).

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

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

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

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

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

Влияние портов прямого сквозного соединения на отсортированный порядок

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Присвойте блочные приоритеты

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

Правила для блочных приоритетов

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

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

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

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

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

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

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

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

Отсортированные стоимости заказов Усиления, Gain1 и блоков Gain2 отражают соответствующие присвоенные приоритеты: Gain2 имеет самый высокий приоритет и выполняется перед Gain1 и Усилением; Gain1 имеет вторую по важности задачу и выполняется после Gain2; и Усиление выполняется после Gain1. 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> Отсортированный Порядок.

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

    Блочное приоритетное нарушение, предупреждающее, появляется в Диагностическом Средстве просмотра. Чтобы открыть окно 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. Удалите приоритеты из Коэффициента восстановления и Блоков памяти и обновите схему снова, чтобы видеть правильный отсортированный порядок.

Похожие темы

Была ли эта тема полезной?