Сообщество Engee

Моделирование управления давлением в трубопроводе в Engee

Автор
avatar-aigul678aigul678
Notebook

Моделирование управления давлением в трубопроводе

В статье рассматривается актуальная задача автоматического управления давлением в трубопроводах, важная для повышения надежности и эффективности промышленных систем. Описан подход к моделированию таких систем с использованием среды разработки Engee, которая позволяет создавать физико-математические модели, интегрировать PID-регуляторы и визуализировать процессы. Отмечены задачи прогнозирования превышения рабочих значений давления, динамики давления, объема запаса в системе и реагирования на аварийные ситуации и сезонные изменения. Модель управления построена как замкнутая система, включающая источник давления, регулирующий клапан, датчик давления, блоки утечек и резервуар. Управление осуществляется PID- или PI-регулятором, который корректирует клапан по ошибке между заданным и фактическим давлением. Среди элементов модели — насыщение сигнала, ограничение скорости изменения и антиинтегральная коррекция для предотвращения перерегулирования. Модель способна численно имитировать переходные процессы и возмущения, например, утечки.
Рассмотрена архитектура моделей: источник давления, регулирующий клапан, объем трубы, датчики и блоки утечки, смоделированные в Engee. Приведены алгоритмы настройки регулятора с параметрами Kp и Ki, обеспечивающие баланс между быстродействием и устойчивостью. Модель экспортирует данные в CSV, строит графики и позволяет исследовать сценарии аварийных режимов и изменений параметров окружающей среды.
Использование Engee позволяет инженерам создавать цифровые двойники систем, тестировать управление без рисков для оборудования, анализировать нештатные ситуации и автоматически переносить алгоритмы в аппаратную среду. Это ускоряет проектирование инновационных систем управления, повышая надежность и безопасность трубопроводного транспорта и промышленного оборудования. Статья базируется на материалах Engee Helpcenter и нормативных документах ГОСТ.
Таким образом, представлена эффективная методология моделирования и автоматизации управления давлением на базе Engee с возможностью гибкой настройки и расширения моделей для промышленных нужд, направленная на повышение надежности и цифровизации технологических систем.

Принцип работы модели

Трубопровод описывается блоками библиотеки физического моделирования, в частности, за его объём отвечает блок Объём.

Через Клапан 1 жидкость поступает из блока Источник в блок Объём. К нему, в свою очередь, присоединён Датчик давления, с которого сигнал поступает на систему управления, представленную сумматором, задатчиком и PID-регулятором.

Схема модели:

image.png

PID-регулятор посылает управляющий сигнал на Клапан 1, чтобы тот открылся или закрылся, обеспечивая регулирование давления.

Справа от блока Объём, по пути движения жидкости, находится блок Утечка, который представляет собой, как и Клапан 1 управляемый дроссель.

Блок Утечка создаёт некоторое "случайное" истечение жидкости из моделируемого трубопровода.

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

Граничные условия

  1. В источнике давление всегда поддерживается 151,3 кПа.
  2. В резервуаре, характеризующем пространство, куда осуществляется сброс жидкости через утечку, давление всегда равно 50 кПа.

Начальные условия:

  1. Начальное давление в трубопроводе равно 100 кПа.
  2. Сигнал задатчика равен 100000, что в контексте регулирования означает 100 кПа.

Определение функции для загрузки и запуска модели:

In [ ]:
function start_model_engee()
    try
        engee.close("liquid_pressure_regulator", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/liquid_pressure_regulator.engee") # загрузка модели
        end;

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/liquid_pressure_regulator.engee") # загрузка модели
            engee.run(m) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

Запуск симуляции

In [ ]:
try
    start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
    catch err
    end;

Выделение из переменной simout данных о температуре участков и их запись в переменные:

In [ ]:
result = simout;
res = collect(result)
Out[0]:
14-element Vector{WorkspaceArray}:
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.port_a.p")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.restriction_area_in")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.rho_a")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Задатчик.1")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.mdot_a")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Сумматор.1")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.delta_p")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.rho_b")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.Vdot_a")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.port_b.p")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.mdot_b")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Датчик давления.1")
 WorkspaceArray{Float64}("liquid_pressure_regulator/PID-регулятор.1")
 WorkspaceArray{Float64}("liquid_pressure_regulator/Клапан 1.Vdot_b")

Запись в переменные сигналов задатчика и датчика давления:

In [ ]:
control_signal = collect(res[4])
pressure = collect(res[12])
Out[0]:
10001×2 DataFrame
9976 rows omitted
Rowtimevalue
Float64Float64
10.0100000.0
20.011.00783e5
30.021.01528e5
40.031.00949e5
50.041.01504e5
60.051.00924e5
70.061.00693e5
80.071.00127e5
90.0899619.1
100.0999082.9
110.198723.7
120.1198441.9
130.1298267.5
999099.891.20968e5
999199.91.20968e5
999299.911.20967e5
999399.92120966.0
999499.931.20965e5
999599.941.20964e5
999699.951.20964e5
999799.961.20963e5
999899.971.20962e5
999999.981.20961e5
1000099.991.20961e5
10001100.01.2096e5

Визуализация результатов моделирования

In [ ]:
using Plots
plot(control_signal[:,1], control_signal[:,2], label="Задатчик", linewidth=3)
plot!(pressure[:,1], pressure[:,2], label="Датчик давления", linewidth=3)
image.png

Вывод:

В данном примере было продемонстрировано моделирование физического объекта с системой автоматического управления. Время переходного процесса составляет около 15 с, давление стабилизируется в допустимых пределах, его незначительные колебания связаны с утечкой жидкости из трубопровода.