Документация Engee

Моделирование гидравлической системы

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

image.png

На рисунке показана принципиальная схема модели. Модель насоса направляет поток , формируя давление , под действием которого ламинарный поток вытекает на выпуск. В регулирующем клапане моделируется турбулентный поток через отверстие переменной площади. Этот поток, , формирует промежуточное давление, , которое подвергается последующему падению в линии, соединяющей его с цилиндром привода. Давление в цилиндре, , перемещает поршень, который находится под действием усилия со стороны пружины, в результате чего он оказывается в положении x.

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

single_hydraulic_cylinder_simulation—​1707475635711.png

На выходе насоса поток делится на две составляющих: поток утечки и поток к управляющему клапану. Мы моделируем утечку, , как ламинарный поток (см. блок уравнений 1).

cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
"/user/start/examples/base_simulation/single_hydraulic_cylinder_simulation"

Блок уравнений 1

где:

  • - поток насоса

  • - поток к управляющему клапану

  • - поток утечки

  • - коэффициент потока

Моделируется турбулентный поток через управляющий клапан. Функция и модуль позволяют учесть поток в обоих направлениях (см. блок уравнений 2).

Блок уравнений 2

где:

  • - поток через контрольный клапан

  • - коэффициент расхода через отверстие

  • - площадь отверстия

  • - давление после управляющего клапана

  • - плотность жидкости

Давление жидкости в цилиндре повышается за счёт этого потока. Также была смоделирована сжимаемость жидкости (см. блок уравнений 3).

Блок уравнений 3

где:

  • - объем жидкости при давлении ,

  • - скорость изменения давления в цилиндре по времени,

  • - объемный модуль упругости жидкости,

  • - объем жидкости в поршне при ,

  • - площадь поперечного сечения цилиндра

Массы поршня и пружины не учитывались из-за больших гидравлических усилий. Блок уравнений 4 рассчитывает баланс сил на поршне.

Блок уравнений 4

где:

  • - жёсткость пружины

  • - коэффициент ламинарного потока

Подсистема "Pump"

Двойным кликом по подсистеме с названием "Pump" откроется модель насоса. Она вычисляет давление подачи в зависимости от расхода самого насоса и расхода элементов системы после него. Одномерная таблица определяет данные о расходе в зависимости от времени. Модель вычисляет давление , как указано в блоке уравнений 1. Поскольку является прямой функцией от (через регулирующий клапан), формируется алгебраическая петля. Установка начального значения давления, , позволяет получить более эффективное решение.

single_hydraulic_cylinder_simulation—​1707296300526_2.png

Подсистема "Valve/Hydraulic cylinder"

Двойным кликом по подсистеме с названием "Valve/Hydraulic cylinder" откроются модели регулирующего клапана и гидравлического цилиндра. Система дифференциально-алгебраических уравнений моделирует повышение давления в цилиндре с помощью давления , которое фигурирует как производная в блоке уравнений 3. Если пренебречь массой поршня, то его положение и усилие пружины будут прямо пропорциональны , а скорость - прямо пропорциональна производной по времени от . Промежуточное давление является суммой и перепада давления, обусловленного потоком из клапана в цилиндр (блок уравнений 4).

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

single_hydraulic_cylinder_simulation—​1707297894902_2.png

Определение параметров гидравлической системы и начальных условий

Параметры системы и начальные условия задаются в кодовой ячейке:

A = 0.01
Ac = 0.001
Beta = 700000000
C1 = 2.50000000000000e-08
C2 = 3.00000000000000e-09
Cd = 0.610000000000000
F20 = 0
I = 100
K = 20500
V30 = 2.000000000000000e-05
V2 = 1.250000000000000e-05
V1 = 1.250000000000000e-05
rho = 800
Qmax = 0.005000000000000
p10 = 4.166666666666667e+06
M = 2500
m = 1.000000000000000e-03
L = 1.500000000000000
KA = 0.030000000000000;
Cdsqrt = Cd*sqrt(2/rho);
AcK = Ac/K
C1_1 = 1/C1
C2_1 = 1/C2
Ac2K = Ac^2/K;
Sample_Time = 0.0001;

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

Запуск и загрузка модели

В данной ячейке с кодом применяются методы для взаимодействия с потоком управления программы, try/catch:

try
    engee.close("single_hydraulic_cylinder_simulation", force=true) # закрытие модели
    catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
        m = engee.load("$(@__DIR__)/single_hydraulic_cylinder_simulation.engee") # загрузка модели
    end;
try
    engee.run(m, verbose=true) # запуск модели
    catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
        m = engee.load("$(@__DIR__)/single_hydraulic_cylinder_simulation.engee") # загрузка модели
        engee.run(m, verbose=true) # запуск модели
    end
Building...
Progress 0%
Progress 0%
Progress 5%
Progress 10%
Progress 15%
Progress 20%
Progress 25%
Progress 30%
Progress 35%
Progress 40%
Progress 45%
Progress 50%
Progress 55%
Progress 60%
Progress 65%
Progress 70%
Progress 75%
Progress 80%
Progress 85%
Progress 90%
Progress 95%
Progress 100%
Dict{String, DataFrame} with 3 entries:
  "p3" => 1001×2 DataFrame…
  "p2" => 1001×2 DataFrame…
  "p1" => 1001×2 DataFrame…

Загрузка и визуализация данных, полученных в ходе симуляции

Чтение csv-файлов с данными об изменении давления на разных участках гидравлической системы, с последующим преобразованием в датафрейм и матрицу:

using DataFrames, Plots, CSV # подключение библиотек
p1 = Matrix(CSV.read("p1.csv", DataFrame)); #загрузка данных об изменении давления на выходе насоса
p2 = Matrix(CSV.read("p2.csv", DataFrame)); #загрузка данных об изменении давления после регулирующего клапана
p3 = Matrix(CSV.read("p3.csv", DataFrame)); #загрузка данных об изменении давления в цилиндре

Подключение бэкэнда - метода отображения графики:

plotlyjs()
Plots.PlotlyJSBackend()

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

plot(p1[:,1], p1[:,2], label="Изменение давления на выходе насоса")
plot!(p2[:,1], p2[:,2], label="Изменение давления после регулирующего клапана")
plot!(p3[:,1], p3[:,2], label="Изменение давления в цилиндре")

interactive-scripts/images/base_simulation_single_hydraulic_cylinder_simulation/eb32c9afa97764261ae4d031590b27cd69474087

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

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

Вывод

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

Блоки, использованные в примере