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

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

На выходе насоса поток делится на две составляющих: поток утечки и поток к управляющему клапану. Мы моделируем утечку, , как ламинарный поток (см. блок уравнений 1).
Pkg.add(["CSV"])
cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
Блок уравнений 1
где:
- - поток насоса
- - поток к управляющему клапану
- - поток утечки
- - коэффициент потока
Моделируется турбулентный поток через управляющий клапан. Функция и модуль позволяют учесть поток в обоих направлениях (см. блок уравнений 2).
Блок уравнений 2
где:
- - поток через контрольный клапан
- - коэффициент расхода через отверстие
- - площадь отверстия
- - давление после управляющего клапана
- - плотность жидкости
Давление жидкости в цилиндре повышается за счёт этого потока. Также была смоделирована сжимаемость жидкости (см. блок уравнений 3).
Блок уравнений 3
где:
- - объем жидкости при давлении ,
- - скорость изменения давления в цилиндре по времени,
- - объемный модуль упругости жидкости,
- - объем жидкости в поршне при ,
- - площадь поперечного сечения цилиндра
Массы поршня и пружины не учитывались из-за больших гидравлических усилий. Блок уравнений 4 рассчитывает баланс сил на поршне.
Блок уравнений 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
Загрузка и визуализация данных, полученных в ходе симуляции.
Чтение 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()
Построение графика, описывающего изменение давления на участках гидравлической системы:
plot(p1[:,1], p1[:,2], label="Изменение давления на выходе насоса")
plot!(p2[:,1], p2[:,2], label="Изменение давления после регулирующего клапана")
plot!(p3[:,1], p3[:,2], label="Изменение давления в цилиндре")
В начале моделирования регулирующий клапан имеет нулевую площадь отверстия, которая затем увеличивается до кв.м. в течение всего моделирования продолжительностью 0,1 секунды. При закрытом клапане весь поток насоса переходит в утечку.
Когда клапан открывается, давления и увеличиваются, в то время как уменьшается в ответ на увеличение расхода. Когда поток насоса прекращается, пружина и поршень действуют как гидроаккумулятор, и непрерывно уменьшается. Поведение меняется по мере восстановления потока от насоса.
Вывод:
В данном примере было продемонстрировано моделирование гидравлической системы собранной из библиотеки базовых блоков. Данные симуляции были загружены, предобработаны и визуализированы с помощью функций вызванных библиотек.