Массивы компонента обеспечивают интуитивный способ смоделировать составные компоненты с произвольным числом гомогенных членов, такие как сегментированные конвейеры, блоки батарей или линии электропередачи.
Используйте for
цикл, чтобы объявить массив компонентов члена:
for i=1:array_size components (ExternalAccess=none) member_comp(i) = compX; end end
Размер массивов может быть объявлен как корректируемый параметр составного компонента, так, чтобы пользователи блока могли изменить это значение.
parameters array_size = 10; % Number of member components end
Объявите параметр, задающий размер массивов как безразмерное целое число потому что for
итератор цикла должен быть безразмерным целым числом.
Подобно регулярным составным компонентам, если вы хотите, чтобы определенные параметры базового компонента члена были корректируемыми через составной интерфейс компонента, включайте их в объявление элемента. Этот пример устанавливает отношение между параметром parX
из компонента члена compX
и параметр верхнего уровня top_level_parX
из составного компонента:
parameters array_size = 10; % Number of member components top_level_parX = { 1, 'm' }; % Modifiable parameter of the member components end for i=1:array_size components (ExternalAccess=none) member_comp(i) = compX(parX = top_level_parX); end end
Используйте for
циклы, чтобы задать связи между компонентами члена. Область значений итератора для них for
циклы зависят от размера массивов и типа связи. Например, когда вы соединяете N
члены параллельно, область значений итератора равна размеру массивов:
for i=1:N connections connect(compX(i).A, A); connect(compX(i).B, B); end end
Однако, если вы соединяете N
члены последовательно, область значений итератора от 1
к (N-1)
, потому что вы соединяете порт B каждого члена кроме последнего к порту A следующего члена:
for i=1:(N-1) connections connect(compX(i).B, compX(i+1).A); end end
В этом случае не забывайте соединять концы цепи к внешним портам составного компонента:
connections connect(compX(1).A, A); connect(compX(N).B, B); end
Можно также использовать compX(end)
указать на последний член массива компонента. Например, этот синтаксис эквивалентен предыдущему для соединения концов цепи к внешним портам составного компонента:
connections connect(compX(1).A, A); connect(compX(end).B, B); end
Можно использовать, вложил for
циклы, чтобы создать многомерные массивы компонентов.
Следующие правила и ограничения применяются к массивам на языке Simscape™:
Массивы применяются только к component
класс члена.
Массивы компонента должны быть гомогенными, то есть, их члены должны все принадлежать тому же классу. Однако у членов могут быть различные значения параметров.
Для примера массива компонента с идентичными членами смотрите, что Сегментированный Конвейер Использует Массив Компонента.
Для примера того, как можно задать различные значения параметров для определенных членов массива компонента, смотрите Тематическое исследование — Блок батарей с Отказом Используя Массивы.
Размер массивов может быть параметром или параметрическим выражением. Параметры, которые управляют размером массивов, могут иметь свой ExternalAccess
припишите набор modify
, который позволяет пользователям блока изменить размер массива.
У членов массивов должен быть ExternalAccess
припишите набор none
. Это означает, что регистрация данных, Переменное Средство просмотра и другая функциональность, которая требует ExternalAccess
быть modify
или observe
не доступно для членов массивов.
Пустые массивы не поддержаны.
Можно использовать for
циклы, чтобы объявить массивы компонента и соединить члены массива друг другу. for
циклы имеют тот же синтаксис как for
в MATLAB®. Следующие правила и ограничения применяются к for
циклы на языке Simscape:
for
циклы могут содержать только components
или connections
.
for
итератор цикла должен быть безразмерным целым числом.
for
циклы могут быть вложены. Используйте вложил for
циклы, чтобы создать многомерные массивы компонентов.
Во вложенном for
циклы, итератор во вложенном цикле не может относиться к итератору в цикле выше его. Например, этот синтаксис недопустим:
for i=1:N for j=1:i ... end end
Объявление компонента с помощью for
цикл должен содержать for
итератор цикла на левой стороне как пустой идентификатор, например, pipe(i)
. Вы не можете использовать выражения или числа вместо итератора. Компоненты объявляются во вложенном for
цикл должен перечислить все итераторы, например:
for i=1:N for j=1:M components (ExternalAccess=none) resistor(i,j) = foundation.electrical.elements.resistor(R = R); end end end
Вы не можете включать условные разделы (что вы используете, чтобы задать варианты компонента) в for
циклы. Однако можно включать for
циклы в условных разделах.