基于Qt的串联水电站过渡过程图形建模与计算
2023-11-27赵桂连刘程鹏杨桀彬杨建东
赵桂连,刘程鹏,杨桀彬,杨建东
(1.中国电建集团成都勘测设计研究院有限公司,四川 成都 610072;2.武汉大学 水资源工程与调度全国重点实验室,湖北 武汉 430072)
0 引言
随着水电的开发,目前大多数自然条件较优的中低水头水力资源已被开发殆尽,余下的仅是流量较小及落差很大的高山河流的水力资源[1]。在我国十四五规划、碳达峰、碳中和等政策导向下,建设高水头水电站己成了最迫切的需求[2]。尽管冲击式水轮机在国内外高水头水电站中得到了较为广泛的应用,但当水电站的建设受到水轮机制造水平或地形条件等因素制约时,多级串联水电站布置方案被纳入到工程设计或建设之中。
水电站系统从一种稳态到另一种稳态过程被称为过渡过程,在这一过程当中极易发生管道的压力、调压室水位以及机组转速的变化[3-5]。在某些极端工况中,上述参数可能会超出规范允许的范围,危及电站的安全运行。因此,具备友好的人机界面的过渡过程计算软件被设计单位所急需。
为了能够快速简便地对水电站进行过渡过程计算,前人已开发了诸多具有良好可视化能力的计算软件。河海大学沈祖诒教授开发了一套Windows 界面下的水力-机械过渡过程仿真计算通用软件[6],该软件能够用于装有混流式、轴流转桨式、贯流式或可逆式水轮机的水电站 ,并适用于任何形式的有压过水系统。武汉大学唐岳灏[7,8]基于面向图形系统的水电站过渡过程程序,提出了新的编码原则。陆桂明[9]以及莫剑[10]等人根据引水发电系统的布置形式,实现了对水电站系统的图形化建模,极大地提高了软件的通用性。FANG[11]基于Matlab/Simulink开发了一套适用于各种水电站的过渡过程可视化软件,并选择了某电站进行实验和仿真对比,证明了该软件的准确性。谭越宇[12]基于C#语言,将面向对象技术和水力过渡过程仿真原理相结合,开发了一套具有图形建模仿真功能的过渡过程计算程序。胡晓阳[13]、耿田皓[14]则是基于Flowmaster 进行了二次开发,对泵站系统和混流式水轮机发电机组进行可视化建模及过渡过程仿真计算。Topsys是由武汉大学开发的水电站过渡过程一维计算软件,该软件被成功运用于国内多座已建或在建水电站的计算分析[15,16]。商用软件Bentley HAMMER 可以对复杂管网进行水锤分析,界面简洁,被广泛用于工程实际与科学研究之中[17-19]。EPFL 公司开发的SIMSEN 软件不仅可以考虑水轮机等机械系统的影响,同样可以考虑包括变压器等电气侧的影响[20,21]。
尽管上述软件能够对各类水电站或者泵站进行过渡过程计算,但是均未考虑串联水电站这一特殊布置形式。串联水电站布置复杂,管道与节点类型多变,因此构建正确的拓扑关系以及求解恒定流比较困难。本文在过渡过程计算理论的基础上,基于C++语言以及Qt库开发了一款能够对串联水电站进行过渡过程计算的可视化软件,为串联水电站的设计单位以及运行管理单位提供了一个方便简洁的工具,实现对设计方案以及过渡过程工况的数值模拟,从而有效减低串联水电站的设计及运行风险。
1 水力过渡过程基本方程
1.1 恒定流基本方程
在管网模型中,所有节点都与一条或多条管段相关联。对于管网模型中的任意节点i,根据质量守恒定律,流入节点的所有流量之和应等于流出节点的所有流量之和,可以表示为:
式中:Qki,j表示与节点i相连的管道ki,j的流量;ni表示与节点i相连的管道数量;qi表示与节点i的流量需求,水电站管网中一般为0。当管段方向指向该节点时取负号,否则取正号,即管段流量流出节点时取正值,流入节点时取负值。
所有管段都与两个节点关联,根据能量守恒规律,任意管段i两端节点水头之差,应等于该管段的压降,可以表示为:
式中:H为节点测压管水头,m;下标i与j表示管道k连接的起始节点与终止节点编号;对于水电站输水系统,局部水头损失占比高,可以在计算时拟取α=2;rk表示管道的阻力系数,包含局部阻力系数与沿程摩阻系数。该方程称为管段的压降方程。
1.2 非恒定流基本方程
1.2.1 有压管道非恒定流数学模型和特征线法
考虑水体和管壁弹性的情况下,有压一维非恒定流基本方程如下式[22]:
式中:x为从任意起点开始的沿管轴的坐标距离,m;α为管道各断面形心的连线与水平面所成的夹角;A为面积,m2;a为波速,m/s;H为以某高程为基准的测压管水头,m;V为断面流速,m/s。对于非棱柱体管道,式中∂A/∂x≠0;对于棱柱体管道,∂A/∂x=0。
有压管道一维非恒定流的动量方程以及连续性方程是以x和t为自变量、以V和H为因变量的拟线性双曲性偏微分方程组。双曲性偏微分方程组的一般解不存在,将式(3)和式(4)转换为特殊的常微分方程,然后对常微分方程积分得到有限差分方程。整理可得:
式中:
上游水库、下游水库、岔管、调压室、水轮机等非恒定流计算边界条件可见文献[22]。
1.2.2 明渠一维非恒定流模型的基本方程及离散
明渠一维非恒定流圣维南方程组由连续方程和运动方程组成[22]:
式中:B为水面宽度,m;h为水位,m;t为时间,s;Q为流量,m3/s;C为谢才系数,x为断面距离坐标,m;q为区间入流量,m3/s;A为过水断面面积,m2;v为水流沿轴线方向的流速,m/s;R为水力半径,m;i为渠道的底坡。
用Preissmann 格式离散圣维南方程,离散结果分别以未知时层和增量的形式表示水位与流量,离散方程分别如下。
式中:
当各渠道组成渠网时,在岔点处需要补充连接条件,如下式所示,其中,下标i和o分别为断面位于流入和流出岔点的渠道上:
若岔点有n个分支渠道交汇,则有1个流量连续方程和n-1个水位平衡方程,再补充外边界条件,及各渠道内部的圣维南离散组,便可形成整体矩阵进行求解。
2 框架设计
在水电站过渡过程计算软件中,涉及的类与函数数量较多,软件整体较为复杂,并存在一些功能相似的函数或具有共同父类的子类,因此可以将整个软件根据功能划分为以下三大的模块,即人机交互模块、计算模块以及计算结果后处理模块。三大模块并不是相互独立的,而是存在联系。该软件采用主界面对三大模块进行管理,其中人机交互模块包括程序的主界面以及绘图模块绘图,绘图模块用来对串联水电站布置进行建模,是过渡过程计算的基础;计算模块则是在绘图模块的基础上对所建立的模型进行相应的计算;后处理模块为用户提供了多种形式对计算结果进行处理展示。
本文计算模块以C++为编程语言,人机交互模块以及后处理模块则是通过Qt 来实现的。Qt 是跨平台的C++图像用户界面应用程序框架,具备优良的跨平台特性,支持Windows、Uinux、Linux 等各类平台,在多个工程行业得到广泛的应用[23-25]。作为C++图像用户界面应用程序框架,Qt 具有良好的封装性以及扩展性,包含了大量且功能各异的API;另外,Qt 库提供了完善的说明文档,为可视化串联水电站过渡过程计算软件提供了便利。
2.1 程序主界面
程序主界面是用户与程序交互的核心,用户对程序的一切操作都是基于程序主界面来进行的,包括对主要模块进行管理和以三大模块为核心的辅助功能模块,图1 为软件的结构设计图。
图1 程序结构设计图Fig.1 The diagram of program structure design
(1)文件保存模块:可以将绘制好的过渡过程计算模型的布置形式以及各管道、节点参数保存至数据文件(.sbl 格式)当中。
(2)文件读取模块:可以直接将数据文件(.sbl格式)中数据进行读取,并将文件中的过渡过程计算模型以及各管道、节点参数还原在绘图区中;用户可以在绘图区中对布置形式以及参数进行修改并保存。
(3)绘图检查模块:用户可以通过该模块来对所建立的模型进行检查,来判别用户是否建立了正确的过渡过程计算模型。
(4)属性查询模块:查询管道与水轮机的基本参数,并可以进行修改。
(5)其他功能模块:为方便用户对水电站布置形式进行建模,程序提供了包括撤销、复原、对齐、删除以及缩放等一系列辅助功能。
2.2 绘图模块
绘图模块是串联水电站过渡过程建模的基础核心部分,计算模块将会以该模块所建立的模型进行恒定流以及非恒定流的计算。
水电站输水管道系统尽管在布置上是三维立体的,但是采用平面二维图形完全可以表示出管网系统的布置以及管道之间的连接关系。另外对于过渡过程计算而言,计算结果与节点的实际位置无关,因此二维平面图形不影响计算的准确性。
在依据串联水电站布置形式在绘图区建立好计算模型后,用户可以依靠参数编辑模块来对管道、水轮机、调压室以及调节池的参数信息进行修改编辑。
2.3 计算模块
用户可以对计算的时间步长、时间总长、迭代次数、迭代精度以及数据保存精度进行设置,计算模块将会根据用户的设置来进行计算。
计算模块主要包括恒定流计算以及非恒定流计算两个计算模块,其中非恒定流计算是恒定流计算的基础上进行。计算模块将前处理中绘图模块绘制于绘图区的电站管道布置图转化为管道拓扑关系并保存于数组当中,与管道和节点参数相结合,先计算出串联水电站的恒定流,然后根据各水轮机的参数设置,进行大波动、小波动以及水力干扰等过渡过程的计算。
在计算模块计算出串联水电站的恒定流以及非恒定流后,会将将计算结果传递到后处理模块当中。
2.4 后处理模块
后处理模块主要包含的是结果展示模块以及结果保存模块两大部分,用户可以通过程序主界面上对应的按钮查看计算结果,包括机组、调压室、调节池、阀门以及检测点各个时刻的详细信息。如果用户需要对计算结果进行分析处理,在计算结束后,用户可以通过后处理模块将计算结果展示和保存。
3 绘图模块设计
绘图功能作为过渡过程计算软件的基础,水电站管道系统的模型的建立、数据输入、恒定流以及非恒定流的计算都是在绘图功能的基础上进行的,因此建立一个可交互的绘图区以及完善对应的绘图功能至关重要。
串联水电站中包含大量的管道以及串联点、岔点、机组等节点,绘图模块需要对各类管道节点进行分类,并且能够对鼠标事件进行响应。Qt 提供了图形视图(GraphicsView)框架,方便对框架下的Item 项进行管理。并且图形视图框架提供拖放操作、碰撞检测等功能,同时能够对各类键盘事件和鼠标事件进行管理,为软件绘图模块的实现提供了便利。图2 为绘图功能框架。
图2 绘图功能框架Fig.2 The framework of drawing functional
3.1 自定义Item类
根据水电站的布置形式可以将绘图内容分为两个父类,即节点单元父类以及管道单元父类。节点单元父类主要是由上游水库节点类、下游水库节点类、串联节点类、岔管节点类、阀门节点类、调压室节点类、调节池节点类以及水轮机节点类等子类所继承;根据输水系统中的管道形式,管道单元父类将会被有压管道类、明满流管道类以及明渠管道类3个子类所继承。对于拥有同一父类的子类而言,功能一致的函数可以在父类中进行编写,功能相似的函数则可以在父类中声明虚函数,并在子类中进行重写,这样不仅简便了代码量,并方便了对绘图的管理。串联水电站过渡过程计算程序绘图类的划分如图3所示。
图3 水电站过渡过程计算程序绘图类的划分Fig.3 Division of drawing class of calculation program for transition process of hydropower station
与QGraphicsItem 中提供的基础图元不同,程序中需要将图元基本样式修改成能够直接反映节点类型的图形,并且对图元进行可交互的操作如鼠标单击选择图元、双击弹出数据输入对话框、右键弹出菜单以及拖拽等功能,因此需要自定以QGraphicsItem 类来满足程序的要求。自定义QGraphicsItem 类必须要实现两个虚函数,paint()函数以及QRectF boundingRect()函数。paint()的作用是以本地坐标绘制自定义Item 的内容;QRectF boundingRect()则是确定该图形的重绘区域。此外自定义Item类还可以调用setPixmap()函数来修改显示的图形。
自定义Item 需要对相应的类输入用于计算的参数,如水轮机节点需要输入水轮机类型、转轮直径、特性曲线以及水轮机需要计算的工况和相关参数等,有压管道则需要输入管道长度、波速、前后断面类型等。通过对话框的形式将所需要输入的参数呈现出来,能够使得用户更加直观的将对应的参数输入正确,从而保证计算的准确性。因此在自定义的Item 中,需要定义一个对话框,并将所需要的参数呈现在对话框中,用户通过对话框来实现参数的修改以及输入。
Qt 中使用QDialog 类来实现对话框,QDialog 类继承自QWidget 类,开发人员可以通过对QDialog 类添加各种组件以及布局来完成对话框的构建,各类组件的添加都可以通过QT designer 拖拽进行设计。对话框中任何功能都需要开发人员进行编写,如按钮功能、下拉框更改对话框的内容、单选以及多选按钮的应用,而上述功能的实现都需要运用到Qt 的信号与槽机制,完整的对话框布局以及对应的功能的完善才是一个完备的对话框,如图4为水轮机参数输入对话框。
图4 水轮机参数输入对话框Fig.4 Turbine parameter input dialog
自定义类在图形形状、绘图区域以及参数对话框确定后,需要对图形的交互功能进行完善与编写。在QGraphicsItem 类中提供了众多虚函数来对事件进行处理,用户只需在自定义的Item 中将虚函数重写便可实现对应的功能。用户与图元的交互功能主要为鼠标单击选择图元、双击弹出数据输入对话框、右键弹出菜单以及拖拽等。
3.2 自定义Scene类
场景类作为一个管理Item 的容器,需要在场景上对不同类型的Item 进行添加、删除、移动以及复制黏贴等动作。场景类的动作大部分都是由鼠标点击来实现的,因此需要对不同的鼠标动作进行响应。
当用户开始依据水电站布置形式建立计算模型时,需要在绘图区域进行绘制。当绘制节点时,便可在鼠标点击区域创建一个节点图形;当绘制管道时,需要在绘图区域点击两次便可以创建一条管道。场景类包含一个模式属性参数,不同的模式对不同的鼠标左键事件进行响应,在场景对事件做出响应前,先判断模式属性的类别,再进行响应的动作。如点击绘制水轮机节点时,用户点击了绘图工具栏上的按钮,场景模式属性转变为水轮机状态,用户点击绘图区时,场景便在鼠标点击处添加一个水轮机节点。如果不选择任何一种绘图工具栏上的按钮时,模式属性便会转化为空状态,此时场景不会对鼠标左键点击产生事件响应。如果该点存在Item,场景会将事件传递给在这一点的最顶层的Item。如果顶层Item 不接受该事件,则将事件传递给下一层的Item,以此类推,直至某一层Item 接受该事件。如果该点不存在Item,则该事件将会忽略。
4 结果查看功能设计
在串联水电站过渡过程计算结束以后,用户需要对计算结果进行查看来确保计算结果的正确,或是修改计算参数的设置。程序提供了两种方式来查看恒定流以及非恒定流过渡过程的计算结果,一种是在程序能直接查看各个重要参数,另一种是直接将计算结果保存为数据文件。
Qt提供了QTableWidget类在界面上添加表格,通过setItem()函数来对表格内容进行添加或修改。由于计算时间长,计算时间步长小,系统中机组数量多,且机组非恒定流详细信息对话框中包含多个参数页面,因此整个对话框数据量十分庞大,因此整个对话框的响应十分的缓慢。为了在较短时间内使得对话框响应完成,并将各个页面的数据完整的呈现给用户,多线程的调用是一个有效的解决措施。C++语言中提供了Thread库,开发者可以根据需要来进行多线程的开发使用。在该对话框中,可以将每一个页面放入一个线程当中,当对话框被调用,则多个线程并行,多个页面中的数据同时显示,对话框便能够在短时间内被响应。
除了在参数显示对话框显示数据以外,还需要对数据的变化趋势进行展示。Qt 中提供QChart 类供开发者进行图形的显示,addSerise()函数可以将系列参数添加到ChartView 中进行展示。在将绘图对话框以及参数显示对话框进行绑定后,用户可以选择任意的参数以及时间范围进行绘制。图5为某机组甩负荷计算结果显示对话框。
图5 结果显示对话框Fig.5 The dialog to display result
5 工程算例
5.1 案例一
某装有反击式水轮发电机组的两级串联水电站,其布置形式如图6所示。其中调节池面积为60 000 m2;一级水电站装有三台机组,三台机组共尾水调压室,引水隧洞长约758 m;二级水电站装有四台机组,并划分为两个水力单元,每个水力单元中的两台机组共上游调压室,引水隧洞长约17 km,两级水电站的机组详细信息如表1所示。
表1 串联水电站机组基本参数Tab.1 The basic parameters of series hydropower station units
图6 两级串联水电站布置简图Fig.6 Layout diagram of two-stage series hydropower station
按两级串联水电站的布置形式在软件上进行绘图建模,如图7所示。图中J1~J3为一级水电站机组,J8~J11为二级水电站机组,J5 为调节池,J4、J6 和J7 为调压室,J16~J18 为上游水库,J12~J15为下游水库。
图7 两级串联水电站过渡过程计算布置图Fig.7 The calculation layout of transition process of two-stage series hydropower station
7台机组额定出力运行时,同时突甩10%额定负荷,机组为了能够恢复到稳定状态,需要进行频率调节或是功率调节。频率调节模式下调速器参数取bt=0.5,bp=0,Tn=0.6 s,Td=8 s。功率调节模式下调速器参数取bt=0.5,bp=0.04,Td=8 s,计算结果见图8、图9以及表2。
表2 频率/功率调节下机组的调节时间Tab.2 Unit adjustment time under frequency/power regulation
图8 功率调节下机组出力变化Fig.8 Unit output changes under power regulation
图9 频率/功率调节下调节池参数变化Fig.9 Variation of regulating reservoir parameters under frequency/power regulation mode
频率调节模式下,一级水电站机组调节时间约为160.4 s,二级约为485.6 s。功率调节模式下,一级水电站机组进入功率±2%带宽约为51.6 s,二级约为425.6 s。二级水电站机组调节时间长于一级电站机组的原因是二级水电站输水管道长,因此水流惯性大,调压室水位波动周期长、衰减慢,从而导致二级水电站机组在频率调节模式下机组调节时间较长。当两级串联水电站机组在频率调节和功率调节下恢复到稳定后,无论是频率调节还是功率调节,调节池流入与流出流量并不匹配,调节池水位依旧会快速下降,因此单独的频率调节以及功率调节无法使得串联水电站系统恢复到稳定状态。
5.2 案例二
由于地形条件的限制,相邻电站并不能够通过容积有限的池库式调节池进行连接,而是通过明渠管网的方式,如田湾河梯级电站[26]以及天龙湖-金龙潭梯级电站[27]。为验证本程序对明渠连接的串联电站水力过渡过程计算的能力,以某通过明渠连接的两级串联水电站为对象,对其进行水力过渡过程计算,其平面布置形式如图10所示。一级电站引水隧洞长350 m,二级电站引水隧洞长1 400 m;通过底宽为20 m,长度为100 m 的四条明渠将相邻两级水电站向量。两级电站均安装一台出力为338.74 MW,设计水头为75.4 m,设计流量为492.4 m3/s,转轮直径为7.1 m,额定转速为100 r/min的混流式水轮机组。
图10 明渠连接的两级串联水电站布置形式Fig.10 Layout diagram of two-stage series hydropower station connected by open channels
按图10 的布置形式在软件上进行绘图建模,如图11所示。图11中J1为上游水库,J3、J11分别为为一级电站和二级电站机组,J5、J13 为调压室,J14 为下游水库;L1~L5,L10~14 为有压管道,L6~L9为明渠管道。
图11 明渠连接的两级串联水电站程序计算模型Fig.11 The calculation layout of transition process of two-stage series hydropower station connected by open channels
当上游一级电站机组突甩负荷,为保证下游电站机组的安全,120 s 后下游机组甩负荷,两台机组导叶关闭规律采用12 s直线关闭规律。计算结果见图12~14 和表3所示。图12(b)、(c)分别为距上游电站出口处不同距离处的水深与流量变化。
表3 串联电站机组极值结果Tab.3 The extremum of series hydropower station units
图12 明渠参数变化Fig.12 Variation of open channels parameters
由图12(a)可知,当上游电站机组甩负荷后,明渠管道的平均水位下降,当下游机组同样甩负荷后,明渠的平均水位不在下降。由图12(b)、(c)可知,当上游电站机组开始甩负荷后,靠近上游电站处的明渠节点流量开始减小,水位开始降低,并向下游传播;在此其间,靠近下游电站的明渠流量主要受下游电站机组引用流量的影响。当下游电站机组开始甩负荷后,下游电站引用流量减小,明渠整体水位不再降低并产生雍水;该雍水从下游向上游进行传递,如图12(b)所示。此时明渠各点的水深和流量将受到上下游两个扰动的影响,如图12(b)、(c)所示。
由图13 可知,当明渠的平均水位下降时,上游电站的尾水调压室受到明渠部分的水位的影响,其水位在波动中不断下降,同时尾水管进口压力也在调压室水位的影响下逐渐降低。由图14 与表3 可知,在上下游机组甩负荷期间,上游一级电站机组最大蜗壳压力为116.14 m,尾水管进口最小压力为6.24 m;下游二级电站机组最大蜗壳压力为189.43 m,尾水管进口最小压力为2.54 m。二级电站机组导叶关闭过快,导致蜗壳压力上升率较大,需要对导叶关闭规律进行优化。
图13 调压室水位变化Fig.13 Variation of surge-chamber water level
图14 机组参数变化Fig.14 Variation of units parameters
从案例一与案例二的计算结果来看,频率调节下机组转速与功率调节下的机组出力变化以及甩负荷下机组参数的变化规律符合频率、功率调节以及大波动下机组参数的变化规律[28-30],因此该程序具备实际的应用价值。
6 结论
过渡过程作为影响水电站安全运行的重要因素,设计单位以及水电站管理单位尚未有针对多级串联水电站进行系统计算分析的精细化软件。本文在过渡过程计算理论的基础上,开发了一款能够针对串联水电站复杂管网进行过渡过程计算的可视化软件。该软件具有良好的人机交互界面,且操作简单直观,用户能够按照串联水电站布置形式建立过渡过程计算模型,并对管道或节点进行参数的输入与修改;针对串联水电站的图形计算模型,软件将会根据寻线算法建立串联水电站的拓扑关系并构建总体矩阵方程,求得串联水电站的恒定流;在此基础上,软件能够对串联水电站进行大波动、小波动以及水力干扰工况的计算,计算结果正确合理,并由后处理模块对计算结果进行展示保存。