Engee 文档
Notebook

水力冲击建模

在本例中,我们将研究如何使用等温流体 (IL) 库块对长管道中的 水力冲击 进行建模。

管道中的流体流量由阀门控制。首先,控制系统平稳地打开阀门,增加流速但保持静止。然后,当阀门突然关闭时(0.1 秒),我们可以观察到水锤效应。

模型说明

在最高层,模型如下:

image.png

一条管道连接着两个储液罐,第一个储液罐的压力为 6 个大气压。液体将流入第二个储液罐,第二个储液罐的压力也是恒定的 5 个大气压。

在两条 25 米长的管道之间是传感器子系统,流量和压力传感器都安装在这里。为了保持模型的拓扑结构,绘图模块被置于单独的子系统 "仪器 "中。在这里可以对数据进行过滤,但在本模型中,我们只将总压力(以帕斯卡为单位)乘以一个常数,就可以得到读数(以大气压为单位)。

阀门控制单元的运行取决于状态变量sqitching_mode ,其值可以是"Fast""Slow" 。快速切断流量会使系统进入非常活跃的不稳定状态,我们将对此进行演示。

In [ ]:
switching_mode = "Fast";

我们使用图块Variable Local Restriction (IL) 对阀门进行建模,管道则由图块Pipe (IL) 表示。为了观察水力冲击的效果,管道模型必须能够模拟流体的可压缩性和惯性(默认情况下管道不考虑惯性,必须在块Pipe (IL) 的设置中启用)。

快速阀门关闭建模

在该模型的变体中,使用传递函数$\frac{1}{0.01 s + 1}$ 对定义阀门重叠的阶跃函数进行了平滑处理。因此,我们观察到的是一个相当尖锐的瞬态过程。

In [ ]:
# Установим модель в режим быстрого переключения
switching_mode = "Fast";

# Загрузим и запустим модель
modelName = "water_hammer"
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");
data = engee.run( modelName )
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "p_f"  => 2501×2 DataFrame…
  "mdot" => 2501×2 DataFrame

从图中我们可以看到,经过长时间的稳定运行后,管道开始出现急剧的压力跃变,输送的液体质量也同样在 3 至 5 千克/秒之间剧烈波动。

In [ ]:
gr()
plot(
    plot( data["p_f"].time, data["p_f"].value, leg=false, title="Массовый расход, кг/с" ),
    plot( data["mdot"].time, data["mdot"].value, leg=false, title="Давление, атм" ),
    layout=(2,1)
)
Out[0]:

阀门缓慢关闭模型

如果我们控制阀门的速度足够慢(通过传递函数$\frac{1}{s + 1}$ 平滑阶跃),我们就能观察到平滑的瞬态。

In [ ]:
# Установим модель в режим быстрого переключения
switching_mode = "Slow";

# Запустим другой вариант модели
data = engee.run( modelName )
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "p_f"  => 2501×2 DataFrame…
  "mdot" => 2501×2 DataFrame
In [ ]:
gr()
plot(
    plot( data["p_f"].time, data["p_f"].value, leg=false, title="Массовый расход, кг/с" ),
    plot( data["mdot"].time, data["mdot"].value, leg=false, title="Давление, атм" ),
    layout=(2,1)
)
Out[0]:

结论

我们利用最少的辅助块,对液压冲击的效果进行了相当令人信服的演示。我们建立了一个具有两种操作方式(快速和慢速阀门关闭)的系统,并通过一个单独的子系统输出仪表盘,成功地使用了块FromGoto

为了使模型更加直观,可以添加更多的管路段并测量它们之间的压力,或者对阻尼罐进行建模