Объедините шины в массив шин

Совет

Simulink® обеспечивает несколько методов для объединения сигналов в составной сигнал. Для сравнения методов смотрите Составные Методы Сигнала.

Что такое массив шин?

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

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

Использовать массивы шин:

Для примера модели, которая использует массив шин, откройте модель sldemo_bus_arrays. В этом примере невиртуальные входные сигналы шины соединяются с блоком Vector Concatenate или Matrix Concatenate, который создает массив сигналов шины. Вот схема после того, как вы обновите ее:

Модель использует массив шин с:

  • Блок Assignment, чтобы присвоить шину в массиве

  • Блок For Each Subsystem, чтобы выполнить итеративную обработку по каждой шине в массиве

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

Преимущества массива шин

Используйте массив шин к:

  • Представляйте структурированные данные сжато.

    • Уменьшите сложность модели.

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

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

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

  • Используйте встроенные блоки, такие как Присвоение или Селекторные блоки, чтобы управлять массивами шин точно так же, как массивы любого другого типа. Используя массив шин избегает потребности в вас создать пользовательские S-функции, чтобы справиться с упаковкой и распаковкой сигналов структуры.

  • Используйте объединенные данные шины через контуры подсистемы, контуры модели - ссылки, и в или из блока MATLAB function.

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

  • Сгенерируйте код, который имеет массив структур C, которые можно интегрировать с устаревшим кодом С, который использует массивы структур. Этот подход упрощает индексацию в массив для вычислений Simulink, с помощью цикла for на индексируемых структурах.

Задайте массив шин

Для получения информации о видах шин, которые можно объединить в массив шин, смотрите Требования Шины.

Чтобы задать массив шин, используйте блок Concatenate. Таблица описывает массив входных требований шин и вывода для каждой Векторной конкатенации и Матричной конкатенации версий блока Concatenate.

БлокСоедините шиной входное требование сигналаВывод
Векторная конкатенация

Векторы, векторы - строки или векторы столбцов

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

Матричная конкатенация

Сигналы любой размерности (скаляры, векторы и матрицы)

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

Конкатенация находится на размерности, которую вы задаете с конкатенацией параметра размерности.

Примечание

Не используйте блок Mux или блок Bus Creator, чтобы задать массив шин. Вместо этого используйте блок Bus Creator, чтобы создать скалярные сигналы шины.

  1. Задайте один объект шины для всех шин, которые вы хотите объединить в массив шин. Для получения информации об определении объектов шины смотрите, Создают Объекты Шины.

    Модель sldemo_bus_arrays задает объект шины sldemo_bus_arrays_busobject, который оба из блоков Создателя Шины используют для сигналов входной шины (Scalar Bus) для массива шин.

  2. Добавьте блок Vector Concatenate или Matrix Concatenate к модели и откройте диалоговое окно Block Parameters.

    Модель sldemo_bus_arrays_busobject использует блок Vector Concatenate, потому что входные параметры являются скалярами.

  3. Определите Номер входного параметра, чтобы быть количеством шин, что вы хотите быть в массиве шин.

    Блочный значок отображает количество входных портов, которые вы задаете.

  4. Установите параметр Режима, чтобы совпадать с типом данных входной шины.

    В модели sldemo_bus_arrays данные входной шины являются скаляром, таким образом, установкой Mode является Vector.

  5. При использовании блок Matrix Concatenation, устанавливаете конкатенацию параметра размерности, чтобы задать выходную размерность, по которой можно конкатенировать входные массивы. Введите одно из следующих значений:

    • 1 — конкатенируйте входные массивы вертикально

    • 2 — конкатенируйте входные массивы горизонтально

    • Более высокая размерность, чем 2 — выполняет многомерную конкатенацию на входных параметрах

  6. Соедините с блоком Concatenate все шины, что вы хотите быть в массиве шин.

Группа постоянные сигналы в массив шин

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

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

Можно также использовать массив структур, чтобы задать свойство Value объекта Simulink.Parameter и использовать объект параметра в блоке Constant.

  1. Откройте модель в качестве примера ex_constantbus_array.

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

  2. Обновите схему, чтобы просмотреть ширины сигнальной линии.

    Вывод блока Constant является единственной скалярной шиной типа ParamBus. Переменная структуры const_param_struct задает постоянное значение в блоке.

  3. В командной строке создайте массив двух структур путем копирования структуры const_param_struct. Настройте значения полей путем индексации в отдельные структуры в массиве.

    const_struct_array =...
     [const_param_struct const_param_struct];
    
    const_struct_array(2).Offset = 158;
    const_struct_array(2).Gain = 3.83;
    const_struct_array(2).Threshold = 1039.77
    
    const_struct_array = 
    
    1x2 struct array with fields:
    
        Offset
        Gain
        Threshold
                        

  4. В диалоговом окне блока Constant, установленном Постоянном значении к const_struct_array.

  5. Добавьте два Селекторных блока к модели и соедините блок Constant как показано.

  6. В Селекторном блочном диалоговом окне, Индексе набора к 1 и размере Входного порта к 2.

  7. В диалоговом окне блока Selector1, Индексе набора к 2 и размере Входного порта к 2.

  8. Скопируйте блочный алгоритм в модели и соедините блоки как показано.

  9. Обновите схему. Ширина сигнальной линии и стиль указывают, что вывод блока Constant является массивом шин. Селектор блокирует каждое извлечение одна из шин в массиве.

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

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

Смотрите также

Блоки

Похожие темы

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