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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание

Не используйте блок 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. Установите параметр Number of inputs, чтобы быть количеством шин, что вы хотите быть в массиве шин.

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

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

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

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

    • 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, набор Constant value к const_struct_array.

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

  6. В Селекторном диалоговом окне блока, набор Index к 1 и Input port size к 2.

  7. В диалоговом окне блока Selector1, набор Index к 2 и Input port size к 2.

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

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

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

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

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

Блоки

Похожие темы