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

Совет

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Matrix Concatenate

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

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

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

Примечание

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

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

    sldemo_bus_arrays модель задает sldemo_bus_arrays_busobject Bus объект, который оба из Создателя Шины блокируют использование для входных шин (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. Добавьте два блока Selector в модель и соедините блок Constant как показано.

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

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

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

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

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

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

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

Блоки

Похожие темы