Работа с массивами шин

Настройте модель для массивов шин

Подготовка модели, чтобы использовать массив шин обычно включает эти основные задачи:

  1. Задайте массив шин (см., Задают Массив Шин).

  2. Добавьте подсистему для выполнения итеративной обработки на каждом элементе массива шин. Например, используйте блок For Each Subsystem или блок Iterator. Соедините массив шин от блока Concatenate до итеративной подсистемы обработки. Смотрите Выполняют Итеративную Обработку.

  3. Смоделируйте свой скалярный алгоритм в итеративной подсистеме обработки (например, Для Каждой подсистемы).

    1. Работайте с массивом шин (использующий Selector и блоки Assignment).

    2. Используйте Bus Selector и блоки Bus Assignment, чтобы выбрать элементы из или элементы присвоения к, скалярная шина в подсистеме.

    Смотрите значения присвоения в массив шин и выберите элементы шины из массива шин.

  4. Опционально, импортируйте или регистрируйте массив данных о шинах. Смотрите Массив Импорта Массивов Данных и Журнала Шин Шин

Получившаяся модель включает эти компоненты.

Выполните итеративную обработку

Можно выполнить итеративную обработку на данных о шине массива блоков использования шин, таких как блок For Each Subsystem, блок While Iterator Subsystem или блок For Iterator Subsystem. Можно использовать один из этих блоков, чтобы выполнить тот же вид обработки на:

  • Каждая шина в массиве шин

  • Выбранное подмножество шин в массиве шин

Присвойте значения в массив шин

Чтобы присвоить значение сигналу в массиве шин, используйте:

  1. Блок Bus Assignment, чтобы присвоить значение элементу шины

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

Используйте блок Assignment, чтобы присвоить значения указанным элементам в массиве шины A.

Например, в sldemo_bus_arrays модель, блок Assignment присваивает значение первому элементу массива шин.

Чтобы присвоить элементы шины в шине, используйте блок Bus Assignment. Вход для блока Bus Assignment должен быть скалярной шиной.

Присвойте в массивы шин

Можно использовать блок Bus Assignment, чтобы присвоить или полностью заменить вложенную шину, которая является массивом шин. Чтобы присвоить данные для вложенной шины в массиве шин или сделать частичное присвоение на определенные элементы с массивом шин, можно использовать блок MATLAB Function.

Например, предположите, что у вас есть эта структура шины:

Шина имеет children элемент, который является подмассивом шины A. В этом примере показано, как присвоить элементу c и к элементу a. Inport и блоки Outport используют Parent Bus объект. Чтобы задать присвоения, этот пример использует блок MATLAB Function, потому что вы не можете присвоить в элемент a использование блока Bus Assignment или Assignment.

Блок MATLAB Function использует этот функциональный код для того, чтобы сделать присвоения:

function y = fcn(u)

y = u;
y.c = false;
for idx = 1:length(y.children)
    y.children(idx).a = int32(zeros(5, 1));
end

Выберите Bus Elements из массива шин

Чтобы выбрать сигнал в массиве шин, используйте a:

  1. Блок Selector, чтобы найти соответствующую шину в массиве шин.

  2. Блок Bus Selector, чтобы выбрать сигнал.

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

Например, sldemo_bus_arrays модель использует Селекторные блоки, чтобы выбрать элементы из массива шин, что Assignment и For Each Subsystem блокируют выходные параметры. В этом примере вот диалоговое окно Block Parameters для блока Selector, который выбирает первый элемент:

Чтобы выбрать элементы шины в шине, используйте блок Bus Selector. Вход для блока Bus Selector должен быть скалярной шиной.

Импортируйте массив данных о шинах

Используйте корневой блок Inport, чтобы импортировать (загружают) массив структур MATLAB® timeseries объекты для массива шин. Можно импортировать частичные данные в массив шин.

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

Вы не можете использовать блок From Workspace или From File, чтобы импортировать данные для массива шин.

Регистрируйте массивы шин

Чтобы экспортировать массив шин, отметьте сигнал для логгирования сигнала. Для получения дополнительной информации смотрите, Сохраняют Данные Во время выполнения от Симуляции.

Примечание

Simulink® не регистрирует сигналы в моделях, на которые ссылаются, в быстром режиме Accelerator.

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

Инициализируйте массивы шин

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

Вот пример, который показывает, как инициализировать массив шин. Предположим, что вы задаете типы шины MyData и PressureBus.

Предположим, что вы устанавливаете тип данных элемента сигнала temperature к int16, и тип данных элементов s1 и s2 к double.

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

initValues(1).temperature = int16(5);
initValues(1).pressure.s1 = 9.87;
initValues(1).pressure.s2 = 8.71;

initValues(2).temperature = int16(20);
initValues(2).pressure.s1 = 10.21;
initValues(2).pressure.s2 = 9.56;

initValues(3).temperature = int16(35);
initValues(3).pressure.s1 = 8.98;
initValues(3).pressure.s2 = 9.17;

Переменная initValues обеспечивает начальные условия для сигнала, который является массивом трех шин. Можно использовать initValues задавать параметр Initial condition блока, такого как Unit Delay.

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

initStruct.temperature = int16(15);
initStruct.pressure.s1 = 10.32;
initStruct.pressure.s2 = 9.46;

Если вы задаете initStruct в параметре Initial condition блока каждая шина в массиве использует то же начальное значение, 15, для элемента сигнала temperature. Точно так же шины используют начальное значение 10.32 для элемента pressure.s1 и значение 9.46 для элемента pressure.s2.

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

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

  1. В Редакторе Шины создайте Bus объекты MyData и PressureBus.

  2. В панели иерархии выберите элемент шины pressure. Установите свойство Dimensions на [1 3].

  3. Создайте массив четырех структур инициализации при помощи функции Simulink.Bus.createMATLABStruct. Сохраните массив в переменной initStruct. Инициализируйте все отдельные сигналы к наземному значению, 0.

    initStruct=Simulink.Bus.createMATLABStruct('MyData',[],[1 4]);

  4. В базовом рабочем пространстве дважды кликните переменную initStruct просмотреть его в редакторе переменных.

    Эти четыре структуры в массиве у каждого есть поля temperature и pressure.

  5. Смотреть pressure, дважды кликните одно из полей.

    Значение каждого четырех pressure поля являются массивом трех подструктур. Каждая подструктура имеет поля s1 и s2.

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

    В качестве альтернативы можно записать скрипт. Например, чтобы получить доступ к полю s1 из второй подструктуры pressure в третьей структуре initStruct, используйте этот код:

    initStruct(3).pressure(2).s1 = 15.35;

Генерация кода

Генерация кода для массивов шин производит структуры с определенным форматом. Смотрите Генерацию кода для Массивов Шин.

Похожие темы