Подготовка модели, чтобы использовать массив шин обычно включает эти основные задачи:
Задайте массив шин (см., Создают Массив Шин от Невиртуальных Шин).
Добавьте подсистему для выполнения итеративной обработки на каждом элементе массива шин. Например, используйте блок For Each Subsystem или блок Iterator. Соедините массив шин от блока Concatenate до итеративной подсистемы обработки. Смотрите Выполняют Итеративную Обработку.
Смоделируйте свой скалярный алгоритм в итеративной подсистеме обработки (например, Для Каждой подсистемы).
Работайте с массивом шин (использующий Selector и блоки Assignment).
Используйте Bus Selector и блоки Bus Assignment, чтобы выбрать элементы из или элементы присвоения к, невиртуальная шина в подсистеме.
Смотрите значения присвоения в массив шин и выберите элементы шины из массива шин.
Опционально, импортируйте или регистрируйте массив данных о шинах. Смотрите Массив Импорта Массивов Данных и Журнала Шин Шин
Получившаяся модель включает эти компоненты.
Можно выполнить итеративную обработку на данных о шине массива блоков использования шин, таких как блок For Each Subsystem, блок While Iterator Subsystem или блок For Iterator Subsystem. Можно использовать один из этих блоков, чтобы выполнить тот же вид обработки на:
Каждая шина в массиве шин
Выбранное подмножество шин в массиве шин
Чтобы присвоить значение сигналу в массиве шин, используйте:
Блок Bus Assignment, чтобы присвоить значение элементу шины
Блок 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
Чтобы выбрать элемент шины из массива шин, используйте a:
Блок Selector, чтобы выбрать соответствующую шину в массиве шин.
Блок Bus Selector, чтобы выбрать элемент шины в шине.
Используйте блок Selector, чтобы выбрать элементы массива шин. Входной массив шин может иметь любую размерность. Выходная шина блока Selector является выбранным или переупорядоченным набором элементов от входного массива шин.
Например, sldemo_bus_arrays
модель использует блоки Selector, чтобы выбрать элементы из массива шин, что Assignment и For Each Subsystem блокируют выходные параметры. В этом примере вот диалоговое окно Block Parameters для блока Selector, который выбирает первый элемент:
Чтобы выбрать элементы шины в шине, используйте блок Bus Selector. Вход для блока Bus Selector должен быть шиной.
Используйте корневой блок Inport, чтобы импортировать (загружают) массив структур MATLAB®
timeseries
объекты для массива шин. Можно импортировать частичные данные в массив шин.
Для получения дополнительной информации смотрите Массив Импорта Данных о Шинах.
Вы не можете использовать блок From Workspace или From File, чтобы импортировать данные для массива шин.
Чтобы экспортировать массив шин, отметьте сигнал для логгирования сигнала. Для получения дополнительной информации смотрите, Сохраняют Данные Во время выполнения от Симуляции.
Примечание
Simulink® не регистрирует сигналы в моделях, на которые ссылаются, в быстром режиме Accelerator.
Чтобы получить доступ к данным о регистрации сигнала для определенного сигнала в массиве шин, перейдите через иерархию структуры и задайте индекс к определенному сигналу. Для получения дополнительной информации смотрите доступ к Массиву Сигнала Шин Регистрация Данных.
Корневые выходные параметры шины уровня не регистрируются, когда вы выбираете параметр конфигурации Output. Используйте стандартное логгирование сигнала вместо этого, как описано в Данных сигнала Экспорта Используя Логгирование Сигнала.
Не используйте логгирование сигнала для шины или массивов шин непосредственно из Для Каждой подсистемы. Или используйте блок Bus Selector, чтобы выбрать сигналы элемента шины регистрировать или добавить блок Outport за пределами подсистемы и затем регистрировать тот сигнал. Для получения дополнительной информации смотрите Логарифмические Сигналы в Для Каждого Подсистемы.
Задавать уникальное начальное значение для каждого индивидуума сигнализирует в массиве шин, можно использовать массив начальных структур условия. Каждая структура в массиве инициализирует одну из шин.
Вот пример, который показывает, как инициализировать массив шин. Предположим, что вы задаете типы шины 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
.
В этом примере показано, как инициализировать вложенный массив шин. Создайте начальную структуру условия для сложной иерархии сигнала, которая включает вложенные массивы шин.
В Редакторе Шины создайте Bus
объекты MyData
и PressureBus
.
В панели иерархии выберите элемент шины pressure
. Установите свойство Dimensions на [1 3]
.
Создайте массив четырех структур инициализации при помощи функции Simulink.Bus.createMATLABStruct
. Сохраните массив в переменной initStruct
. Инициализируйте все отдельные сигналы к наземному значению, 0
.
initStruct=Simulink.Bus.createMATLABStruct('MyData',[],[1 4]);
В базовом рабочем пространстве дважды кликните переменную initStruct
просмотреть его в редакторе переменных.
Эти четыре структуры в массиве у каждого есть поля temperature
и pressure
.
Смотреть pressure
, дважды кликните одно из полей.
Значение каждого четырех pressure
поля являются массивом трех подструктур. Каждая подструктура имеет поля s1
и s2
.
Чтобы ввести уникальные значения инициализации для сигналов в массиве шин, можно задать значения вручную с помощью редактора переменных.
В качестве альтернативы можно записать скрипт. Например, чтобы получить доступ к полю s1
из второй подструктуры pressure
в третьей структуре initStruct
, используйте этот код:
initStruct(3).pressure(2).s1 = 15.35;
Чтобы инициализировать массив шин параметрами структуры, можно использовать:
Номер 0
. В этом случае все отдельные сигналы в массиве шин используют начальное значение 0
.
Скалярный struct
это представляет ту же иерархию полей и имен полей как тип шины. В этом случае скалярная структура расширяется, чтобы инициализировать каждый из отдельных сигналов в массиве шин.
Массив структур, который задает начальное значение для каждого из отдельных сигналов в массиве шин.
Если вы используете массив структур, все структуры в массиве должны иметь ту же иерархию полей. Каждое поле в иерархии должно иметь те же характеристики через массив:
Имя поля
Тип числовых данных, такой как single
или int32
Сложность
Размерности
Вы не можете использовать частичные структуры.
Генерация кода для массивов шин производит структуры с определенным форматом. Смотрите Генерацию кода для Массивов Шин.