📄 frmdnpj.frm
字号:
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form frmDnpj
Caption = "多年平均电能计算"
ClientHeight = 3855
ClientLeft = 60
ClientTop = 450
ClientWidth = 4950
LinkTopic = "Form3"
MDIChild = -1 'True
ScaleHeight = 3855
ScaleWidth = 4950
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 3375
Left = 0
TabIndex = 2
Top = 480
Width = 4935
_ExtentX = 8705
_ExtentY = 5953
_Version = 393216
Rows = 14
Cols = 4
End
Begin VB.CommandButton cmdClose
Caption = "退 出"
Height = 495
Left = 1800
TabIndex = 1
Top = 0
Width = 1695
End
Begin VB.CommandButton cmdCalu
Caption = "计 算"
Height = 495
Left = 0
TabIndex = 0
Top = 0
Width = 1575
End
End
Attribute VB_Name = "frmDnpj"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub cmdCalu_Click()
'Fnn() :第I年第J时段的出力值
Dim ve() As Single, Fnn() As Single, Pn(12) As Single
Dim i As Integer, j As Integer, km As Integer, kn As Integer
'VS:死库容
Dim vv(13) As Single, uu(13) As Single, vs As Single
Dim An As Single, Ay As Single 'An:保证出力 , Ay:装机容量
Dim Cond1 As Boolean, Cond2 As Boolean
'假定的供水期平均出力
Dim dV As Single, dN As Single, F As Single
Dim ii As Integer, jj As Integer, F1 As Single
'v:兴利库容
Dim v1 As Single, v2 As Single, vp As Single, v As Single
Dim zx As Single, zs As Single, QQ As Single
'Fn:试算出来的保证出力
Dim Fn As Single, xzv As Single
Dim Filenum As Integer
'On Error GoTo errCalu
Call ReadFile
Call ReadRunoff
Call CaluFlow
ReDim ve(m, 13), Fnn(m, 12)
Filenum = FreeFile
Open App.Path & "\fph.dat" For Input As #Filenum '防破坏线纵坐标数据文件
For i = 1 To 13
Input #Filenum, vv(i)
Next i
Close #Filenum
DlgEnergyPara.Show vbModal
If DlgEnergyPara.Tag <> "OK" Then Exit Sub
v = Val(DlgEnergyPara.Text1(0)) '兴利库容(m^3/s*月)
vs = Val(DlgEnergyPara.Text1(1)) '死库容(m^3/s*月)
An = Val(DlgEnergyPara.Text1(2)) '保证出力(千瓦)
Ay = Val(DlgEnergyPara.Text1(3)) * 10 ^ 4 '装机容量(千瓦)
xzv = Val(DlgEnergyPara.Text1(4)) '限制库容
'v = 1630.78: vs = 552.65: An = 400990.1: Ay = 120 * 10 ^ 4
'将限制库容数据弄进xzkr.dat文件中
Filenum = FreeFile
Open App.Path & "\xzkr.dat" For Output As #Filenum
For i = 1 To 13
Print #Filenum, xzv
Next i
Close #Filenum
Open App.Path & "\xzkr.dat" For Input As #Filenum '水库上限蓄水量过程(正常高水位或汛前限制水位)数据文件
For i = 1 To 13
Input #Filenum, uu(i)
Next
Close #Filenum
DoEvents
For i = 1 To m
v1 = vv(1)
ve(i, 1) = v1
For j = 2 To 13
v2 = v1
If j = 13 Then v2 = vv(13)
kn = 0
km = 0
Do
vp = (v1 + v2) / 2 '得出平均库容并由此内插出上游水位
Call 插值图(mmg, gzz, gvv, vp, zs)
QQ = a(i, j - 1) + v1 - v2
Call 插值图(nng, gz1, gqq, QQ, zx) '由调节流量内插出下游水位
Fn = ak * QQ * (zs - zx) '得到某年某时期的保证出力
If Fn > Ay Then Fn = Ay '如果某一时期的保证出力大于装机容量,那么就等于装机容量
If j = 13 Then Exit Do
If v2 > vs Then '如果时段末库容大于死库容=======================
If v2 < vv(j) Then '如果时段末库容小于防洪循制水位----------------
If CLng(Fn) <> CLng(An) Then '如果某一时期的出力值不等于保证出力,
'则调节时段末库容,并重新计算Fn值,直至相等
v2 = v2 + (Fn - An) / ak / (zs - zx)
If v2 >= v + vs Then v2 = v + vs
If v2 < vs Then v2 = vs
kn = kn + 1
End If
Cond1 = kn > 100 Or (CLng(Fn) = CLng(An))
Else
If CLng(v2) > CLng(uu(j)) And Fn > Ay Then '如果时段末库容大于防洪限制库容和某一时期
'的保证出力大于装机容量
Fn = Ay
Else
dV = (uu(j) - vv(j)) / 4 '将加大出力区分成四个区域
dN = (Ay - An) / 4
ii = Int((Fn - An) / dN) + 1
jj = Int((v2 - vv(j)) / dV) + 1
If ii <> jj Then
v2 = v2 + dV * (ii - jj) / 2 '重新调节时段末库容并计算Fn值
If v2 > uu(j) Then v2 = uu(j)
If v2 < vs Then v2 = vs
km = km + 1
End If
Cond2 = km > 100 Or ii = jj
End If
End If
'---------------------------------------------------------
Else '如果时段末库容小于等于死库容则退出循环。
Exit Do
End If
'==================================================================
Loop Until Cond1 Or Cond2
ve(i, j) = v2 '第I年J时段的水库蓄水量
Fnn(i, j - 1) = Fn '第I年(J-1)时段的出力值
Debug.Print i, j, v1, v2, a(i, j - 1); Fn
v1 = v2
Next
Next
F1 = 0
For i = 1 To 12
F = 0
For j = 1 To m
F = F + Fnn(j, i) / m '算出某一月份的多年平均出力值
Next
Pn(i) = F '共12组数据
F1 = F1 + F * 730 * 10 ^ (-8) '把12个月的出力值相加得到多年平均电能,并把单位转化为亿度。
Next
Filenum = FreeFile
Open App.Path & "\out4.dat" For Output As #Filenum
Print #Filenum, "多年平均电能计算"
Print #Filenum, " ", "各月的多年平均出力"
For i = 1 To 12
Print #Filenum, i & "月", Pn(i) & " 千瓦"
Next
Print #Filenum, "多年平均电能=" & F1 & " 亿度"
Close #Filenum
With MSFlexGrid1
For i = 1 To 12
.TextMatrix(i, 1) = Format(Pn(i), "#.00")
.TextMatrix(i, 2) = Format(F1, "#.00")
Next i
End With
Exit Sub
errCalu:
Dim iAction As Integer
Select Case Err.Number
Case 71
iAction = MsgBox("请插入A盘!", vbExclamation + vbRetryCancel, "错误提示")
If iAction = vbRetry Then Resume
Case Else
MsgBox Err.Number & ":" & Err.Description, vbCritical, "错误提示"
End Select
End Sub
Private Sub cmdClose_Click()
Unload Me
End Sub
Private Sub Form_Load()
Dim i As Integer, j As Integer
With MSFlexGrid1
.Width = frmDnpj.Width
.TextMatrix(0, 0) = "月份"
.TextMatrix(0, 1) = "多年平均出力(KW)"
.TextMatrix(0, 2) = "多年平均电能(亿度)"
.Rows = 13
For j = 0 To .Cols - 1
.ColAlignment(j) = 4
If j <> 0 Then
.ColWidth(j) = 2000
End If
Next j
.MergeCol(2) = True
.MergeCells = flexMergeFree
For i = 1 To 12
.TextMatrix(i, 0) = i
.TextMatrix(i, 2) = ""
Next
End With
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -