def func_nudos(): # escribe el fichero de definición del subsistema para el caso de agrupaciones de nudos buses = [] bus = sistema.Sistema.split(',') for b in bus: buses.append(int(b)) n = buses.__len__() #se crea el area 99 psspy.area_data(99, _i, [_f, _f], r"""S.ESTUDIO""") #se mueven los buses del sistema de estudio for bus in buses: psspy.bus_chng_3(bus, [_i, 99, _i, _i], [_f, _f, _f, _f, _f, _f, _f], _s) #se obtienen las areas del caso y se cuentan areas = redpsse.get_areas() area_numbers=[] for x in areas: if x.number !=99: area_numbers.append(x.number) na=area_numbers.__len__() #si existe el area 9, se considera caso islas if 9 in area_numbers: Umin=parametros.U_min_i Umax=parametros.U_max_i else: Umin=parametros.U_min_p Umax=parametros.U_max_p # Ruta del fichero path = os.path.join(Rutas().ruta_casos_procesados, str(caso.N_Caso) + '_' + str(sistema.Nombre) + '.sub') Sub = open(path, 'w') # Escribimos el fichero Sub.write('SUBSYSTEM \'CON_MON\'\n') Sub.write(' JOIN GROUP_1\n') for area in area_numbers: if area not in [6,7,8]: Sub.write(' AREA ' + str(area) + '\n') Sub.write(' AREA 99\n') Sub.write(' KVRANGE ' + str(Umin) +' '+ str(Umax)+ '\n') Sub.write(' END\n') Sub.write('END\n') Sub.write('SUBSYSTEM \'S.ESTUDIO\'\n') Sub.write('AREA 99\n') Sub.write('END\n') Sub.write('SUBSYSTEM \'S.OPUESTO\'\n') for area in area_numbers: Sub.write('AREA ' + str(area) + '\n') for a in range(0,na,1): Sub.write('END\n') Sub.write('END\n') return path
def add_new_gen(gen_bus, P_inj, Q_max, Q_min): psspy.bus_data_3(gen_bus, [1, 1, 1, 1], [0.0, 1.0, 0.0, 1.1, 0.9, 1.1, 0.9], "") psspy.bus_chng_3(gen_bus, [2, _i, _i, _i], [_f, _f, _f, _f, _f, _f, _f], _s) psspy.plant_data(gen_bus, 0, [1.0, 100.0]) psspy.machine_data_2(gen_bus, r"""1""", [1, 1, 0, 0, 0, 0], [ 0.0, 0.0, 9999.0, -9999.0, 9999.0, -9999.0, 100.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ]) psspy.machine_chng_2(gen_bus, r"""1""", [_i, _i, _i, _i, _i, 1], [ P_inj, _f, Q_max, Q_min, P_inj, 0.0, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f ]) return
def preprocesado(parametros, info_casos): # se inicia el PSS/E initpss.inicia_psse(print_alert_psse=True) for x in info_casos: try: #se encuentra caso en la carpeta y se carga path_caso_psse = os.path.join(Rutas().ruta_casos, str(x.N_Caso) + '.sav') caso_pss = redpsse.CasoPSSE(filepath=path_caso_psse) caso_pss.load(save_previous=False) #se comprueba si el caso es peninsular o insular consultando las areas areas = redpsse.get_areas() area_numbers = [] for a in areas: area_numbers.append(a.number) if 9 in area_numbers: Umin = parametros.U_min_i Umax = parametros.U_max_i else: Umin = parametros.U_min_p Umax = parametros.U_max_p except Exception as e: raise StandardError('Error al cargar el caso de referencia: {}'.format(e.message)) try: # Cambio a tipo 2 los buses tipo 1 e incluyo generador con Pgen=0.01 MW # se recupera lista con buses tipo 1 list_bus = redpsse.get_bus_number_used_by_tension_tipo(Umin=Umin, Umax=Umax, tipo=1) for bus_num in list_bus: # se modifica el tipo del bus ierr = psspy.bus_chng_3(bus_num, [2, _i, _i, _i], [_f, _f, _f, _f, _f, _f, _f], _s) # se crea una planta en el bus para poder añadir después el generador ierr = psspy.plant_data(bus_num, _i, [_f, _f]) # se crea el generador con Pgen=0.01 MW intgar = [_i, _i, _i, _i, _i] Pgen = 0.01 # MW Qmin = 0 # MVar Qmax = 0 # MVar realar = [Pgen, _f, Qmin, Qmax, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f, _f] idn = str(11) ierr = psspy.machine_data_2(bus_num, idn, intgar, realar) except Exception as e: raise StandardError('Error al modificar los nudos en el caso de referencia: {}'.format(e.message)) try: # Modificacion del rateA y rateB segun ficheros de entrada #se recupera una lista con ramas list_branches = redpsse.get_branch_list() for branch in list_branches: ibus = branch.from_bus jbus = branch.to_bus ckt= branch.idn #se calculan los nuevos rates A y B de la rama segun parametros de entrada rateA=parametros.Rate_A/100 * branch.rate_a rateB=parametros.Rate_B/100 * branch.rate_a intgar=[_i,_i,_i,_i,_i,_i] realar=[_f,_f,_f,rateA,rateB,_f,_f,_f,_f,_f,_f,_f,_f,_f,_f] #se modifica la rama con los nuevos rates A y B ierr = psspy.branch_data(ibus, jbus, ckt, intgar, realar) except Exception as e: raise StandardError('Error al modificar los rates A y B de las ramas en el caso de referencia: {}'.format(e.message)) #se guarda temporalmente el caso procesado ierr = psspy.save(os.path.join(Rutas().ruta_casos_procesados, str(x.N_Caso) + '_procesado.sav'))
key=lambda item: item[1], reverse=True) newswingbus = -1 for igen in range(0, len(gen_tmp_sorted)): if str(gen_tmp_sorted[igen][0]) not in cont_genbus_array: newswingbus = gen_tmp_sorted[igen][0] break if newswingbus != -1: print('!!!!!!!!!!!--------new swing bus find, is bus: ' + str(newswingbus) + ' ----------------!!!!!') # change swing bus: psspy.bus_chng_3(newswingbus, [3, _i, _i, _i], [_f, _f, _f, _f, _f, _f, _f], _s) # change swing to type 3 for ibus in range(0, len(swingbus_tmp)): psspy.bus_chng_3(swingbus_tmp[ibus], [2, _i, _i, _i], [_f, _f, _f, _f, _f, _f, _f], _s) # change swing to type 2 psspy.fnsl([0, 0, 0, 1, 1, 0, 0, 0]) #psspy.save(address + '\\' + caseX + '_swigchng.sav') print( '------------------finish checking swing bus in con file -------------------' ) # scan the inl file to make sure the Pmax and Pmin element for each record is not 0.0, or equal # creat new inl file if there is any Pmax = Pmin