Чтобы уменьшить визуальную сложность модели, можно объединить сигналы в составные сигналы. Сигналы, которые содержит составной сигнал, называются элементами. Элементы сохраняют свои отдельные идентичности, что позволяет извлечь их из составного сигнала.
Доступ к элементам составного сигнала можно получить по имени или индексу в зависимости от типа составного сигнала.
Составные сигналы на основе имен допускают иерархию сигналов и называются шинами.
Основанные на индексах составные сигналы являются плоскими, независимо от того, создаются ли они поэтапно. Они требуют, чтобы все входные сигналы имели одинаковый тип данных.
При группировании сигналов в составной сигнал можно решить, влияют ли они на моделирование и генерацию кода.
Виртуальный составной сигнал упрощает визуальный вид модели путем объединения двух или более сигнальных линий в одну линию. Он не группирует сигналы в каком-либо функциональном смысле и, следовательно, не влияет на моделирование или генерацию кода. Благодаря непосредственному доступу к элементам виртуальные составные сигналы выполняются быстрее, чем невиртуальные составные сигналы в моделировании и сгенерированном коде.
Невиртуальный составной сигнал визуально и функционально группирует сигналы, влияя как на моделирование, так и на генерацию кода.
Модели могут использовать комбинацию этих типов составных сигналов.
| Функция «Составной сигнал» | Доступ на основе имени | Доступ на основе индекса |
|---|---|---|
| Визуальная группировка | ||
Функциональная группировка |
После компиляции модели можно определить составные типы сигналов по их стилю линий. При создании линии для составного сигнала или открытии модели, содержащей составные сигналы, они имеют тот же стиль линии, что и скалярные сигналы. Чтобы скомпилировать модель и показать стили составных линий, на вкладке «Моделирование» выберите «Обновить модель».
| Стиль составной линии после компиляции | Тип составного сигнала |
|---|---|
| Виртуальная шина | |
| Невиртуальная шина | |
| Составной сигнал на основе индекса при включенном наложении информации о нескалярных сигналах | |
| Составной сигнал на основе индекса, содержащий невиртуальные шины (называемый массивом шин) |
Эта модель показывает виртуальную шину, которая содержит сигналы a, b, и c.

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

Блоки Out Bus Element создают шину в интерфейсе подсистемы или модели. В блоках Bus Element извлекают указанные элементы шины в интерфейсе подсистемы или модели.
Виртуальные шины можно использовать для размещения элементов шины с различными временами выборки.
Для определения свойств виртуальной шины можно указать Simulink.Bus тип данных объекта или укажите атрибуты элемента с блоками In Bus Element и Out Bus Element.
Для создания виртуальной шины см. раздел Группирование сигнальных линий в виртуальные шины.
Эта модель показывает невиртуальную шину, которая содержит сигналы a, b, и c.

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

Невиртуальные шины можно использовать для:
Пакетные данные шины как структуры в сгенерированном коде C.
Создайте массив шин.
Интерфейс с внешним кодом через S-функцию.
Иметь границы данных шины между функциональными блоками MATLAB или диаграммами Stateflow ®.
Отображение и регистрация шин с блоком области.
Все элементы невиртуальной шины должны использовать одинаковое время выборки. Можно использовать блок Rate Transition для изменения времени выборки отдельного сигнала или всех сигналов в шине.
A Simulink.Bus тип данных объекта должен определять шину, которую требуется сделать невиртуальной. Шина становится невиртуальной при выборе параметра блока, такого как Output, в качестве невиртуальной шины. Выбор, чтобы сделать шину невиртуальной, вызывает моделирование и генерацию кода для применения структуры, определенной Bus объект. Когда шина является виртуальной, Bus объект проверяет только свойства шины.
Тип шины может существенно изменить эффективность, размер и читаемость генерируемого кода. Для того чтобы шина появилась в сгенерированном коде, она должна быть неинвентарной. В сгенерированном коде отображаются только элементы виртуальной шины.
Например, предположим, что шина проходит через блок единичной задержки. Для простоты шина содержит только три элемента: a, b, и c. В этой таблице показано влияние невиртуальной шины на сгенерированный код.
| Сгенерированный код | Виртуальная шина | Невиртуальная шина |
|---|---|---|
| Виртуальные шины не требуют определений типов. |
typedef struct {
real_T a;
real_T b;
real_T c;
} BusObject; |
| Сгенерированный код определяет один блок единичной задержки для каждого элемента виртуальной шины.
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; | Сгенерированный код определяет один блок единичной задержки для невиртуальной шины, используя
typedef struct {
BusObject UnitDelay_DSTATE; /* '<Root>/Unit Delay' */
} DW_model_T; |
Сведения о создании невиртуальной шины см. в разделе Создание невиртуальных шин.
Если предполагается создать код для модели, использующей шины, см. раздел Создание эффективного кода для сигналов шины (Simulink Coder). Создание кода для невиртуальных шин может привести к появлению нескольких копий некоторых шин.
Эта модель показывает конкатенированный сигнал, который размещает входные матрицы бок о бок.

Блок Matrix Concatenate создает конкатенированные сигналы. Элементы могут быть либо векторами, либо матрицами, в зависимости от настройки этого блока. Блок Селектор извлекает сигналы на основе заданных индексов. Извлеченные сигналы могут быть сгруппированы иначе, чем входные сигналы.
В математических операциях можно использовать конкатенированные сигналы.
Чтобы сгруппировать сигналы с блоком векторной конкатенации или матричной конкатенации, сигналы должны иметь один и тот же тип данных. Если типом данных является Bus , входы должны быть невиртуальными шинами.
Конкатенированные невиртуальные шины также известны как массив шин. В массиве шин все элементы являются невиртуальными шинами, которые используют одно и то же Bus для задания свойств. Массив шин эквивалентен массиву структур в MATLAB ®. Для моделирования многоканальной системы можно использовать массив шин. Хотя все каналы имеют одинаковые свойства, каждый из каналов может иметь разное значение.
В этой модели блок Vector Concatenate создает массив шин.

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

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