Массивы компонента

О массивах компонента

Массивы компонента обеспечивают интуитивный способ смоделировать составные компоненты с произвольным числом гомогенных членов, такие как сегментированные трубопроводы, блоки батарей или линии электропередачи.

Используйте 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 или 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 циклы в условных разделах.

Похожие темы