Последовательная и параллельная работа насосов#

1.  Введение#

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

 В связи с этим возникает ряд вопросов: как предсказать поведение такой системы до её физической сборки? Как избежать дорогостоящих ошибок и найти оптимальную конфигурацию? Ответ — использование системного моделирования и расчетов.

 В этом уроке мы сфокусируемся на двух фундаментальных способах соединения насосов: последовательном и параллельном. С помощью среды REPEAT VISION мы научимся создавать, настраивать и анализировать виртуальные модели этих систем. Вы увидите, как изменение конфигурации напрямую влияет на ключевые выходные параметры: расход (Q) и напор (H).

2.  Рассматриваемая модель и ее характеристики#

 В рамках данного урока рассматривается модель сети и насоса, представленные в уроке Построение расходно-напорной характеристики сети (см. рис. 1 ниже).

 Процесс построения модели, а также заполнения свойств отображен в уроке.

Рис. 1 Модель гидравлической сети с насосом Wilo Star-RS 25/4

Рис. 1 Модель гидравлической сети с насосом Wilo Star-RS 25/4#

 Построим кривые насоса и сети на основе данных, полученных в описанном уроке. Код для построения представлен далее.

Важно

Обращаем ваше внимание, в контексте данного урока связь между моделью REPEAT VISION и JupyterLite не устанавливается. В данном случае он используется как удобный инструмент визуализации.

Построение характеристик насоса и сети

# Импорт необходимых библиотек
import piplite
import pandas as pd

# Характеристика сети
system_head_curve_df = pd.DataFrame({
    'massFlowRate': [0.000000, 0.036842, 0.073684, 0.110526, 0.147368, 0.184211, 
                     0.221053, 0.257895, 0.294737, 0.331579, 0.368421, 0.405263,
                     0.442105, 0.478947, 0.515789, 0.552632, 0.589474, 0.626316,
                     0.663158, 0.700000],
    'pressureDrop': [30000.000000, 30037.216415, 30171.196080, 30356.192800, 
                     30591.674870, 30879.679700, 31218.609300, 31607.275800,
                     32044.753000, 32530.294700, 33063.283000, 33643.198700,
                     34209.597000, 34942.093300, 35660.350000, 36424.071000,
                     37232.990700, 38086.874000, 38985.507000, 39928.697000]
})

# Характеристика насоса Wilo Star-RS 25/4
pump_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6]
})

# Импортируем и устанавливаем необходимые библиотеки для визуализации
import matplotlib.pyplot as plt
await piplite.install("seaborn")
import seaborn as sns

def plot_pressure_drop_curve(system_head_curve_df, pump_curve__df, figsize=(10, 6)):
    """
    Создает график зависимости потерь давления от массового расхода.
    
    Parameters:
    -----------
    system_head_curve_df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики сети
    pump_curve__df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики насоса
    figsize : tuple
        Размер графика в дюймах (ширина, высота)
    """
    
    # Настройка стиля графика
    plt.style.use('seaborn-v0_8-dark')
    
    # Создаем фигуру и оси с указанным размером
    fig, ax = plt.subplots(figsize=figsize, dpi=100)
    
    # Фильтруем данные, исключая NaN значения для чистоты графика
    clean_data = system_head_curve_df.dropna(subset=['pressureDrop'])
    # Данные для насоса
    clean_pump_data = pump_curve__df.dropna(subset=['pressureDrop'])
    # Проверяем, есть ли данные для отображения
    if len(clean_data) == 0:
        print("Нет данных для построения графика (все значения NaN)")
        return
    
    # Создаем основной график - линию с маркерами
    # Используем маркеры 'o' для точек и линию для соединения
    
    # График РНХ сети
    ax.plot(clean_data['massFlowRate'], 
            clean_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='steelblue',         # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика гидравлической сети',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # График РНХ насоса
    ax.plot(clean_pump_data['massFlowRate'], 
            clean_pump_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='#e63946',            # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика насоса',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # Настройка осей графика
    ax.set_xlabel('Массовый расход, кг/с', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    ax.set_ylabel('Потери давления, Па', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    # Заголовок графика
    ax.set_title('Расходно-напорная характеристика', 
                 fontsize=14, 
                 fontweight='bold', 
                 pad=20)  # Отступ заголовка
    
    # Добавляем сетку
    ax.grid(True, which='both', linestyle='--', color='#2F4F4F', alpha=0.6)
    
    # Настраиваем пределы осей с небольшим запасом
    x_min, x_max = clean_data['massFlowRate'].min(), clean_data['massFlowRate'].max()
    y_min, y_max = clean_data['pressureDrop'].min(), clean_data['pressureDrop'].max()
    
    # Добавляем 5% запаса по осям
    x_padding = (x_max - x_min) * 0.05
    y_padding = (y_max - y_min) * 0.05
    
    ax.set_xlim(x_min - x_padding, x_max + x_padding)
    ax.set_ylim(y_min - 12 * y_padding, y_max + y_padding)
    
    # Добавляем легенду с настройками позиционирования
    ax.legend(loc='lower right', 
          bbox_to_anchor=(1.0, 0.012),
          fontsize=10, 
          framealpha=0.9, 
          facecolor='#2F4F4F', 
          edgecolor='white')
    
    # Настраиваем внешний вид графика
    # Убираем лишние отступы
    plt.tight_layout()
    # Отображаем график
    plt.show()
    # Возвращаем объекты фигуры и осей для возможной дальнейшей настройки
    return fig, ax

# Создаем график
fig, ax = plot_pressure_drop_curve(system_head_curve_df, pump_curve_df)

 В результате выполнения кода получаем следующие кривые (см. рис. 2 ниже), характеризующие работу одного насоса на заданную сеть.

Рис. 2 Графики характеристик насоса и сети

Рис. 2 Графики характеристик насоса и сети#

3.  Последовательная работа насосов на сеть#

3.1.  Описание#

 Последовательная работа насосов в сети применяется в случаях, когда напор, развиваемый одним насосом, недостаточен для подачи жидкости на заданную высоту, или в тех случаях, когда последовательное включение насосов позволяет обеспечить подачу необходимого расхода при заданной характеристике сети. [1]

 При такой схеме включения напорный патрубок одного насоса подключается к всасывающему патрубку второго насоса.

3.2.  Построение характеристики#

 Суммарная характеристика работы двух последовательно включенных насосов строится путем сложения их ординат при одних и тех же подачах, так как напор, развиваемый последовательно работающими насосами, равен сумме напоров, развиваемых каждым из этих насосов. [1]

 Построим характеристику двух одниковых насосов Wilo Star-RS 25/4, работающих последовательно средствами JupyterLite.

Код для построения характеристики

# Импорт необходимых библиотек
import piplite
import pandas as pd

# Характеристика сети
system_head_curve_df = pd.DataFrame({
    'massFlowRate': [0.000000, 0.036842, 0.073684, 0.110526, 0.147368, 0.184211, 
                     0.221053, 0.257895, 0.294737, 0.331579, 0.368421, 0.405263,
                     0.442105, 0.478947, 0.515789, 0.552632, 0.589474, 0.626316,
                     0.663158, 0.700000],
    'pressureDrop': [30000.000000, 30037.216415, 30171.196080, 30356.192800, 
                     30591.674870, 30879.679700, 31218.609300, 31607.275800,
                     32044.753000, 32530.294700, 33063.283000, 33643.198700,
                     34209.597000, 34942.093300, 35660.350000, 36424.071000,
                     37232.990700, 38086.874000, 38985.507000, 39928.697000]
})
# Характеристика насоса Wilo Star-RS 25/4
pump_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6]
})

# Получаем характеристику двух последовательно работающих насосов
pump_series_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6]
})
pump_series_curve_df['pressureDrop'] = pump_series_curve_df['pressureDrop'] * 2

# Импортируем и устанавливаем необходимые библиотеки для визуализации
import matplotlib.pyplot as plt
await piplite.install("seaborn")
import seaborn as sns

def plot_pressure_drop_curve(system_head_curve_df, pump_curve__df, pump_series_curve_df, figsize=(10, 6)):
    """
    Создает график зависимости потерь давления от массового расхода.
    
    Parameters:
    -----------
    system_head_curve_df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики сети
    pump_curve__df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики насоса
    pump_series_curve_df: pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики двух последовательно работающих насосов
    figsize : tuple
        Размер графика в дюймах (ширина, высота)
    """
    
    # Настройка стиля графика
    plt.style.use('seaborn-v0_8-dark')
    
    # Создаем фигуру и оси с указанным размером
    fig, ax = plt.subplots(figsize=figsize, dpi=100)
    
    # Фильтруем данные, исключая NaN значения для чистоты графика
    clean_data = system_head_curve_df.dropna(subset=['pressureDrop'])
    # Данные для насоса
    clean_pump_data = pump_curve__df.dropna(subset=['pressureDrop'])
    # Данные для двух последовательных насосов
    clean_pump_series_data = pump_series_curve_df.dropna(subset=['pressureDrop'])
    # Проверяем, есть ли данные для отображения
    if len(clean_data) == 0:
        print("Нет данных для построения графика (все значения NaN)")
        return
    
    # Создаем основной график - линию с маркерами
    # Используем маркеры 'o' для точек и линию для соединения
    
    # График РНХ сети
    ax.plot(clean_data['massFlowRate'], 
            clean_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='steelblue',         # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика гидравлической сети',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # График РНХ насоса
    ax.plot(clean_pump_data['massFlowRate'], 
            clean_pump_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='#e63946',            # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика насоса',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров

    # График РНХ последовательно работающих насосов
    ax.plot(clean_pump_series_data['massFlowRate'], 
            clean_pump_series_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='#ffd166',            # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика двух последовательно работающих насосов',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # Настройка осей графика
    ax.set_xlabel('Массовый расход, кг/с', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    ax.set_ylabel('Потери давления, Па', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    # Заголовок графика
    ax.set_title('Расходно-напорная характеристика', 
                 fontsize=14, 
                 fontweight='bold', 
                 pad=20)  # Отступ заголовка
    
    # Добавляем сетку
    ax.grid(True, which='both', linestyle='--', color='#2F4F4F', alpha=0.6)
    
    # Настраиваем пределы осей с небольшим запасом
    x_min, x_max = clean_data['massFlowRate'].min(), clean_data['massFlowRate'].max()
    y_min, y_max = clean_data['pressureDrop'].min(), clean_pump_series_data['pressureDrop'].max()
    
    # Добавляем 5% запаса по осям
    x_padding = (x_max - x_min) * 0.05
    y_padding = (y_max - y_min) * 0.05
    
    ax.set_xlim(x_min - x_padding, x_max + x_padding)
    ax.set_ylim(y_min - 12 * y_padding, y_max + y_padding)
    
    # Добавляем легенду с настройками позиционирования
    ax.legend(loc='lower right', 
          bbox_to_anchor=(1.0, 0.012),
          fontsize=10, 
          framealpha=0.9, 
          facecolor='#2F4F4F', 
          edgecolor='white')
    
    # Настраиваем внешний вид графика
    # Убираем лишние отступы
    plt.tight_layout()
    # Отображаем график
    plt.show()
    # Возвращаем объекты фигуры и осей для возможной дальнейшей настройки
    return fig, ax

# Создаем график
fig, ax = plot_pressure_drop_curve(system_head_curve_df, pump_curve_df,pump_series_curve_df)

 После выполнения кода получаем следующие характеристики, рис. 3:

Рис. 3 Кривая последовательной работы насосов

Рис. 3 Кривая последовательной работы насосов#

 Для определения рабочей точки недостаточно точек графика совместной работы насосов, добавим точки на основе данных о РНХ насоса и повторим построения (см. рис. 4 ниже).

Необходимые изменения данных

# Характеристика насоса Wilo Star-RS 25/4
pump_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881, 0.4851, 0.5544, 0.6238],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6, 21049.3, 18112.2, 15175.1]
})

# Получаем характеристику двух последовательно работающих насосов
pump_series_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881, 0.4851, 0.5544, 0.6238],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6, 21049.3, 18112.2, 15175.1]
})
pump_series_curve_df['pressureDrop'] = pump_series_curve_df['pressureDrop'] * 2

Рис. 4 Кривая последовательной работы насосов с большим количеством расчетных точек

Рис. 4 Кривая последовательной работы насосов с большим количеством расчетных точек#

 Таким образом, рабочая точка насоса соответствует расходу около 0.56 [кг/с].

 Перейдем в модель и рассчитаем рабочую точку в ней.

3.3.  Реализация последовательной работы насосов в математической модели#

 Добавьте еще один насос после первого, как показано на рис. 5:

Рис. 5 Модель последовательной работы насосов

Рис. 5 Модель последовательной работы насосов#

 Запустите модель и определите рабочую точку по датчику расхода, рис. 6:

Рис. 6 Расход среды при последовательной работе двух насосов Wilo Star-RS 25/4

Рис. 6 Расход среды при последовательной работе двух насосов Wilo Star-RS 25/4#

 Значение расхода составляет 0.5607444 [кг/с], что соответствует построенным ранее кривым и определённой графически рабочей точке.

4.  Параллельная работа насосов на сеть#

4.1.  Описание#

 Параллельная работа насосов применяется в следующих случаях:

  1. Для увеличения общей производительности системы (подачи)

  2. Для обеспечения резервирования и повышения надежности системы

  3. Для гибкого регулирования производительности и экономии энергии

 При такой схеме включения напорный патрубок каждого насоса подключается к общей системе.

4.2.  Построение характеристики#

 Суммарная характеристика работы двух параллельно включенных насосов строится путем сложения их абсцисс при одних и тех же напорах.

 Суммарная подача насосов, работающих параллельно в общей системе, меньше, чем сумма подачи этих же насосов при их раздельной работе.

Подсказка

При увеличении общего расхода среды, подаваемой в систему, возрастают потери напора, а следовательно, увеличивается и напор, необходимый для подачи данного расхода, что влечет за собой уменьшение подачи каждого насоса. [1]

 Построим характеристику двух одниковых насосов Wilo Star-RS 25/4, работающих параллельно средствами JupyterLite.

Код для построения характеристики

# Импорт необходимых библиотек
import piplite
import pandas as pd

# Характеристика сети
system_head_curve_df = pd.DataFrame({
    'massFlowRate': [0.000000, 0.036842, 0.073684, 0.110526, 0.147368, 0.184211, 
                     0.221053, 0.257895, 0.294737, 0.331579, 0.368421, 0.405263,
                     0.442105, 0.478947, 0.515789, 0.552632, 0.589474, 0.626316,
                     0.663158, 0.700000],
    'pressureDrop': [30000.000000, 30037.216415, 30171.196080, 30356.192800, 
                     30591.674870, 30879.679700, 31218.609300, 31607.275800,
                     32044.753000, 32530.294700, 33063.283000, 33643.198700,
                     34209.597000, 34942.093300, 35660.350000, 36424.071000,
                     37232.990700, 38086.874000, 38985.507000, 39928.697000]
})

# Характеристика насоса Wilo Star-RS 25/4
pump_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6]
})

# Получаем характеристику двух параллельно работающих насосов
pump_parallel_curve_df = pd.DataFrame({
    'massFlowRate': [0.0, 0.0693, 0.1386, 0.2079, 0.2772, 0.3465, 0.3881],
    'pressureDrop': [38182.5, 36028.6, 33776.8, 31525.0, 29077.4, 26434.0, 24867.6]
})
pump_parallel_curve_df['massFlowRate'] = pump_parallel_curve_df['massFlowRate'] * 2


# Импортируем и устанавливаем необходимые библиотеки для визуализации
import matplotlib.pyplot as plt
await piplite.install("seaborn")
import seaborn as sns

def plot_pressure_drop_curve(system_head_curve_df, pump_curve__df, pump_parallel_curve_df, figsize=(10, 6)):
    """
    Создает график зависимости потерь давления от массового расхода.
    
    Parameters:
    -----------
    system_head_curve_df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики сети
    pump_curve__df : pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики насоса
    pump_parallel_curve_df: pd.DataFrame
        DataFrame с колонками 'massFlowRate' и 'pressureDrop' для характеристики двух параллельно работающих насосов
    figsize : tuple
        Размер графика в дюймах (ширина, высота)
    """
    
    # Настройка стиля графика
    plt.style.use('seaborn-v0_8-dark')
    
    # Создаем фигуру и оси с указанным размером
    fig, ax = plt.subplots(figsize=figsize, dpi=100)
    
    # Фильтруем данные, исключая NaN значения для чистоты графика
    clean_data = system_head_curve_df.dropna(subset=['pressureDrop'])
    # Данные для насоса
    clean_pump_data = pump_curve__df.dropna(subset=['pressureDrop'])
    # Данные для двух параллельно работающих насосов
    clean_pump_parallel_data = pump_parallel_curve_df.dropna(subset=['pressureDrop'])
    # Проверяем, есть ли данные для отображения
    if len(clean_data) == 0:
        print("Нет данных для построения графика (все значения NaN)")
        return
    
    # Создаем основной график - линию с маркерами
    # Используем маркеры 'o' для точек и линию для соединения
    
    # График РНХ сети
    ax.plot(clean_data['massFlowRate'], 
            clean_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='steelblue',         # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика гидравлической сети',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # График РНХ насоса
    ax.plot(clean_pump_data['massFlowRate'], 
            clean_pump_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='#e63946',            # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика насоса',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров

    # График РНХ параллельно работающих насосов
    ax.plot(clean_pump_parallel_data['massFlowRate'], 
            clean_pump_parallel_data['pressureDrop'], 
            marker='o',                # Маркеры в виде кружков
            markersize=8,              # Размер маркеров
            linewidth=2,               # Толщина линии
            color='#ffd166',            # Цвет линии
            alpha=0.8,                 # Прозрачность
            label='Характеристика двух параллельно работающих насосов',   # Метка для легенды
            markerfacecolor='white',   # Заливка маркеров
            markeredgewidth=2)         # Толщина обводки маркеров
    
    # Настройка осей графика
    ax.set_xlabel('Массовый расход, кг/с', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    ax.set_ylabel('Потери давления, Па', 
                  fontsize=12, 
                  fontweight='bold', 
                  labelpad=10)  # Отступ подписи от оси
    
    # Заголовок графика
    ax.set_title('Расходно-напорная характеристика', 
                 fontsize=14, 
                 fontweight='bold', 
                 pad=20)  # Отступ заголовка
    
    # Добавляем сетку
    ax.grid(True, which='both', linestyle='--', color='#2F4F4F', alpha=0.6)
    
    # Настраиваем пределы осей с небольшим запасом
    x_min, x_max = clean_data['massFlowRate'].min(), clean_pump_parallel_data['massFlowRate'].max()
    y_min, y_max = clean_pump_parallel_data['pressureDrop'].min(), clean_data['pressureDrop'].max()
    
    # Добавляем 5% запаса по осям
    x_padding = (x_max - x_min) * 0.05
    y_padding = (y_max - y_min) * 0.05
    
    ax.set_xlim(x_min - x_padding, x_max + x_padding)
    ax.set_ylim(y_min - 12 * y_padding, y_max + y_padding)
    
    # Добавляем легенду с настройками позиционирования
    ax.legend(loc='lower right', 
          bbox_to_anchor=(1.0, 0.012),
          fontsize=10, 
          framealpha=0.9, 
          facecolor='#2F4F4F', 
          edgecolor='white')
    
    # Настраиваем внешний вид графика
    # Убираем лишние отступы
    plt.tight_layout()
    # Отображаем график
    plt.show()
    # Возвращаем объекты фигуры и осей для возможной дальнейшей настройки
    return fig, ax

# Создаем график
fig, ax = plot_pressure_drop_curve(system_head_curve_df, pump_curve_df,pump_parallel_curve_df)

 После выполнения кода получаем следующие характеристики, рис. 7:

Рис. 7 Кривая параллельной работы насосов

Рис. 7 Кривая параллельной работы насосов#

 Таким образом, рабочая точка насоса соответствует расходу около 0.35 [кг/с].

 Перейдем в модель и рассчитаем рабочую точку в ней.

4.3.  Реализация параллельной работы насосов в математической модели#

 Скопируйте модель, используемую для исследования последовательной работы насосов, расположите и подключите насосы по паралелльной схеме, как показано на рис. 8. В качестве связанного блока для датчика расхода укажите трубопровод 2, чтобы измерять суммарный расход в сети, а не расход одного насоса.

Рис. 8 Модель параллельной работы насосов

Рис. 8 Модель параллельной работы насосов#

 Запустите модель и определите рабочую точку по датчику расхода, рис. 9:

Рис. 9 Расход среды при параллельной работе двух насосов Wilo Star-RS 25/4

Рис. 9 Расход среды при параллельной работе двух насосов Wilo Star-RS 25/4#

 Значение расхода составляет 0.3453702 [кг/с], что соответствует построенным ранее кривым и определённой графически рабочей точке.

5.  Выводы#

 В ходе выполнения урока была успешно освоена методика сравнительного анализа двух принципиальных схем совместной работы насосов — последовательной и параллельной — с использованием ПО REPEAT VISION. Практическая работа позволила реализовать полный цикл инженерного исследования: от построения теоретических суммарных характеристик на основе классических методов (суммирования ординат для последовательного и абсцисс для параллельного соединения) до верификации этих расчётов с помощью математических моделей.

 Системное моделирование во многом упрощает процесс расчета работы гидравлической системы с насосным оборудованием и оптимизирует процесс настройки и подбора необходимых параметров (геометрия, материалы, конфигурация, состав оборудования), сокращая предпроектные этапы проектирования. В конечном итоге повышается надежность и энергоэффективность итогового решения.

6.  Источники#