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

📄 form1.frm

📁 VB编写的电力系统潮流计算分析程序。本人根据大学电力系统分析课本编写。
💻 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 + -