📄 frmpower.frm
字号:
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "MSCOMCTL.OCX"
Begin VB.Form frmPower
Caption = "长系列保证出力计算"
ClientHeight = 4125
ClientLeft = 60
ClientTop = 450
ClientWidth = 8070
LinkTopic = "Form1"
MDIChild = -1 'True
ScaleHeight = 7816.501
ScaleMode = 0 'User
ScaleWidth = 8070
Begin MSComctlLib.ProgressBar ProgressBar1
Height = 315
Left = 3240
TabIndex = 3
Top = 0
Width = 4815
_ExtentX = 8493
_ExtentY = 556
_Version = 393216
BorderStyle = 1
Appearance = 0
End
Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1
Height = 3747
Left = 0
TabIndex = 2
Top = 360
Width = 8055
_ExtentX = 14208
_ExtentY = 6615
_Version = 393216
Rows = 10
Cols = 3
AllowUserResizing= 3
End
Begin VB.CommandButton cmdexit
Caption = "退 出"
Height = 317
Left = 1245
TabIndex = 1
Top = 0
Width = 1095
End
Begin VB.CommandButton cmdCalu
Caption = "计 算"
Height = 317
Left = 30
TabIndex = 0
Top = 0
Width = 1215
End
End
Attribute VB_Name = "frmPower"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Private Sub cmdexit_click()
Unload Me
End Sub
Private Sub cmdCalu_Click()
Dim NQ() As Single, dN As Single, QQ As Single
'w() : 一维径流月过程
Dim p() As Single, w() As Single, zs As Single
'VV():第I时段水库蓄水量
Dim vv() As Single, N0() As Single, QP() As Single
Dim i As Integer, j As Integer, vp As Single, zx As Single
'F:假定的供水期平均出力
Dim F As Single, Fn As Single, ve As Single, k As Integer
Dim IL As Integer, z2 As Single, vs As Single, km As Integer
Dim v1 As Single, v2 As Single, kn As Integer, kh As Integer
Dim sRetValue As String, Filenum As Integer, F1 As Single, ab As Integer
Filenum = FreeFile
Call ReadFile '读水位~库容值 gzz(i), gvv(i),水位~下泄流量值 gz1(i), gqq(i)
Call ReadRunoff '读数据组数,起始年,起始月份,m, i0, ii0,读每年的年份,
'每月来水量,年平均流量,aa,a(i, j),b。并计算出多年平均流量
Call CaluFlow '重新计算每月的来水量(扣除船闸用水、灌溉用水)
ReDim NQ(m)
ReDim iss(m), iee(m), QP(m), N0(m), p(m)
Open App1 & "\no.dat" For Input As #Filenum '等出力迭代初始值
For i = 1 To m
Input #Filenum, iss(i), iee(i), QP(i) '第I年的供水期调节流量
Next
Close #Filenum
sRetValue = InputBox("请输入兴利库容v", "保证出力计算")
If sRetValue = "" Then Exit Sub
v = Val(sRetValue)
sRetValue = InputBox("请输入死库容vs", "保证出力计算")
If sRetValue = "" Then Exit Sub
vs = Val(sRetValue)
' v = 1630.78: vs = 552.65
zz = 120#
Call 插值图(mmg, gzz, gvv, vs, zzs) '由死库容对应查出一个死水位来
For i = 1 To m
vp = vs + v / 2#
Call 插值图(mmg, gzz, gvv, vp, zs) '由死库容+兴利库容的平均值在水库水位容积曲线上插出一个上游水位
Call 插值图(nng, gz1, gqq, QP(i), zx) '由各供水期的调节流量插出一个下游水位
N0(i) = ak * QP(i) * (zs - zx)
Next
k = 1
For i = 1 To m
For j = 1 To 12
ReDim Preserve w(k)
w(k) = a(i, j)
k = k + 1
Next j
Next i
kk = 1
'||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Do
iis = iss(kk) + 1 '第I年的供水期开始
ie = iee(kk) '第I年的供水期结束
If (ie > 12 * m) Then ie = 12 * m '当供水期结束期大于372,那么就等于372
F = N0(kk) '设Np=N0,假设的供水期平均出力
F1 = N0(kk) * 0.5
dN = N0(kk) * 0.1
km = 1: mm = 1
ReDim vv(iis To ie + 1)
Debug.Print kk
'=================================================================
Do
v1 = vs + v '供水期初从正常蓄水位开始调节
vv(iis) = vs + v
kh = 0
For j = iis To ie
v2 = v1 + w(j) - QP(kk) 'W(j):供水期时段末的入库径流
If (v2 > vs + v) Then v2 = vs + v
If (v2 < vs - 3 * e1) Then
kh = kh + 1
vv(j + 1) = vs - 3 * e1
Exit For
End If
kn = 0
'------------------------------------------------
Do
vp = (v1 + v2) / 2#
Call 插值图(mmg, gzz, gvv, vp, zs) '由时段初和时段末蓄水量求时段水库平均水位Z上
QQ = w(j) + v1 - v2
Debug.Print "kk="; kk; " j="; j; " v1="; v1; " v2="; v2; " QQ="; QQ;
Call 插值图(nng, gz1, gqq, QQ, zx) '由发电流量q查下游水位流量关系得下游平均水位Z下
Fn = ak * QQ * (zs - zx) '计算本时段平均出力
Debug.Print " Fn="; Fn, " F="; F
If (Fn > F And v2 > vs + v) Then
vv(j + 1) = v2
v1 = v2
Exit Do
End If
If Abs(Fn - F) > e Then
v2 = v2 + (Fn - F) / ak / (zs - zx)
If v2 > (v + vs) Then v2 = v + vs
If v2 < (vs - 3 * e1) Then
kh = kh + 1
vv(j + 1) = vs - 3 * e1
Exit For
End If
kn = kn + 1
End If
Loop Until (Abs(Fn - F) <= e Or kn > 100)
Debug.Print "第三层循环完毕"
'------------------------------------------------
vv(j + 1) = v2 '在循环之前,先使下一个vv值等于v2
v1 = v2
Next j
ve = vs + v
IL = iis
Debug.Print "ve="; v2
For j = iis To ie
If ve > vv(j + 1) Then
ve = vv(j + 1) '算出ve等于该年最小水库蓄水量
IL = j
End If
Next j
If Abs(ve - vs) > e1 Then
If ve > vs Then
If km = -1 Then
km = 1
dN = dN / 2
End If
F = F + dN
Else
If km = 1 Then
km = -1
dN = dN / 2
End If
F = F - dN
End If
End If
Debug.Print "ve - vs="; v2 - vs
Loop Until Abs(ve - vs) <= e1
'=================================================================
Debug.Print "第二层循环完毕"
NQ(kk) = F
ProgressBar1.Value = kk / m * 100
kk = kk + 1
' For i = 1 To 31
' Debug.Print N0(i)
' Next i
Loop Until kk > m
'||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Call 排频(m, NQ, p)
With MSFlexGrid1
.Rows = m + 1
For i = 1 To m
.TextMatrix(i, 0) = i + i0 - 1
.TextMatrix(i, 1) = Format(NQ(i), "#.00")
.TextMatrix(i, 2) = Format(p(i), "#.00")
Next i
End With
Filenum = FreeFile
Open App1 & "\保证出力成果表.dat" For Output As #Filenum
With MSFlexGrid1
For ab = 1 To m
Print #Filenum, .TextMatrix(ab, 0); " "; .TextMatrix(ab, 1); " "; .TextMatrix(ab, 2)
Next ab
Close #Filenum
End With
ProgressBar1.Value = 0
End Sub
Private Sub Form_Load()
Dim j As Integer, i As Integer
ProgressBar1.Value = 0
ProgressBar1.Left = frmPower.Width - ProgressBar1.Width - 150
With MSFlexGrid1
.Top = cmdCalu.Top + cmdCalu.Height + 20
.Width = frmPower.Width - 100
.TextMatrix(i, 0) = "年份"
.TextMatrix(i, 1) = "保证出力"
.TextMatrix(i, 2) = "频率"
For j = 0 To .Cols - 1
.ColAlignment(j) = 4
Next
End With
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -