Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

The code flow is good. I re-arranged it, set it for one case run, runtime to 5 sec for testing and added a log file as well as change the integration step back to 1/4 of a cycle, recommended for more power system studies. This version run OK in v.33:

# -- coding:utf-8 --

import os,sys 
import glob

PYTHONPATH = r'C:\Program Files (x86)\PTI\PSSE33\PSSBIN'

sys.path.append(PYTHONPATH) 
os.environ['PATH'] += ';' + PYTHONPATH 
import redirect 
import psspy

psspy.psseinit(12000) 
_i, _f = psspy.getbatdefaults()
#Redirect output from PSSE to Python:
redirect.psse2py()

GENERATORS = [[30,'1'],[31,'1'],[32,'1'],[33,'1'],[34,'1'],[35,'1'],[36,'1'],[37,'1'],[38,'1'],[39,'1']] 

#Loop through cases
#for CASEi in glob.glob(os.path.join('C:\Users\Desktop\IEEE39_new\sav\', '*.sav')): 
for k in range(1):
    CASEi = 'IEEE39_v33.sav'
    psspy.case(CASEi)

    # Convert loads (3 step process):
    psspy.conl(-1,1,1)
    psspy.conl(-1,1,2,[0,0],[100,0,0,100])
    psspy.conl(-1,1,3)

    # Convert generators:
    psspy.cong()

    # Solve for dynamics
    psspy.ordr()
    psspy.fact()
    psspy.tysl()

    # Save converted case
    case_root = os.path.splitext(sys.argv[0])[0]
    psspy.save(case_root + "_C.sav")

    # Add dynamics data
    #psspy.dyre_new(dyrefile="C:\Users\Desktop\\IEEE39_new\\IEEE39.dyr")
    psspy.dyre_new(dyrefile="IEEE39.dyr")

    # Add channels
    psspy.chsb(0,1,[-1,-1,-1,1,7,1])

    # Save snapshot
    psspy.snap(sfile=case_root + ".snp")

    #Loop through outages
    for gen in GENERATORS:
        study = case_root + "_SIM_%d_%s" % (gen[0],gen[1])
        sys.stdout = open(study+'.log','w') # redirect all prints to this log file

        # Re-load case
        psspy.case(case_root + "_C.sav")
        psspy.rstr(sfile=case_root + ".snp")
        #psspy.dynamics_solution_params([_i,_i,_i,_i,_i,_i,_i,_i],[_f,_f, 0.02,_f,_f,_f,_f,_f],"")
        psspy.dynamics_solution_params([_i,_i,_i,_i,_i,_i,_i,_i],[_f,_f,0.004,0.016,_f,_f,_f,_f],"")

        # Initialize
        psspy.strt(outfile=study+'.out')
        psspy.run(tpause=0)
        psspy.run(tpause=1)

        # Disconnect generator
        ierr = psspy.dist_machine_trip(gen[0],gen[1])

        # Run to 60 seconds
        time = 5
        psspy.run(tpause=time)
#Halt
psspy.pssehalt_2()