В этом примере показано, как можно смоделировать сегментированный трубопровод с помощью массива компонента. Эта сегментированная модель трубопровода является составным компонентом, который состоит из 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.