Массивы компонентов обеспечивают интуитивно понятный способ моделирования составных компонентов с произвольным количеством однородных элементов, таких как сегментированные трубопроводы, батарейные пакеты или линии передачи.
Использовать for loop для объявления массива компонентов-членов:
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 или 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 loop должен перечислять все итераторы, например:
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 петли внутри условных сечений.