液压系统仿真
这个例子将演示一个液压缸的模拟组装从基本库的块。
图为模型示意图。 泵模型引导流量 ,成形压力 ,在其作用下层流 它在释放时流出。 控制阀模拟通过可变面积孔口的湍流。 这个线程, ,产生中间压力, ,其在将其连接到驱动缸的线中经历随后的下降。 气缸压力, ,移动活塞,其在来自弹簧的力的作用下,其结果是处于x位置。
工程师模型图:
在泵出口处,流量分为两部分:泄漏流量和流向控制阀的流量。 我们正在模拟泄漏, ,作为层流(参见等式块1)。
Pkg.add(["CSV"])
cd( @__DIR__ ) # Переместимся в каталог, где лежит текущий скрипт
homePath = string(@__DIR__)
方程块1
哪里:
- -泵流量
- -流向控制阀
- -漏电流
- -流量系数
模拟了通过控制阀的湍流. 功能 并且该模块允许您考虑两个方向的流量(参见公式块2)。
方程块2
哪里:
- -通过控制阀的流量
- -通过孔的流量
- -孔的面积
- -控制阀后的压力
- -液体密度
缸内的流体压力由于这种流动而增加。 还对液体的可压缩性进行了建模(参见等式块3)。
方程块3
哪里:
- -压力下的液体体积 ,
- -气缸内压力随时间变化的速率,
- -液体的体积弹性模量,
- -活塞内的液体体积 ,
- -圆柱体的横截面积
由于液压力高,活塞和弹簧的重量没有被考虑在内。 公式块4计算活塞上的力的平衡。
方程块4
哪里:
- -弹簧的刚度
- -层流系数
"泵"子系统
双击名为"Pump"的子系统以打开泵模型。 它根据泵本身的流量和之后系统元件的流量来计算供应压力。 一维表根据时间定义消耗数据。 模型计算压力 如等式块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文件,
然后转换为dataframe和matrix:
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="Изменение давления в цилиндре")
在模拟开始时,控制阀具有零开口面积,然后增加到 平方。m.在整个模拟期间持续0.1秒。 当阀门关闭时,整个泵流量变成泄漏。
当阀门打开时,压力 和 他们增加,而 它响应于消费的增加而减少。 当泵流量停止时,弹簧和活塞充当液压蓄能器,并且 它在不断减少。 随着泵的流量恢复,行为发生变化。
结论:
在这个例子中,演示了一个由基本块库组装而成的液压系统的模拟。 使用调用的库的函数加载、预处理和可视化仿真数据。