Сегментированный конвейер Используя массив компонента

В этом примере показано, как можно смоделировать сегментированный конвейер с помощью массива компонента. Эта сегментированная конвейерная модель является составным компонентом, который состоит из N идентичные сегменты соединяются последовательно. Отдельные сегменты трубопровода представлены блоками Pipe (IL) из библиотеки Foundation. N параметр, который может изменить пользователь блока.

component SegmentedPipeline
  parameters
     N = 10; 			% Number of segments
     segm_length = { 5, 'm' }; 	% Length of each segment
  end

  % Ports at the two ends of the pipeline
  nodes
     A = foundation.isothermal_liquid.isothermal_liquid; % A:left
     B = foundation.isothermal_liquid.isothermal_liquid; % B:right
  end

  % Declare array of N components
  for i=1:N
     components (ExternalAccess=none)
	pipe(i) = foundation.isothermal_liquid.elements.pipe(length = segm_length);
     end
  end

  % Connect all segments in series
  for i=1:(N-1)
     connections
	connect(pipe(i).B, pipe(i+1).A);
     end
  end

  % Connect two ends of pipeline to first and last segment, respectively
  connections
     connect(A, pipe(1).A);
     connect(B, pipe(N).B);
  end
end

В этом примере, ради простоты, SegmentedPipeline компонент имеет только два модифицируемых параметра: N (Number of segments) и segm_length (Length of each segment). Однако можно сделать другие параметры базового блока Pipe (IL) доступными от составного диалогового окна блока компонента верхнего уровня, как описано в Параметризации Составных Компонентов. Параметр N, который задает размер массивов и будет используемым в качестве верхнего предела для for итератор цикла, объявляется как безразмерное целое число.

Используйте for цикл, чтобы объявить массив N компоненты члена:

  for i=1:N
     components (ExternalAccess=none)
	pipe(i) = foundation.isothermal_liquid.elements.pipe(length = segm_length);
     end
  end

В этом примере все сегменты трубопровода имеют ту же длину. Для примера членов компонента массивов, имеющих различные значения параметров, смотрите Тематическое исследование — Блок батарей с Отказом Используя Массивы.

Используйте другой for цикл, чтобы соединить все сегменты последовательно, путем соединения узла B из каждого сегмента трубопровода (кроме последнего) к узлу A из следующего сегмента:

  for i=1:(N-1)
     connections
	connect(pipe(i).B, pipe(i+1).A);
     end
  end

Наконец, соедините внутреннюю цепь сегментов к двум концам конвейера путем соединения узла A из составного компонента к узлу A из первого сегмента и соединяющегося узла B из составного компонента к узлу B из последнего сегмента:

  connections
     connect(A, pipe(1).A);
     connect(B, pipe(N).B);
  end
end

Получившийся блок имеет два изотермических жидких порта, A и B и два модифицируемых параметра: Number of segments и Length of each segment.

Похожие темы