Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Send data to Excel whit NaN values

Hi folks!, Thanks to the help of this forum I made many script in python. Once again: Thank you all! I made a script to detect under voltage buses in post-mortem .SAVs cases and then send the info to Excel. The script work fine but can´t handle buses with NaN values…. The full issue is:

  • I make a dynamic simulation of a branch trip connected to a generator.
  • After the simulation, the system survives.
  • All voltage and branch currents are ok, but the bus voltage of the generator (isolated after the trip) has a mysterious value of “-1,$” (NaN!)
  • When I try to send the information to Excel, the script fails (stops)
  • The version of my PSS/E is 33.5 and Python 2.7.

Should I write any type of exception in my script? Should a try not to trip generators without transformers?... Any ideas? Thanks a lot in advance!


 import os,sys
sys.path.append(r"C:\Program Files\PTI\PSSE33\PSSBIN")
os.environ['PATH'] = (r"C:\Program Files\PTI\PSSE33\PSSBIN;"
                      + os.environ['PATH'])
import psspy
import redirect
import excelpy
redirect.psse2py()
psspy.psseinit(10000)

# Case to search
Escenarios=['Case1', 'Case2', 'Case3', 'Case4']

SizeEscenarios=len(Escenarios)

# Open and Show excel
x1 = excelpy.workbook()
x1.show()

# start counter
rowid = 0

for jj in range(0,SizeEscenarios): 

    rowid +=1

    CASE=Escenarios[jj]
    psspy.case(r'%s.SAV' %CASE)

    # Buses in service 
    ierr, nbuses = psspy.abuscount(-1, 1)

    # BUSES
    ierr, number11 = psspy.abusint(-1,2,string='NUMBER')
    ierr, name11 = psspy.abuschar(-1,2,string='NAME')
    ierr, area11 = psspy.abusint(-1,2, string='AREA')
    ierr, owner11 = psspy.abusint(-1,2, string='OWNER')
    ierr, base11 = psspy.abusreal(-1,2,string='BASE')
    ierr, pu11 = psspy.abusreal(-1,2,string='PU')

    # BUSES
    number1 = number11[0]
    name1 = name11[0]
    area1 = area11[0]
    owner1 = owner11[0]
    base1 = base11[0]
    pu1 = pu11[0]

    # BUSES
    # Write Titel on Excel
    x1.set_cell((rowid, 1), 'CASO: %s' %CASE)
    rowid +=1
    x1.set_cell((rowid, 1), 'NUMBER')
    x1.set_cell((rowid, 2), 'NAME')
    x1.set_cell((rowid, 3), 'AREA')
    x1.set_cell((rowid, 4), 'OWNER')
    x1.set_cell((rowid, 5), 'BASE')
    x1.set_cell((rowid, 6), 'PU')
    # Select what to send   
    for k in range(len(number1)):
        number = number1[k]
        name = name1[k]
        area = area1[k]
        owner = owner1[k]
        base = base1[k]
        pu = pu1[k]
        if area ==1 or area == 2:
            if pu < 0.9:
               rowid +=1
               x1.set_cell((rowid, 1), number)
               x1.set_cell((rowid, 2), name)
               x1.set_cell((rowid, 3), area)
               x1.set_cell((rowid, 4), owner)
               x1.set_cell((rowid, 5), base)
               x1.set_cell((rowid, 6), pu)
            elif pu > 1.1:
               rowid +=1
               x1.set_cell((rowid, 1), number)
               x1.set_cell((rowid, 2), name)
               x1.set_cell((rowid, 3), area)
               x1.set_cell((rowid, 4), owner)
               x1.set_cell((rowid, 5), base)
               x1.set_cell((rowid, 6), pu)

# for End!  

# Save Workbook
x1.save('VoltageCheck.xlsx')
# Close PSS            
psspy.pssehalt_2()
import winsound
winsound.Beep(440,250)