Exemplo n.º 1
0
   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
Exemplo n.º 3
0
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