📄 frmfloodproceed.frm
字号:
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form frmFloodProceed
Caption = "水库调洪计算"
ClientHeight = 3000
ClientLeft = 60
ClientTop = 450
ClientWidth = 6285
LinkTopic = "Form2"
LockControls = -1 'True
MDIChild = -1 'True
ScaleHeight = 3000
ScaleWidth = 6285
Begin VB.CommandButton cmdCalu
Caption = "计 算"
Height = 375
Left = 0
TabIndex = 3
Top = 0
Width = 1335
End
Begin VB.CommandButton cmdClose
Caption = "退 出"
Height = 375
Left = 1380
TabIndex = 2
Top = 0
Width = 1335
End
Begin VB.ComboBox Combo1
BeginProperty Font
Name = "楷体_GB2312"
Size = 12
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 360
Left = 2760
TabIndex = 1
Text = "5"
Top = 7
Width = 1815
End
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 2175
Left = 0
TabIndex = 0
Top = 400
Width = 6015
_ExtentX = 10610
_ExtentY = 3836
_Version = 393216
Rows = 20
Cols = 5
End
End
Attribute VB_Name = "frmFloodProceed"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'bb0:溢洪道孔宽,aa0:闸门高度,nn1:底孔数,bb1:底孔宽,aa1:底孔高
'qqan:安全泄量,zzcc:防洪高水位
Private bb0 As Single, aa0 As Single, nn1 As Integer, bb1 As Single, aa1 As Single, qqan As Single, zzcc As Single
Private area0 As Single, area1 As Single
Dim ZZY1 As Single, NN0 As Integer, ZZY0 As Single
Dim YYNN As Single
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub cmdCalu_Click()
Dim Qfld() As Single, Zfld() As Single
Dim Vfld() As Single, ZZC0 As Single, ZNOR As Single
Dim gv() As Single, gz() As Single
Dim i As Integer, j As Integer
Dim qyyy As Single, qkkk As Single, QabL As Single
Dim QQa As Single, kkk1 As Integer, km As Integer
Dim z As Single, zs As Single, vp As Single
Dim zx As Single, vnor As Single, Cond1 As Boolean, Cond2 As Boolean
Dim Filenum As Integer
Dim VZZC0 As Single
Filenum = FreeFile
Call floodFile
If mm = 0 Then Exit Sub
Open App.Path & "\Z_V.dat" For Input As #Filenum '库容曲线,水位 m ; 库容: m3/s*月
Input #Filenum, mmg
ReDim gzz(mmg), gv(mmg), gz(mmg), gvvv(mmg), gvv(mmg), gzz(mmg), Qfld(mm), Zfld(mm), Vfld(mm)
For i = 1 To mmg
Input #Filenum, gzz(i), gvv(i)
gz(i) = gzz(i)
gv(i) = gvv(i) * 2626560 / 5# / 3600
Next
Close #Filenum
Filenum = FreeFile
Open App.Path & "\xzkr.dat" For Input As #Filenum
Input #Filenum, VZZC0
Close #Filenum
Call 插值图(mmg, gzz, gvv, VZZC0, zs)
DlgReservoirPara.Text3(0) = Int(zs * 100 + 0.5) / 100
DlgReservoirPara.Show vbModal
If DlgReservoirPara.Tag <> "OK" Then Exit Sub
DoEvents
aa0 = Val(DlgReservoirPara.Text1(0)) 'aa0:闸门高度,
bb0 = Val(DlgReservoirPara.Text1(1)) 'bb0:溢洪道孔宽
NN0 = Val(DlgReservoirPara.Text1(2)) 'NN0:溢洪道孔数
ZZY0 = Val(DlgReservoirPara.Text1(3)) 'ZZY0:堰顶高程
aa1 = Val(DlgReservoirPara.Text2(0)) 'aa1:底孔高
bb1 = Val(DlgReservoirPara.Text2(1)) 'bb1:底孔宽
nn1 = Val(DlgReservoirPara.Text2(2)) 'nn1:底孔数
ZZY1 = Val(DlgReservoirPara.Text2(3)) 'ZZY1:底坎高程
ZZC0 = Val(DlgReservoirPara.Text3(0)) 'ZZC0:防洪限制水位
zzcc = Val(DlgReservoirPara.Text3(1)) 'zzcc:防洪高水位
ZNOR = Val(DlgReservoirPara.Text3(2)) 'ZNOR:正常高水位
YYNN = Val(DlgReservoirPara.Text3(3)) 'YYNN:装机容量
qqan = Val(DlgReservoirPara.Text3(4)) 'qqan:安全泄量
area0 = bb0 * aa0 '计算闸门面积
area1 = bb1 * aa1 '计算底孔面积
Call 插值图(mmg, gv, gz, ZNOR, zs)
vnor = zs '正常高水位对应的有效库容和死库容之和
Call 插值图(mmg, gv, gz, ZZC0, zs)
Qfld(1) = Qdes(1) '入库洪水过程起始流量
Zfld(1) = ZZC0 '以防洪限制水位起调
Vfld(1) = zs '防洪限制水位对应的库容
kkk1 = 0
km = 0
For i = 2 To mm
z = Zfld(i - 1)
Do
QabL = QVar(z) '计算得到的实际下泄流量
QQa = min(QabL, qqan) '如果下泄流量大于安全泄量,则取下泄流量,否则就取安全泄量。
Qfld(i) = min(Qdes(i), QQa) '取下泄量和来水量的小值。
Vfld(i) = Vfld(i - 1) + (Qdes(i) + Qdes(i - 1)) / 2# - (Qfld(i) + Qfld(i - 1)) / 2#
'Vfld(i - 1):时段始水库蓄水量,Vfld(i):时段末水库蓄水量
'Qdes(i - 1):时段始入库洪水流量,Qdes(i):时段末入库洪水流量
'Qfld(i - 1):时段始出库流量,Qfld(i):时段末出库流量
Call 插值图(mmg, gz, gv, Vfld(i), zx) '由时段末库容查得一个水位
Zfld(i) = zx '把查得的水位作为下一个防洪限制水位
Cond1 = Abs(Qfld(i) - qqan) > 0.01 And Abs(Qfld(i) - Qdes(i)) > 0.01 And Abs(z - zx) > 0.001
If Cond1 Then z = zx '当条件为真时执行 “Z=ZX”
Loop While Cond1 '当Cond1条件为真时继续循环。
If Vfld(i) > vnor And km = 0 Then '当时段末水库蓄水量大于正常高水位对应的库容并且KM=0时则执行。
z = Zfld(i)
Qfld(i) = QVar(z) '用大于正常高水位的水位值计算出一个时段末出库流量
km = 1
ElseIf (Vfld(i) > vnor And km = 1) Then '当时段末水库蓄水量大于正常高水位对应的库容并且KM=1时则执行。
v = Vfld(i - 1) '使V等于时段始水库蓄水量
Do
Call 插值图(mmg, gz, gv, v, z)
Zfld(i) = z '用V值插出一个水库水位值,并赋值到时段末水库水位值
Qfld(i) = QVar(z) '用水库水位算出一个时段末出库流量
Vfld(i) = Vfld(i - 1) + (Qdes(i) + Qdes(i - 1)) / 2# - (Qfld(i) + Qfld(i - 1)) / 2#
Cond2 = Abs(v - Vfld(i)) > 0.1
Debug.Print Vfld(i)
If Cond2 Then '如果条件为真时则执行
v = Vfld(i)
Call 插值图(mmg, gz, gv, Vfld(i), z)
Zfld(i) = z
End If
Loop While Cond2 '如果条件为真时则再次循环,直到时段始末水库蓄水量相等为止。
End If
Next i
With MSFlexGrid1
.Rows = mm + 1
For i = 1 To mm
.TextMatrix(i, 0) = i '节点
.TextMatrix(i, 1) = Format(Qdes(i), "#") '入库流量
.TextMatrix(i, 2) = Format(Qfld(i), "#.00") '下泄流量
.TextMatrix(i, 3) = Format(Vfld(i), "#.00") '库蓄水量
.TextMatrix(i, 4) = Format(Zfld(i), "#.00") '库蓄水位
Next i
End With
End Sub
Private Function min(s As Single, t As Single)
min = IIf(s < t, s, t)
End Function
Private Function QVar(z As Single)
Dim qyyy As Single, qkkk As Single
qyyy = 1.77 * NN0 * bb0 * Sqr((z - ZZY0) ^ 3) '计算自由泄流 NN0:溢洪道孔数 bb0:闸门宽 ZZY0:溢洪道底高
qkkk = nn1 * area1 * (0.99 - 0.53 * aa1 / (z - ZZY1 - aa1 / 2#)) * Sqr(2 * 9.8 * (z - ZZY1 - aa1 / 2#))
'(z - ZZY1 - aa1)/2:孔口泄流时的高差H,aa1:全开时底孔闸门高度,area1:每孔溢洪道过水面积
'(0.99 - 0.53 * aa1 / (z - ZZY1 - aa1 / 2#))为一系数
QVar = qyyy + qkkk + 0.75 * YYNN * (10 ^ 4) / 8.5 / (zzcc - 64#)
End Function
Private Sub Form_Load()
Combo1.AddItem 5
Combo1.AddItem Format(0.1, "0.0")
Combo1.AddItem Format(0.01, "0.00")
Combo1.Text = 5
Dim j As Integer
With MSFlexGrid1
.Height = frmFloodProceed.Height - cmdCalu.Height - 400
.Width = frmFloodProceed.Width - 100
.TextMatrix(0, 1) = "入库流量"
.TextMatrix(0, 2) = "下泄流量"
.TextMatrix(0, 3) = "库蓄水量"
.TextMatrix(0, 4) = "库蓄水位"
For j = 0 To .Cols - 1
.ColAlignment(j) = 4
If j <> 0 Then
.ColWidth(j) = 1500
End If
Next
End With
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -