0

誰かがPythonで私を助けてくれませんか. 負荷と発電機のさまざまな値に対して、168 のニュートン ラフソン潮流スタディを実行しようとしています。これらの値を Excel スプレッドシートに設定しました。これらの値を PSSE に自動的にアップロードし、シミュレーションを実行してから、バス電圧の結果を別のスプレッドシートにエクスポートして、168 個のシミュレーションすべてを別々の列に表示したいと考えています。

次のコードがありますが、47 行目にエラーが表示されています: def runstudy(hour, values) SyntaxError: 無効な構文

これを修正する方法がわかりません。

どんな助けでも大歓迎です

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 に答える