예제 #1
0
    def set_simulation(self):
        # Carregando arquivos
        load_det = pd.read_csv(os.path.dirname(sys.argv[0]) +
                               "/curve_load.csv",
                               header=0,
                               sep=';')

        # Previsão do mercado spot
        pld = pd.read_excel(os.path.dirname(sys.argv[0]) +
                            '/pld_sombra_2020.xlsx',
                            sheet_name='train',
                            index_col='date',
                            parse_dates=['date'])
        pld_day_ahead = Pldpredict(pld)
        ##pld_pred = pld_day_ahead.get_day_ahead()
        pld_pred = pld_day_ahead.get_pld_dummy()

        # Gerando amostras
        sample = Sample(load_det, self.mode, PV_LOAD_CONNECTION,
                        EV_LOAD_CONNECTION, EV_BUS_MAX_NUMBER_LIST, pld_pred)

        # Gerando vetores para o PDF
        power_p = np.zeros(self.number)
        power_q = np.zeros(self.number)
        losses_p = np.zeros(self.number)
        losses_q = np.zeros(self.number)

        # Criando matrizes de tensão
        vmag1_matrix = np.zeros((24, self.number))
        vmag2_matrix = np.zeros((24, self.number))
        vmag3_matrix = np.zeros((24, self.number))
        vphase1_matrix = np.zeros((24, self.number))
        vphase2_matrix = np.zeros((24, self.number))
        vphase3_matrix = np.zeros((24, self.number))

        # Criando matriz para os medidores
        dss.text(
            "compile {}".format(os.path.dirname(sys.argv[0]) + "/ieee34.dss"))
        monitors_total_vmag1 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_vmag2 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_vmag3 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))

        # Criando matrizes de potência
        monitors_total_p1 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_q1 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_p2 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_q2 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_p3 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))
        monitors_total_q3 = np.zeros(
            (len(dss.lines_allnames()), 24 * self.number))

        # Tempo de recarga dos veículos
        ev_parking_duration = []

        # PDF da média horária do tempo de carregamento
        ev_charging_time = []

        for n in range(self.number):
            # Compilando a rede
            dss.text("compile {}".format(
                os.path.dirname(sys.argv[0]) + "/ieee34.dss"))
            dss.text("New Energymeter.Feeder Line.L1 1")

            # Montando amostras de carga, pv e ev
            pv = sample.get_pv_sample(len(PV_BUS_LIST))
            ev_curve, ev_power, ev_incoming, ev_t_duration, ev_battery_capacity = \
                sample.get_ev_sample(len(EV_BUS_LIST), self.ev_mode)
            if self.rtp_mode == 0:
                load = sample.get_load_sample_nrtp(dss.loads_count(), pv,
                                                   ev_curve)
            else:
                load = sample.get_load_sample_rtp(dss.loads_count(), pv,
                                                  ev_curve)

            # Colocando curva de PEV
            get_daily_load(load)
            get_daily_pv(pv)
            get_daily_ev(self.ev_mode, ev_curve, ev_power, ev_battery_capacity)

            # Criando monitores para todas as barras
            get_all_monitors()

            # Solução
            ##dss.text("new monitor.storage_power element=storage.battery_890 terminal=1 mode=1 ppolar=no")
            ##dss.text("new monitor.storage_voltage element=storage.battery_890 terminal=1 mode=0")
            ##dss.text("new monitor.storage_variable element=storage.battery_890 terminal=1 mode=3")
            dss.text("Set Mode=daily")
            dss.text("Set stepsize=1h")
            dss.text("Set number=24")
            dss.solution_solve()
            ##dss.text("plot monitor object=storage_power channels=(1 3 5)")
            ##dss.text("plot monitor object=storage_voltage channels=(1 3 5)")
            ##dss.text("plot monitor object=storage_variable channels=(1)")

            # Recebendo Medidor
            power_p[n], power_q[n] = dss.meters_registervalues(
            )[0], dss.meters_registervalues()[1]
            losses_p[n], losses_q[n] = dss.meters_registervalues(
            )[12], dss.meters_registervalues()[13]

            # Recebendo Monitores Linha 19 (Barra 840)
            dss.monitors_saveall()
            for hour in range(24):
                dss.monitors_write_name("Ml19_voltage")
                vmag1_matrix[hour, n] = dss.monitors_channel(1)[hour]
                dss.monitors_write_name("Ml19_voltage")
                vphase1_matrix[hour, n] = dss.monitors_channel(2)[hour]
                dss.monitors_write_name("Ml19_voltage")
                vmag2_matrix[hour, n] = dss.monitors_channel(3)[hour]
                dss.monitors_write_name("Ml19_voltage")
                vphase2_matrix[hour, n] = dss.monitors_channel(4)[hour]
                dss.monitors_write_name("Ml19_voltage")
                vmag3_matrix[hour, n] = dss.monitors_channel(5)[hour]
                dss.monitors_write_name("Ml19_voltage")
                vphase3_matrix[hour, n] = dss.monitors_channel(6)[hour]

            # Análise global da rede para tensão
            monitors_name = dss.monitors_allnames()
            i = 0
            num = 0
            for item in monitors_name:
                if (i % 2) != 0:
                    for hour in range(24):
                        dss.monitors_write_name(item)
                        monitors_total_vmag1[
                            num, n * 24 + hour] = dss.monitors_channel(1)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_vmag2[
                            num, n * 24 + hour] = dss.monitors_channel(3)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_vmag3[
                            num, n * 24 + hour] = dss.monitors_channel(5)[hour]
                    num += 1
                i += 1

            # Análise global da rede para potências de saída
            monitors_name = dss.monitors_allnames()
            i = 0
            num = 0
            for item in monitors_name:
                if (i % 2) == 0:
                    for hour in range(24):
                        dss.monitors_write_name(item)
                        monitors_total_p1[num, n * 24 +
                                          hour] = dss.monitors_channel(1)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_q1[num, n * 24 +
                                          hour] = dss.monitors_channel(2)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_p2[num, n * 24 +
                                          hour] = dss.monitors_channel(3)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_q2[num, n * 24 +
                                          hour] = dss.monitors_channel(4)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_p3[num, n * 24 +
                                          hour] = dss.monitors_channel(5)[hour]
                        dss.monitors_write_name(item)
                        monitors_total_q3[num, n * 24 +
                                          hour] = dss.monitors_channel(6)[hour]
                    num += 1
                i += 1
            # Análise do tempo de recarga
            ev_parking_duration.extend(ev_t_duration)

            # Análise do carregamento ao longo do dia
            for ev_bus in range(len(EV_BUS_LIST)):
                ev_charging_time.extend(ev_curve[ev_bus])

            # Aviso ao usuário
            print("Simulação ", str(n), " concluída!")

        # Construindo pdf das magnitudes totais
        pdf = Pdf(power_p, power_q, losses_p, losses_q)
        pdf.get_pdf_plot()
        pdf.get_pdf_csv()

        # Construindo boxplot das tensões
        monitors_name = dss.monitors_allnames()
        pdftotalvoltage = Pdftotalvoltage(self.number, monitors_name,
                                          monitors_total_vmag1,
                                          monitors_total_vmag2,
                                          monitors_total_vmag3)
        pdftotalvoltage.get_voltage_all_bus_plot()
        pdftotalvoltage.get_voltage_all_bus_csv()

        # Construindo curva média de tensão
        pdfvoltagebus = Pdfvoltagebus(vmag1_matrix, vphase1_matrix,
                                      vmag2_matrix, vphase2_matrix,
                                      vmag3_matrix, vphase3_matrix)
        pdfvoltagebus.get_mean_pdf_voltage_csv()
        pdfvoltagebus.get_pdf_voltage_plot()

        # Recebendo PDF das potências de todas as barras
        pdfoutputpower = Pdfoutputpower(self.number, monitors_name,
                                        monitors_total_p1, monitors_total_q1,
                                        monitors_total_p2, monitors_total_q2,
                                        monitors_total_p3, monitors_total_q3)
        pdfoutputpower.get_outputpower_ev_bus()
        pdfoutputpower.get_mean_outputpower_ev_bus()

        # Construindo curva de tempo de duração de recarga
        pdfoutputev = Pdfoutputev(self.number, ev_parking_duration,
                                  ev_charging_time)
        pdfoutputev.get_parking_duration()
        pdfoutputev.get_charging_time()