水力系统建模
本示例将演示利用基础库的模块组装液压缸的建模过程。

图为模型示意图。泵模型引导水流 ,产生压力 ,在压力的作用下,层流 流向出口。控制阀模拟通过可变面积孔板的湍流。这种流动, ,形成一个中间压力, ,在连接到执行器气缸的管路中随之下降。气缸中的压力, ,在弹簧的作用下移动活塞,使其到达 x 位置。
Engee 中的模型示意图:

在泵出口处,流量分为两部分:泄漏流量和流向控制阀的流量。我们将泄漏流 建模为层流(见等式 1)。
Pkg.add(["CSV"])
cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
等式块 1
在哪里?
- - 泵的流量
- - 流向控制阀的流量
- - 泄漏流量
- - 流量系数
对通过调节阀的紊流进行建模。函数 和模块允许考虑双向流动(见等式块 2)。
方程组 2
其中
- - 通过调节阀的流量
- - 通过节流孔的流量系数
- - 孔口面积
- - 控制阀后的压力
- - 液体密度
气缸中的流体压力因这一流动而增加。流体的可压缩性也已模拟(见方程块 3)。
方程组 3
其中
- - 压力下的液体体积 、
- - 气缸中压力变化的时间速率、
- - 液体的体积弹性模量、
- - 时活塞中液体的体积、
- - 气缸的横截面积
由于液压力较大,因此未考虑活塞和弹簧的质量。方程组 4 计算了活塞上的力平衡。
方程块 4
在哪里?
- - 弹簧刚度
- - 层流系数
泵 "子系统
双击子系统 "泵",打开泵模型。它根据泵本身的流速和下游系统组件的流速计算输送压力。一维表格将流量数据定义为时间函数。模型计算出压力 ,如等式 1 所示。由于 是 (通过控制阀)的直接函数,因此形成了一个代数回路。设置初始压力值 可以提供更有效的解决方案。

阀/液压缸 "子系统
双击子系统 "阀门/液压缸",打开控制阀和液压缸模型。微分代数方程系统通过压力 对液压缸中的压力上升进行建模,压力上升作为导数出现在方程块 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 秒的模拟持续时间内增加到 平方米。阀门关闭时,泵的全部流量都转化为泄漏流量。
阀门打开时,压力 和 增加,而 则随着流量的增加而减小。当泵的流量停止时,弹簧和活塞充当液压蓄能器, 持续下降。当泵中的流量恢复时,阀的行为会发生变化。
结论
本例演示了由基本模块库组装而成的液压系统模拟。模拟数据的加载、预处理和可视化均使用了所调用库的功能。