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

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

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

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

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

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

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

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

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

Составная функция сигналаОснованный на имени доступОснованный на индексе доступ
Визуальная группировка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы создать виртуальную шину, смотрите Сигнальные линии Группы в Виртуальные Шины.

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

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

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

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

Можно использовать невиртуальные шины для:

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

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

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

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

  • Отобразите и регистрируйте шины с блоком Scope.

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

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

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

Например, предположите, что шина проходит через блок Unit Delay. Для простоты шина содержит только три элемента: aB, и 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 создает массив шин.

Для получения дополнительной информации о массивах шин смотрите Группу Невиртуальные Шины в Массивах Шин.

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

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

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

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

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

Похожие темы