Типы составных сигналов

Чтобы уменьшить сложность зрения в модели, можно объединить сигналы в составные сигналы. Сигналы, которые содержит составной сигнал, называются elements. Элементы сохраняют свои раздельные идентичности, что позволяет извлечь их из составного сигнала.

Вы можете получить доступ к составным элементам сигнала по имени или индексу, в зависимости от типа составного сигнала.

  • Основанные на именах составные сигналы допускают иерархию сигналов и называются buses.

  • Основанные на индексе составные сигналы плоские, независимо от того, создаете ли вы их поэтапно. Они требуют, чтобы все входные сигналы имели совпадающий тип данных.

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

  • virtual составной сигнал упрощает визуальный внешний вид модели путем объединения двух или более сигнальных линий в одну строку. Он не группирует сигналы ни в каком функциональном смысле и, следовательно, не влияет на симуляцию или генерацию кода. При непосредственном доступе к элементам виртуальные составные сигналы выполняются быстрее, чем невиртуальные составные сигналы в симуляциях и сгенерированном коде.

  • nonvirtual составной сигнал визуально и функционально группирует сигналы, влияя как на симуляцию, так и на генерацию кода.

Модели могут использовать комбинацию этих составных типов сигналов.

Функция составного сигналаДоступ на основе именДоступ на основе индексов
Визуальная группировка

Виртуальная шина

Сигнал мультиплексора

Функциональная группировка

Невиртуальная шина

Конкатенированный сигнал

Можно идентифицировать составные типы сигналов по их стилю линии после компиляции модели. Когда вы создаете линию для составного сигнала или открываете модель, которая содержит составные сигналы, составные сигналы имеют тот же стиль линии, что скаляр сигналы. Чтобы скомпилировать модель и показать составные стили линии, на вкладке Modeling выберите Update Model.

Составные Стили линии после компиляцииСоставной тип сигнала
Виртуальная шина
Невиртуальная шина
Составной сигнал на основе индекса, когда включено наложение Nonscalar Signals информации
Составной сигнал на основе индекса, который содержит невиртуальные шины (называемый array of buses)

Виртуальная шина

Эта модель показывает виртуальную шину, которая содержит сигналы a, b, и c.

Bus Creator блоки создают шины в подсистеме или модели. Bus Selector блоки извлекают указанные элементы шины.

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

Out Bus Element блоки создают шину в подсистеме или интерфейсе модели. In Bus Element блоки извлекают указанные элементы массива шины в подсистеме или интерфейсе модели.

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

Чтобы определить свойства виртуальной шины, можно задать Simulink.Bus тип данных объекта или задайте атрибуты элемента с In Bus Element и Out Bus Element блоками.

Для создания виртуальной шины см. раздел «Группирование сигнальных линий в виртуальные шины».

Невиртуальная шина

Эта модель показывает невиртуальную шину, которая содержит сигналы a, b, и c.

Bus Creator блоки создают шины в подсистеме или модели. Bus Selector блоки извлекают указанные элементы шины.

Эта модель показывает эквивалентную невиртуальную шину, проходящую через модель-ссылку контура используя блоки Out Bus Element и In Bus Element.

Вы можете использовать невиртуальные автобусы для:

  • Упакуйте данные шины как структуры в сгенерированный код C.

  • Создайте массив шин.

  • Интерфейс с внешним кодом через S-функцию.

  • Иметь перекрестные MATLAB Function данных о шине блоков или Stateflow® контуры графика.

  • Отображение и логгирование шин с блоком Scope.

Все элементы массива невиртуальной шины должны использовать один и тот же шаг расчета. Можно использовать блок Rate Transition, чтобы изменить шаг расчета отдельного сигнала или всех сигналов в шине.

A Simulink.Bus тип данных объекта должен определять шину, которую вы хотите сделать невиртуальной. Шина становится невиртуальной, когда вы выбираете параметры блоков, такой как Output as nonvirtual bus. Выбор, чтобы сделать шину невиртуальной, приводит к симуляции и генерации кода, чтобы применить структуру, заданную Bus объект. Когда шина является виртуальной, Bus объект проверяет только свойства шины.

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

Например, предположим, что шина проходит через блок Unit Delay. Для простоты шина содержит всего три элемента: a, b, и c. В этой таблице показан эффект невиртуальной шины на сгенерированный код.

Сгенерированный кодВиртуальная шинаНевиртуальная шина

model_types.h файл

Виртуальные шины не требуют определений типов.

Bus объекты появляются в сгенерированном коде как структуры.

typedef struct {
  real_T a;
  real_T b;
  real_T c;
} BusObject;

model.h файл

Сгенерированный код определяет один Unit Delay блок для каждого элемента виртуальной шины.

typedef struct {
  real_T UnitDelay_1_DSTATE;  /* '<Root>/Unit Delay' */
  real_T UnitDelay_2_DSTATE;  /* '<Root>/Unit Delay' */
  real_T UnitDelay_3_DSTATE;  /* '<Root>/Unit Delay' */
} DW_model_T;

Сгенерированный код определяет один Unit Delay блок для невиртуальной шины, используя BusObject структура.

typedef struct {
  BusObject UnitDelay_DSTATE;  /* '<Root>/Unit Delay' */
} DW_model_T;

Для создания невиртуальной шины см. Раздел «Создание невиртуальных шин».

Если вы намерены сгенерировать код для модели, которая использует шины, см. Сгенерируйте эффективный код для сигналов шины (Simulink Coder). Генерация кода для невиртуальных шин может привести к нескольким копиям некоторых шин.

Конкатенированный сигнал

Эта модель показывает конкатенированный сигнал, который помещает входные матрицы один за другим.

Блок Matrix Concatenate создает конкатенированные сигналы. Элементы могут быть как векторами, так и матрицами, в зависимости от того, как вы конфигурируете этот блок. Блок Selector извлекает сигналы на основе заданных индексов. Извлеченные сигналы могут быть сгруппированы по-другому, чем входные сигналы.

Можно использовать конкатенированные сигналы в математических операциях.

Чтобы сгруппировать сигналы с Vector Concatenate или Matrix Concatenate блоком, сигналы должны иметь совпадающий тип данных. Когда тип данных является Bus объект, входы должны быть невиртуальными шинами.

Конкатенированные невиртальные автобусы также известны как array of buses. В массиве шин все элементы являются невиртуальными шинами, которые используют одинаковые Bus объект для задания свойств. Массив шин эквивалентен массиву структур в MATLAB®. Можно использовать массив шин для моделирования многоканальной системы. Хотя все каналы имеют одинаковые свойства, каждый из каналов может иметь разное значение.

В этой модели блок Vector Concatenate создает массив шин.

Для получения дополнительной информации об массивах шин смотрите Group Nonvirtual Buses in Arrays of Buses.

Сигнал мультиплексора

Эта модель показывает сигнал мультиплексора, который помещает три входных сигналов один за другим.

Блок Mux создает сигналы мультиплексора. Блок Demux извлекает все сигналы, которые могут быть сгруппированы по-другому, чем входные сигналы. Блок Selector извлекает сигналы на основе заданных индексов. Извлеченные сигналы могут быть сгруппированы по-другому, чем входные сигналы.

Можно использовать сигнал mux для выполнения расчетов на нескольких векторах. Можно также использовать блок Mux для создания вектора вызовов функций.

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

Похожие темы