水力冲击建模¶
在本例中,我们将研究如何使用等温流体 (IL) 库块对长管道中的 水力冲击 进行建模。
管道中的流体流量由阀门控制。首先,控制系统平稳地打开阀门,增加流速但保持静止。然后,当阀门突然关闭时(0.1 秒),我们可以观察到水锤效应。
模型说明¶
在最高层,模型如下:
一条管道连接着两个储液罐,第一个储液罐的压力为 6 个大气压。液体将流入第二个储液罐,第二个储液罐的压力也是恒定的 5 个大气压。
在两条 25 米长的管道之间是传感器子系统,流量和压力传感器都安装在这里。为了保持模型的拓扑结构,绘图模块被置于单独的子系统 "仪器 "中。在这里可以对数据进行过滤,但在本模型中,我们只将总压力(以帕斯卡为单位)乘以一个常数,就可以得到读数(以大气压为单位)。
阀门控制单元的运行取决于状态变量sqitching_mode
,其值可以是"Fast"
或"Slow"
。快速切断流量会使系统进入非常活跃的不稳定状态,我们将对此进行演示。
switching_mode = "Fast";
我们使用图块Variable Local Restriction (IL)
对阀门进行建模,管道则由图块Pipe (IL)
表示。为了观察水力冲击的效果,管道模型必须能够模拟流体的可压缩性和惯性(默认情况下管道不考虑惯性,必须在块Pipe (IL)
的设置中启用)。
快速阀门关闭建模¶
在该模型的变体中,使用传递函数$\frac{1}{0.01 s + 1}$ 对定义阀门重叠的阶跃函数进行了平滑处理。因此,我们观察到的是一个相当尖锐的瞬态过程。
# Установим модель в режим быстрого переключения
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 )
从图中我们可以看到,经过长时间的稳定运行后,管道开始出现急剧的压力跃变,输送的液体质量也同样在 3 至 5 千克/秒之间剧烈波动。
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)
)
阀门缓慢关闭模型¶
如果我们控制阀门的速度足够慢(通过传递函数$\frac{1}{s + 1}$ 平滑阶跃),我们就能观察到平滑的瞬态。
# Установим модель в режим быстрого переключения
switching_mode = "Slow";
# Запустим другой вариант модели
data = engee.run( modelName )
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)
)
结论¶
我们利用最少的辅助块,对液压冲击的效果进行了相当令人信服的演示。我们建立了一个具有两种操作方式(快速和慢速阀门关闭)的系统,并通过一个单独的子系统输出仪表盘,成功地使用了块From
和Goto
。
为了使模型更加直观,可以添加更多的管路段并测量它们之间的压力,或者对阻尼罐进行建模