📄 flowcompute.bas
字号:
Do Until rstjdxx_flow_code.EOF
Select Case Trim(rstjdxx_flow_code.Fields("flag"))
Case "0" 'pq节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 1
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Ps(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("p")) ' / Sb_jzgl
Qs(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / Sb_jzgl
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "0"
Case "1" 'pv节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / CSng(rstjdxx_flow_code.Fields("jzdy")) '实际电压的标幺值(由于输入界面的问题,暂定为1。05)
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Ps(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("p")) '/ Sb_jzgl
Qs(CInt(rstjdxx_flow_code.Fields("jdbh"))) = (CSng(rstjdxx_flow_code.Fields("qv"))) ^ 2 ' / CSng(rstjdxx_flow_code.Fields("jzdy"))) ^ 2
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "1"
Case "2" '平衡节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / CSng(rstjdxx_flow_code.Fields("jzdy")) '(暂定为1。1)
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "2"
End Select
rstjdxx_flow_code.MoveNext
Loop
rstjdxx_flow_code.Close
End Sub
Public Sub pq()
' Node_Number = 4
' ReDim bb(1 To Node_Number, 1 To Node_Number) As Single
' ReDim gg(1 To Node_Number, 1 To Node_Number) As Single
' bb(1, 1) = -8.242877
' bb(1, 2) = 2.352941
' bb(1, 3) = 3.666667
' bb(1, 4) = 1.891074
' bb(2, 1) = 2.352941
' bb(2, 2) = -4.727377
' bb(2, 3) = 0
' bb(2, 4) = 2.403846
' bb(3, 1) = 3.666667
' bb(3, 2) = 0
' bb(3, 3) = -3.333333
' bb(3, 4) = 0
' bb(4, 1) = 1.891074
' bb(4, 2) = 2.403846
' bb(4, 3) = 0
' bb(4, 4) = -4.26159
'
' gg(1, 1) = 1.042093
' gg(1, 2) = -0.588235
' gg(1, 3) = 0
' gg(1, 4) = -0.453858
' gg(2, 1) = -0.588235
' gg(2, 2) = 1.069005
' gg(2, 3) = 0
' gg(2, 4) = -0.480769
' gg(3, 1) = 0
' gg(3, 2) = 0
' gg(3, 3) = 0
' gg(3, 4) = 0
' gg(4, 1) = -0.453858
' gg(4, 2) = -0.480769
' gg(4, 3) = 0
' gg(4, 4) = 0.934627
' Call AD
' Call NodeAndTree
' ReDim NAT(1 To Node_Number, 1 To Node_Number) As Integer
' NAT(1, 3) = 1
' NAT(1, 2) = 1
' NAT(1, 4) = 1
' NAT(2, 4) = 1
' NAT(3, 1) = 1
' NAT(2, 1) = 1
' NAT(4, 1) = 1
' NAT(4, 2) = 1
' NAT(1, 1) = 1
' NAT(2, 2) = 1
' NAT(3, 3) = 1
' NAT(4, 4) = 1
' Node_Number = 4
' ReDim vv(1 To Node_Number) As Double
' ReDim qq(1 To Node_Number) As Double
' ReDim ES(1 To Node_Number) As String
' vv(1) = 1
' vv(2) = 1
' qq(1) = 0
' qq(2) = 0
' vv(3) = 1.1
' qq(3) = 0
' vv(4) = 1.05
' qq(4) = 0
' ES(1) = "0"
' ES(2) = "0"
' ES(3) = "1"
' ES(4) = "2"
' ReDim Ps(1 To Node_Number - 1) As Double
' ReDim Qs(1 To Node_Number - 1) As Double
' Ps(1) = -0.3
' Ps(2) = -0.55
' Ps(3) = 0.5
' Qs(1) = -0.18
' Qs(2) = -0.13
' Exit Sub
Node_Number = 155
Operate_Code = "00"
Call AD
Call NodeAndTree
Call prepq '赋予初值
pqjd = 0.00001
start:
kp = 1
kq = 1
Call psub '有功不平衡量
If kp = 1 Then
Call linefp
kq = 1
addrr:
Call qsub
If kq = 1 Then
Call linefq
kp = 1
GoTo start '转移开始
Else
If kp = 1 Then
GoTo start '转移到开始
Else
'计算完毕
End If
End If
Else
If kq = 1 Then
GoTo addrr: '转移到无功不平衡量
Else
'计算完毕
End If
End If
End Sub
Public Sub qsub()
ReDim subqi(1 To Node_Number - 1) As Double
subqiflag = False
Dim i As Integer
For i = 1 To Node_Number - 1
If ES(i) = "0" Then
For j = 1 To Node_Number
If NAT(i, j) = 1 Then
subqi(i) = subqi(i) + vv(i) * vv(j) * (gg(i, j) * Sin(qq(i) - qq(j)) - bb(i, j) * Cos(qq(i) - qq(j)))
End If
Next j
subqi(i) = Qs(i) - subqi(i)
If Abs(subqi(i)) > pqjd Then
subqiflag = True
End If
subqi(i) = subqi(i) / vv(i)
End If
Next i
If subqiflag = False Then
kq = 0
End If
End Sub
Public Sub linefq()
Dim i As Integer
Dim j As Integer
Dim fnoi As Integer
Dim fnoj As Integer
ReDim bbqq(1 To Node_Number - 1, 1 To Node_Number - 1) As Double
ReDim qqvv(1 To Node_Number - 1) As Double
ReDim subvv(1 To Node_Number - 1) As Double
fnoi = 0
For i = 1 To Node_Number - 1
If ES(i) = "0" Then
fnoi = fnoi + 1
fnoj = 0
For j = 1 To Node_Number - 1
If ES(j) = "0" Then
fnoj = fnoj + 1
bbqq(fnoi, fnoj) = -bb(i, j)
End If
Next j
End If
Next i
Call Line_F(fnoj, bbqq, subqi, subvv)
fnoi = 0
For i = 1 To Node_Number - 1
If ES(i) = "0" Then
fnoi = fnoi + 1
vv(i) = vv(i) + subvv(fnoi)
End If
Next i
End Sub
Public Sub linefp()
Dim i As Integer
Dim j As Integer
ReDim bbpp(1 To Node_Number - 1, 1 To Node_Number - 1) As Double
ReDim vvqq(1 To Node_Number - 1) As Double
ReDim subqq(1 To Node_Number - 1) As Double
For i = 1 To Node_Number - 1
For j = 1 To Node_Number - 1
bbpp(i, j) = -bb(i, j)
Next j
Next i
Call Line_F(Node_Number - 1, bbpp, subpi, vvqq)
For i = 1 To Node_Number - 1
subqq(i) = vvqq(i) / vv(i)
qq(i) = qq(i) + subqq(i)
Next i
End Sub
Public Sub psub()
ReDim subpi(1 To Node_Number - 1) As Double
subpiflag = False
Dim i As Integer
For i = 1 To Node_Number - 1
For j = 1 To Node_Number
If NAT(i, j) = 1 Then
subpi(i) = subpi(i) + vv(i) * vv(j) * (gg(i, j) * Cos(qq(i) - qq(j)) + bb(i, j) * Sin(qq(i) - qq(j)))
End If
Next j
subpi(i) = Ps(i) - subpi(i)
If Abs(subpi(i)) > pqjd Then
subpiflag = True
End If
subpi(i) = subpi(i) / vv(i)
Next i
If subpiflag = False Then
kp = 0
End If
End Sub
Public Sub prepq()
Dim rstjdxx_flow_code As ADODB.Recordset
ReDim E(1 To Node_Number) As Double
ReDim F(1 To Node_Number) As Double
ReDim Ps(1 To Node_Number) As Double
ReDim Qs(1 To Node_Number) As Double
ReDim QsPv(1 To Node_Number) As Double
ReDim ES(1 To Node_Number) As String
ReDim vv(1 To Node_Number) As Double
ReDim qq(1 To Node_Number) As Double
Set rstjdxx_flow_code = New ADODB.Recordset '赋予初值
rstjdxx_flow_code.Open "select * from jdxx_flow_code where code ='" & Operate_Code & "'", cnn
rstjdxx_flow_code.MoveFirst
Do Until rstjdxx_flow_code.EOF
Select Case Trim(rstjdxx_flow_code.Fields("flag"))
Case "0" 'pq节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 1
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Ps(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("p")) ' / Sb_jzgl
Qs(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / Sb_jzgl
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "0"
vv(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 1
qq(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Case "1" 'pv节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / CSng(rstjdxx_flow_code.Fields("jzdy")) '实际电压的标幺值(由于输入界面的问题,暂定为1。05)
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Ps(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("p")) '/ Sb_jzgl
Qs(CInt(rstjdxx_flow_code.Fields("jdbh"))) = (CSng(rstjdxx_flow_code.Fields("qv"))) ^ 2 ' / CSng(rstjdxx_flow_code.Fields("jzdy"))) ^ 2
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "1"
vv(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv"))
qq(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
Case "2" '平衡节点
E(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv")) ' / CSng(rstjdxx_flow_code.Fields("jzdy")) '(暂定为1。1)
F(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
ES(CInt(rstjdxx_flow_code.Fields("jdbh"))) = "2"
vv(CInt(rstjdxx_flow_code.Fields("jdbh"))) = CSng(rstjdxx_flow_code.Fields("qv"))
qq(CInt(rstjdxx_flow_code.Fields("jdbh"))) = 0
End Select
rstjdxx_flow_code.MoveNext
Loop
rstjdxx_flow_code.Close
' Dim i As Integer '简单的写法,前提是读了数据库
' For i = 1 To Node_Number
' If ES(i) = "0" Then
' vv(i) = 1
' qq(i) = 0
' End If
' If ES(i) = "1" Then
' vv(i) = E(i)
' qq(i) = 0
' End If
' If ES(i) = "2" Then
' vv(i) = E(i)
' qq(i) = 0
' End If
' Next i
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -