Моделирование гидравлической системы
В данном примере будет продемонстрировано моделирование гидроцилиндра, собранного из блоков базовой библиотеки.
На рисунке показана принципиальная схема модели. Модель насоса направляет поток , формируя давление , под действием которого ламинарный поток вытекает на выпуск. В регулирующем клапане моделируется турбулентный поток через отверстие переменной площади. Этот поток, , формирует промежуточное давление, , которое подвергается последующему падению в линии, соединяющей его с цилиндром привода. Давление в цилиндре, , перемещает поршень, который находится под действием усилия со стороны пружины, в результате чего он оказывается в положении x.
Схема модели в Engee:
На выходе насоса поток делится на две составляющих: поток утечки и поток к управляющему клапану. Мы моделируем утечку, , как ламинарный поток (см. блок уравнений 1).
cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
"/user/start/examples/base_simulation/single_hydraulic_cylinder_simulation"
Блок уравнений 1
где:
-
- поток насоса
-
- поток к управляющему клапану
-
- поток утечки
-
- коэффициент потока
Моделируется турбулентный поток через управляющий клапан. Функция и модуль позволяют учесть поток в обоих направлениях (см. блок уравнений 2).
Блок уравнений 2
где:
-
- поток через контрольный клапан
-
- коэффициент расхода через отверстие
-
- площадь отверстия
-
- давление после управляющего клапана
-
- плотность жидкости
Давление жидкости в цилиндре повышается за счёт этого потока. Также была смоделирована сжимаемость жидкости (см. блок уравнений 3).
Блок уравнений 3
где:
-
- объем жидкости при давлении ,
-
- скорость изменения давления в цилиндре по времени,
-
- объемный модуль упругости жидкости,
-
- объем жидкости в поршне при ,
-
- площадь поперечного сечения цилиндра
Массы поршня и пружины не учитывались из-за больших гидравлических усилий. Блок уравнений 4 рассчитывает баланс сил на поршне.
Подсистема "Pump"
Двойным кликом по подсистеме с названием "Pump" откроется модель насоса. Она вычисляет давление подачи в зависимости от расхода самого насоса и расхода элементов системы после него. Одномерная таблица определяет данные о расходе в зависимости от времени. Модель вычисляет давление , как указано в блоке уравнений 1. Поскольку является прямой функцией от (через регулирующий клапан), формируется алгебраическая петля. Установка начального значения давления, , позволяет получить более эффективное решение.
Подсистема "Valve/Hydraulic cylinder"
Двойным кликом по подсистеме с названием "Valve/Hydraulic cylinder" откроются модели регулирующего клапана и гидравлического цилиндра. Система дифференциально-алгебраических уравнений моделирует повышение давления в цилиндре с помощью давления , которое фигурирует как производная в блоке уравнений 3. Если пренебречь массой поршня, то его положение и усилие пружины будут прямо пропорциональны , а скорость - прямо пропорциональна производной по времени от . Промежуточное давление является суммой и перепада давления, обусловленного потоком из клапана в цилиндр (блок уравнений 4).
Подсистема регулирующего клапана вычисляет течение через отверстие (блок уравнений 2). В качестве входных данных она использует давление на входе и выходе из отверстия и переменную площадь.
Определение параметров гидравлической системы и начальных условий
Параметры системы и начальные условия задаются в кодовой ячейке:
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="Изменение давления в цилиндре")
В начале моделирования регулирующий клапан имеет нулевую площадь отверстия, которая затем увеличивается до кв.м. в течение всего моделирования продолжительностью 0,1 секунды. При закрытом клапане весь поток насоса переходит в утечку.
Когда клапан открывается, давления и увеличиваются, в то время как уменьшается в ответ на увеличение расхода. Когда поток насоса прекращается, пружина и поршень действуют как гидроаккумулятор, и непрерывно уменьшается. Поведение меняется по мере восстановления потока от насоса.