电力系统潮流计算标准算例的数据(从3节点到300节点都齐了)。 包含IEEE格式、BPA格式、清华格式,同时有各个节点的拓扑图

搞电力系统分析的兄弟们应该都懂,标准算例就是咱的"练功房"。从3节点到300节点的各种妖魔鬼怪,要是没在标准算例里摸爬滚打过,出去实战绝对要跪。今儿咱们就来盘一盘这些藏在数据里的门道。

先看IEEE格式这个老大哥,它家的数据排列跟强迫症似的。举个9节点系统的例子:

# IEEE数据读取示例
def parse_ieee_bus(line):
    bus_num = int(line[0:4])
    bus_type = int(line[5:6])
    pd = float(line[40:49])
    qd = float(line[49:59])
    # 这切片看得眼疼是吧?习惯就好...
    return {'num':bus_num, 'type':bus_type, 'pd':pd, 'qd':qd}

注意看那严格的列对齐,差一个空格整个解析就崩。特别是节点类型字段(bus_type),0是PQ节点,1是PV节点,2是平衡节点,这个编码规则比女朋友的心思还难记错。

BPA格式就野多了,自带方言属性。它的支路数据长这样:

L 母线A 230. 母线B 230. 0.002 0.014 0.14 400. 

第一眼看到这格式,还以为在看电报码。字母L开头代表线路,后面跟着的是电压等级和阻抗参数。处理这种数据建议用正则表达式:

import re
bpa_pattern = r"L\s+(\w+)\s+(\d+\.?)\s+(\w+)\s+(\d+\.?)\s+([\d.]+)\s+([\d.]+)"
match = re.match(bpa_pattern, line)
if match:
    from_bus = match.group(1)
    to_bus = match.group(3)
    r = float(match.group(5))

注意电压等级单位可能隐含在数值里,比如230.可能代表230kV,这个坑我当年掉进去过。

电力系统潮流计算标准算例的数据(从3节点到300节点都齐了)。 包含IEEE格式、BPA格式、清华格式,同时有各个节点的拓扑图

清华格式是国产良心,特点是用中文关键字。看到这样的数据别慌:

节点数量=118
[节点数据]
1, 平衡节点, 电压=1.06
2, PQ节点, 有功=1.2, 无功=0.3

处理这种格式最爽的是可以直接用CSV解析器:

import csv
with open('thupower.dat') as f:
    reader = csv.DictReader(f, fieldnames=['节点号','类型','参数'])
    for row in reader:
        if row['类型'] == '平衡节点':
            # 这里可以玩点骚操作...

但要注意中文字段的匹配,曾经有兄弟把"平衡节点"写成"平横节点"debug了一整夜(别问我是怎么知道的)。

拓扑图这事必须单说。有个冷知识:节点编号不连续的系统,用networkx画图会出灵异事件。正确的操作姿势是:

import networkx as nx
G = nx.Graph()
for line in lines_data:
    G.add_edge(from_node, to_node, weight=impedance)
nx.draw(G, with_labels=True, node_size=500)
# 记得调spring_layout参数,不然画出来的像毛线团

画300节点拓扑时,建议关掉节点标签显示,否则你会得到一张毕加索风格的"杰作"。

玩转这些算例有个隐藏技巧:准备三套解析器互相验证。当IEEE和BPA的计算结果对不上时,用清华格式当裁判。有次我卡在节点相角差过大的问题上,最后发现是BPA数据里的并联导纳单位搞反了——这种跨格式校验能救命。

最后给个忠告:别看300节点数据庞大,真正要命的反而是小系统。3节点系统的收敛性问题能把牛顿拉夫逊法逼疯,这时候就得祭出PQ分解法或者...直接调求解器参数(别死磕才是真谛)。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐