📄 form1.frm
字号:
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 4500
ClientLeft = 60
ClientTop = 450
ClientWidth = 7590
LinkTopic = "Form1"
ScaleHeight = 4500
ScaleWidth = 7590
StartUpPosition = 3 '窗口缺省
Begin VB.TextBox Text1
BackColor = &H80000000&
BeginProperty Font
Name = "幼圆"
Size = 21.75
Charset = 134
Weight = 400
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 615
Left = 1440
TabIndex = 2
Text = "电力系统潮流计算程序"
Top = 480
Width = 4575
End
Begin VB.CommandButton Command2
Caption = "退出"
BeginProperty Font
Name = "宋体"
Size = 9
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 495
Left = 4800
TabIndex = 1
Top = 3360
Width = 1215
End
Begin VB.CommandButton Command1
Caption = "计算"
BeginProperty Font
Name = "宋体"
Size = 9
Charset = 134
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
Height = 495
Left = 1320
TabIndex = 0
Top = 3480
Width = 1095
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()
Dim m As Integer, n As Integer, i As Integer, j As Integer, zz As Double, lz As Double, k As Integer, l As Integer 'n节电数 m之路数
n = 4
m = 4
k = 2
l = 1
Dim DNI() As Double, DNJ() As Double, ZK() As Double, DK() As Double, BB() As Double, DN() As Double, PI() As Double
Dim JS() As Double, jx() As Double, DS() As Double, DX() As Double, QI() As Double, PJ() As Double, QJ() As Double
Dim KK As Integer, mm As Integer, d As Double, wo As Double, rr As Double, s As Double
Dim x As Integer, w As Double, w2 As Double, w3 As Double
Dim e() As Double, f() As Double, p() As Double, q() As Double, b() As Double, jz() As Double, v() As Double
ReDim DNI(m) As Double, DNJ(m) As Double
ReDim ZK(m) As Double, DK(m) As Double, BB(m) As Double, DN(m) As Double, PI(m) As Double, DS(m) As Double, DX(m) As Double
ReDim JS(n, n) As Double, jx(n, n) As Double, QI(m) As Double, PJ(m) As Double, QJ(m) As Double
ReDim e(n) As Double, f(n) As Double, p(n) As Double, q(n) As Double, v(n) As Double
ReDim b(2 * n - 2) As Double, jz(2 * n - 2, 2 * n - 2) As Double
Open "shuju1.txt" For Input As #1
For i = 1 To m
Input #1, DNI(i), DNJ(i), ZK(i), DK(i), DN(i), BB(i)
Next i
Close #1
Open "shuju2.txt" For Input As #1
For i = 1 To n
Input #1, p(i), q(i), v(i), e(i), f(i)
Next i
Close #1
'读潮流数据
For i = 1 To n
For j = 1 To n
JS(i, j) = 0
jx(i, j) = 0
Next j
Next i
For i = 1 To m
If BB(i) = 1 Then
JS(DNI(i), DNJ(i)) = -ZK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
JS(DNJ(i), DNI(i)) = -ZK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
jx(DNI(i), DNJ(i)) = DK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
jx(DNJ(i), DNI(i)) = DK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
Else
JS(DNI(i), DNJ(i)) = -ZK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
JS(DNJ(i), DNI(i)) = -ZK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
jx(DNI(i), DNJ(i)) = DK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
jx(DNJ(i), DNI(i)) = DK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
End If
Next i
For i = 1 To n
For j = 1 To n
If i = j Then
GoTo ai:
Else
JS(i, i) = JS(i, i) - JS(i, j)
jx(i, i) = jx(i, i) - jx(i, j)
End If
ai:
Next j
Next i
For i = 1 To m
If BB(i) <> 1 Then
JS(DNI(i), DNI(i)) = JS(DNI(i), DNI(i)) + (1 / (BB(i) * BB(i)) - 1 / BB(i)) * ZK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
jx(DNI(i), DNI(i)) = jx(DNI(i), DNI(i)) - (1 / (BB(i) * BB(i)) - 1 / BB(i)) * DK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
JS(DNJ(i), DNJ(i)) = JS(DNJ(i), DNJ(i)) + (1 - 1 / BB(i)) * ZK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
jx(DNJ(i), DNJ(i)) = jx(DNJ(i), DNJ(i)) - (1 - 1 / BB(i)) * DK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
Else: GoTo yi:
End If
yi:
Next i
For i = 1 To m
If DN(i) = 0 Then
GoTo BB
Else
jx(DNI(i), DNI(i)) = jx(DNI(i), DNI(i)) + DN(i)
jx(DNJ(i), DNJ(i)) = jx(DNJ(i), DNJ(i)) + DN(i)
End If
BB:
Next i
jx:
w2 = 0
w3 = 0
For i = 1 To 2 * n - 3 Step 2
b(i) = p((i + 1) / 2)
For j = 1 To n
w2 = -e((i + 1) / 2) * JS((i + 1) / 2, j) * e(j) + e((i + 1) / 2) * jx((i + 1) / 2, j) * f(j) - f((i + 1) / 2) * JS((i + 1) / 2, j) * f(j) - f((i + 1) / 2) * jx((i + 1) / 2, j) * e(j)
b(i) = b(i) + w2
Next j
Next i
For i = 2 To 2 * k Step 2
b(i) = q(i / 2)
For j = 1 To n
w3 = -f(i / 2) * JS(i / 2, j) * e(j) + f(i / 2) * jx(i / 2, j) * f(j) + e(i / 2) * JS(i / 2, j) * f(j) + e(i / 2) * jx(i / 2, j) * e(j)
b(i) = b(i) + w3
Next j
Next i
For i = 2 * k + 2 To 2 * n - 2 Step 2
b(i) = v(i / 2) * v(i / 2) - e(i / 2) * e(i / 2) - f(i / 2) * f(i / 2)
Next i
'求修正量
pd = Abs(b(1))
For i = 1 To 2 * n - 2
If Abs(b(i)) > pd Then
pd = Abs(b(i))
End If
Next i
If pd < 0.00001 Then
GoTo zh
End If
'循环控制
For i = 1 To 2 * k Step 2
For j = 1 To 2 * n - 2 Step 2
If i = j Then
jz(i, j) = -JS((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) - jx((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = -JS((i + 1) / 2, x) * e(x) + jx((i + 1) / 2, x) * f(x)
jz(i, j) = jz(i, j) + w
Next x
Else
jz(i, j) = -JS((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - jx((i + 1) / 2, (j + 1) / 2) * f((i + 1) / 2)
End If '奇数行和列的形成
If i = j Then
jz(i, j + 1) = jx((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = -JS((i + 1) / 2, x) * f(x) - jx((i + 1) / 2, x) * e(x)
jz(i, j + 1) = jz(i, j + 1) + w
Next x
Else
jz(i, j + 1) = jx((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
End If '奇数行偶数列的形成
If i = j Then
jz(i + 1, j + 1) = JS((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) + jx((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = -JS((i + 1) / 2, x) * e(x) + jx((i + 1) / 2, x) * f(x)
jz(i + 1, j + 1) = jz(i + 1, j + 1) + w
Next x
Else
jz(i + 1, j + 1) = JS((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - jx((i + 1) / 2, (j + 1) / 2) * f((i + 1) / 2)
End If '偶数行偶数列的形成
If i = j Then
jz(i + 1, j) = jx((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = JS((i + 1) / 2, x) * f(x) + jx((i + 1) / 2, x) * e(x)
jz(i + 1, j) = jz(i + 1, j) + w
Next x
Else
jz(i + 1, j) = jx((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
End If '偶数行奇数列的形成
Next j
Next i
'PQ节点
For i = 2 * k + 1 To 2 * n - 2 Step 2
For j = 1 To 2 * n - 2 Step 2
If i = j Then
jz(i, j) = -JS((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) - jx((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = -JS((i + 1) / 2, x) * e(x) + jx((i + 1) / 2, x) * f(x)
jz(i, j) = jz(i, j) + w
Next x
Else
jz(i, j) = -JS((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - jx((i + 1) / 2, (j + 1) / 2) * f((i + 1) / 2)
End If '奇数行和列的形成
If i = j Then
jz(i, j + 1) = jx((i + 1) / 2, (i + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
For x = 1 To n
w = -JS((i + 1) / 2, x) * f(x) - jx((i + 1) / 2, x) * e(x)
jz(i, j + 1) = jz(i, j + 1) + w
Next x
Else
jz(i, j + 1) = jx((i + 1) / 2, (j + 1) / 2) * e((i + 1) / 2) - JS((i + 1) / 2, (i + 1) / 2) * f((i + 1) / 2)
End If '奇数行偶数列的形成
If i = j Then
jz(i + 1, j + 1) = -2 * f((i + 1) / 2)
Else
jz(i + 1, j + 1) = 0
End If '偶数行偶数烈的形成
If i = j Then
jz(i + 1, j) = -2 * e((i + 1) / 2)
Else
jz(i + 1, j) = 0
End If '偶数行奇数列的形成
Next j
Next i
'PV节点
KK = 1
heres:
For mm = KK To 2 * n - 2 '选主元素
ww = mm
d = Abs(jz(mm, mm))
For i = mm + 1 To 2 * n - 2
If Abs(jz(i, mm)) > d Then
d = Abs(jz(i, mm)): ww = i
End If
Next i
For j = KK To 2 * n - 2
rr = jz(mm, j): jz(mm, j) = jz(ww, j): jz(ww, j) = rr
Next j
rr = b(mm): b(mm) = b(ww): b(ww) = rr
Next mm
wo = jz(KK, KK) ' 主程序
b(KK) = b(KK) / wo
For j = KK To 2 * n - 2
jz(KK, j) = jz(KK, j) / wo
Next j
For i = KK + 1 To 2 * n - 2
For j = KK + 1 To 2 * n - 2
jz(i, j) = jz(i, j) - jz(i, KK) * jz(KK, j)
Next j
Next i
For i = KK + 1 To 2 * n - 2
b(i) = b(i) - jz(i, KK) * b(KK)
Next i
If KK <> 2 * n - 2 Then
KK = KK + 1: GoTo heres
End If
For i = 2 * n - 3 To 1 Step -1 '回代
s = 0
For j = i + 1 To 2 * n - 2
s = s + jz(i, j) * b(j)
Next j
b(i) = b(i) - s
Next i
For i = 1 To n - 1
f(i) = f(i) - b(2 * i)
e(i) = e(i) - b(2 * i - 1)
Next i
GoTo jx
zh:
For i = 1 To m
If BB(i) = 1 Then
DS(i) = ZK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
DX(i) = -DK(i) / (ZK(i) * ZK(i) + DK(i) * DK(i))
Else
DS(i) = ZK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
DX(i) = -DK(i) / (ZK(i) * ZK(i) * BB(i) + DK(i) * DK(i) * BB(i))
End If
Next i
For i = 1 To m
If BB(i) = 1 Then
PI(i) = e(DNI(i)) * (e(DNI(i)) * DS(i) - e(DNJ(i)) * DS(i) - f(DNI(i)) * DX(i) - f(DNI(i)) * DN(i) + f(DNJ(i)) * DX(i)) - f(DNI(i)) * (e(DNJ(i)) * DX(i) - e(DNI(i)) * DX(i) + f(DNJ(i)) * DS(i) - f(DNI(i)) * DS(i) - e(DNI(i)) * DN(i))
QI(i) = e(DNI(i)) * (e(DNJ(i)) * DX(i) - e(DNI(i)) * DX(i) + f(DNJ(i)) * DS(i) - f(DNI(i)) * DS(i) - e(DNI(i)) * DN(i)) + f(DNI(i)) * (e(DNI(i)) * DS(i) - e(DNJ(i)) * DS(i) - f(DNI(i)) * DX(i) - f(DNI(i)) * DN(i) + f(DNJ(i)) * DX(i))
PJ(i) = e(DNJ(i)) * (e(DNJ(i)) * DS(i) - e(DNI(i)) * DS(i) - f(DNJ(i)) * DX(i) - f(DNJ(i)) * DN(i) + f(DNI(i)) * DX(i)) - f(DNJ(i)) * (e(DNI(i)) * DX(i) - e(DNJ(i)) * DX(i) + f(DNI(i)) * DS(i) - f(DNJ(i)) * DS(i) - e(DNJ(i)) * DN(i))
QJ(i) = e(DNJ(i)) * (e(DNI(i)) * DX(i) - e(DNJ(i)) * DX(i) + f(DNI(i)) * DS(i) - f(DNJ(i)) * DS(i) - e(DNJ(i)) * DN(i)) + f(DNJ(i)) * (e(DNJ(i)) * DS(i) - e(DNI(i)) * DS(i) - f(DNJ(i)) * DX(i) - f(DNJ(i)) * DN(i) + f(DNI(i)) * DX(i))
Else
PI(i) = e(DNI(i)) * (e(DNI(i)) * DS(i) - e(DNJ(i)) * DS(i) - f(DNI(i)) * DX(i) - f(DNI(i)) * (1 - (1 / BB(i))) * DX(i) + f(DNJ(i)) * DX(i)) - f(DNI(i)) * (e(DNJ(i)) * DX(i) - e(DNI(i)) * DX(i) + f(DNJ(i)) * DS(i) - f(DNI(i)) * DS(i) - e(DNI(i)) * (1 - (1 / BB(i))) * DX(i))
QI(i) = e(DNI(i)) * (e(DNJ(i)) * DX(i) - e(DNI(i)) * DX(i) + f(DNJ(i)) * DS(i) - f(DNI(i)) * DS(i) - e(DNI(i)) * (1 - (1 / BB(i))) * DX(i)) + f(DNI(i)) * (e(DNI(i)) * DS(i) - e(DNJ(i)) * DS(i) - f(DNI(i)) * DX(i) - f(DNI(i)) * (1 - (1 / BB(i))) * DX(i) + f(DNJ(i)) * DX(i))
PJ(i) = e(DNJ(i)) * (e(DNJ(i)) * DS(i) - e(DNI(i)) * DS(i) - f(DNJ(i)) * DX(i) - f(DNJ(i)) * (-(1 / BB(i))) * (1 - (1 / BB(i))) * DX(i) + f(DNI(i)) * DX(i)) - f(DNJ(i)) * (e(DNI(i)) * DX(i) * (1 / BB(i)) - e(DNJ(i)) * DX(i) + f(DNI(i)) * DS(i) - f(DNJ(i)) * DS(i) - e(DNJ(i)) * (-(1 / BB(i))) * (1 - (1 / BB(i))) * DX(i))
QJ(i) = e(DNJ(i)) * (e(DNI(i)) * DX(i) - e(DNJ(i)) * DX(i) + f(DNI(i)) * DS(i) - f(DNJ(i)) * DS(i) - e(DNJ(i)) * (-(1 / BB(i))) * (1 - (1 / BB(i))) * DX(i)) + f(DNJ(i)) * (e(DNJ(i)) * DS(i) - e(DNI(i)) * DS(i) - f(DNJ(i)) * DX(i) - f(DNJ(i)) * (-(1 / BB(i))) * (1 - (1 / BB(i))) * DX(i) + f(DNI(i)) * DX(i))
End If
Next i
Open "迭代结果.txt" For Output As #10
For i = 1 To n
Print #10, i; "节点电压"; e(i); f(i)
Next i
For i = 1 To m
Print #10, DNI(i); "--"; DNJ(i); "支路功率"; PI(i); QI(i); ""
Print #10, Tab
Next i
For i = 1 To m
Print #10, DNJ(i); "--"; DNI(i); "支路功率"; PJ(i); QJ(i);
Print #10, Tab
Next i
Close #10
End Sub
Private Sub Command2_Click()
Unload Form1
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -