PSSE/Python import excel values and export bus voltages from PSSE
Question: Could someone please help me with Python. I am trying to run 168 newton
raphson load flow studies for different values for loads and gens. I have
these values set out in an excel spreadsheet and would like to automatically
upload these values into PSSE, run the simulation then export the bus voltage
results to another spreadsheet for all 168 sims in separate columns.

I have the following code but it is showing an error with line 47: def
runstudy(hour, values) SyntaxError: invalid syntax

I am not sure how to rectify this.

Any help would be greatly appreciated

    
    
    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)
    


Answer: Jim,

There is a simple syntax error. I am sure you have noticed it by now. Do this
-

    
    
    def runstudy(hours, values):
    

I cannot say much about the rest of the code unless your share your .sav and
.csv files. I would be like to know how it went especially because I am
interested in PSSE. Mail me the files if you need further help.

