0

有人可以帮助我使用Python。我正在尝试针对负载和发电的不同值运行 168 牛顿拉夫森潮流研究。我在 Excel 电子表格中列出了这些值,并希望将这些值自动上传到 PSSE,运行模拟,然后将总线电压结果导出到另一个电子表格中,用于单独列中的所有 168 个模拟。

我有以下代码,但第 47 行显示错误: def runstudy(hour, values) SyntaxError: invalid syntax

我不知道如何纠正这个问题。

任何帮助将不胜感激

from __future__ import with_statement
from collections import defaultdict
import csv

import psspy


CSV_PQ_FILENAME = 'c:/Users\14088757\Desktop\EP401_Simulation Values_1.1.csv'
OUTPUT_CSV_FILENAME = 'c:/Users\14088757\Desktop\EP401_Simulation Values_1.1.csv'
STUDY_BASECASE = 'c:/Users\14088757\Desktop\EP401_PSSE_URA_20120716_6626.01.sav'


with open(CSV_PQ_FILENAME) as csvfile:
    reader = csv.reader(csvfile)
    headers = reader.next()
    data = list(reader)

# now all the data from that sheet is in 'data'
# the columns are:

# load?, bus num, id, p or q, 6625, 6626, .... 

hourly_data = defaultdict(list)

hour_headings = headers[4:]

for row in data:
    isload, busnum, _id, porq = row[:4]
    hour_values = row[4:]

    # group all of the hourly data together in one list.
    for hour, value in zip(hour_headings, hour_values):
        hourly_data[hour].append(
            (int(isload), int(busnum), _id, porq, float(value))

# hourly_data now looks like this:
# { '6626': [
#             (1, 104, '1', 'P', 0.33243)
#             ...
#            ],
#   '6627': [ ... ]
#   '6628': [ ... ]
#}

# lets run some simulations.

def runstudy(hour, values)

    # reload the base case.
    psspy.case(STUDY_BASECASE)

    # assume CSV has columns as described in the doc string
    for isload, bus, _id, porq, value in values:

        if isload:
            if porq.lower() == 'p':
                psspy.load_data_3(bus, _id, realar1=value)
            elif porq.lower() == 'q':
                psspy.load_data_3(bus, _id, realar2=value)
        else:
            psspy.machine_data_2(bus, _id, realar1=value)

    # solve case after adding all loads / machines.
    psspy.fnsl()

    # return the bus voltages.
    # now to write the new bus voltages to a file.
    ierr, (voltages,) = psspy.abusreal(sid=-1, string=["PU"])
    ierr, (buses,) = psspy.abusint(sid=-1, string=["NUMBER"])

    return buses, voltages


# here we assume the buses will always be the same, no need
# keep storing them. I'll only store the voltages.
all_results = {}
for hour, values in hourly_data.items():
    buses, voltages = runstudy(hour, values)
    all_results[hour] = voltages

# now write all the results to a csv file
# CSV will have these columns:


# bus number, voltage (pu) 2265, 2267, ...
spreadsheet_results = [['buses'] + buses]
for hour, voltages in all_results.items():
    spreadsheet_results.append([hour + ' pu'] + voltages)

# spreadsheet_results now looks like the one we want to write to the CSV.
with open(OUTPUT_CSV_FILENAME, 'wb') as output:
    output.writerows(spreadsheet_results)
4

1 回答 1

1

吉姆,

有一个简单的语法错误。我相信你现在已经注意到了。做这个 -

def runstudy(hours, values):

除非您共享您的 .sav 和 .csv 文件,否则我不能对其余代码多说。我想知道它是怎么回事,特别是因为我对 PSSE 很感兴趣。如果您需要进一步的帮助,请将文件邮寄给我。

于 2012-08-19T02:53:40.127 回答