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

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

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

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

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

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

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

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

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

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

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

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

Можно выполнить итеративную обработку на данных сигнала шины массива блоков использования шин такой как Для Каждого блока Subsystem, некоторое время блок Subsystem Итератора, или Для блока 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 и Выходного порта используют объект шины Parent. Чтобы задать присвоения, этот пример использует блок 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. Селекторный блок, чтобы найти соответствующую шину в массиве шин.

  2. Соедините шиной Селекторный блок, чтобы выбрать сигнал.

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

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

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

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

Используйте корневой блок 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 блока, такого как Единичная задержка.

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

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. В Редакторе Шины создайте объекты шины 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;

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

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

Похожие темы