Массивы компонентов обеспечивают интуитивно понятный способ моделирования составных компонентов с произвольным количеством однородных представителей, таких как сегментированные трубопроводы, блоки батарей или линий электропередачи.
Использование 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 класс member.
Массивы компонентов должны быть однородными, то есть все их представители должны принадлежать одному и тому же классу. Однако представители могут иметь различные значения параметров.
Пример массива компонентов с идентичными представителями см. в разделе Сегментированный трубопровод с использованием массива компонентов.
Для примера того, как можно задать различные значения параметров для определенных представителей массива компонентов, смотрите Пример примера - Блока батарей с использованием массивов отказов.
Размер массива может быть параметром или параметрическим выражением. Параметры, которые управляют размером массива, могут иметь свои ExternalAccess для атрибута задано значение modify, что позволяет пользователям блоков изменять размер массива.
Представители массива должны иметь ExternalAccess для атрибута задано значение none или observe.
Пустые массивы не поддерживаются.
Можно использовать for циклы для объявления массивов компонентов и для соединения представителей массива друг с другом. for петли имеют тот же синтаксис, что и циклы for в MATLAB®. Следующие правила и ограничения применяются к for циклы на языке Simscape:
for циклы могут содержать только components или connections.
The 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 циклы внутри условных сечений.