?? 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 = "電力系統(tǒng)潮流計算程序"
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節(jié)電數(shù) m之路數(shù)
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
'讀潮流數(shù)據(jù)
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
'循環(huán)控制
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 '奇數(shù)行和列的形成
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 '奇數(shù)行偶數(shù)列的形成
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 '偶數(shù)行偶數(shù)列的形成
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 '偶數(shù)行奇數(shù)列的形成
Next j
Next i
'PQ節(jié)點
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 '奇數(shù)行和列的形成
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 '奇數(shù)行偶數(shù)列的形成
If i = j Then
jz(i + 1, j + 1) = -2 * f((i + 1) / 2)
Else
jz(i + 1, j + 1) = 0
End If '偶數(shù)行偶數(shù)烈的形成
If i = j Then
jz(i + 1, j) = -2 * e((i + 1) / 2)
Else
jz(i + 1, j) = 0
End If '偶數(shù)行奇數(shù)列的形成
Next j
Next i
'PV節(jié)點
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 "迭代結(jié)果.txt" For Output As #10
For i = 1 To n
Print #10, i; "節(jié)點電壓"; 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 + -