⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmpower.frm

📁 水利计算程序!年径流量!调节计算!调洪计算.
💻 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 + -