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