Example #1
0
    def test_extract_series_resistance_parallel_resistance_and_diode_quality_factor_with_less_number_of_cells(
            self):

        short_circuit_current = 5.75  # [A]
        open_circuit_voltage = 22.5  # [V]
        maximum_power_point_current = 5.29  # [A]
        maximum_power_point_voltage = 18.9  # [V]
        # maximum_power_point_power = 100 # [W] Not used for the calculation. TODO: Remove this parameter.
        # short_circuit_current_temperature_coefficient = None # Not used for the calculation. TODO: Remove this parameter.
        # power_temperature_coefficient = None # Not used for the calculation. TODO: Remove this parameter.
        number_of_cells_in_series = 36

        number_of_iterations = 1000

        parameter_extraction = ParameterExtraction(
            short_circuit_current,
            open_circuit_voltage,
            maximum_power_point_current,
            maximum_power_point_voltage,
            number_of_cells_in_series=number_of_cells_in_series,
            number_of_iterations=number_of_iterations)

        series_resistance_estimate = 1.0
        shunt_resistance_estimate = 900
        diode_quality_factor_estimate = 1.5
        # series_resistance_estimate = 0.5
        # shunt_resistance_estimate = 1500
        # diode_quality_factor_estimate = 1.5
        # series_resistance_estimate = 1
        # shunt_resistance_estimate = 1
        # diode_quality_factor_estimate = 1
        parameter_estimates = [
            series_resistance_estimate, shunt_resistance_estimate,
            diode_quality_factor_estimate
        ]

        solution = parameter_extraction.calculate(parameter_estimates)

        # Note: Results:
        #   With number_of_iterations = 1000, series_resistance_estimate = 1.0, shunt_resistance_estimate = 900, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.115493194076, shunt_resistance = 655596.982698, diode_quality_factor_estimate = 1.27995759761
        #   With number_of_iterations = 1000, series_resistance_estimate = 0.5, shunt_resistance_estimate = 1500, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.115493194076, shunt_resistance = 655596.982698, diode_quality_factor_estimate = 1.27995759761
        #   With number_of_iterations = 1000, series_resistance_estimate = 1, shunt_resistance_estimate = 1, diode_quality_factor_estimate = 1:
        #        (1 is chosen because the two latter parameters are used in the denominator of divisions and 0 cannot be used.)
        #        RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations.
        #        series_resistance = -32.8604015489, shunt_resistance = 36.4430900554, diode_quality_factor_estimate = -177.346609341
        # self.assertAlmostEqual(parameter_extraction.series_resistance, 0.47, delta = 0.2) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.shunt_resistance, 1365, delta = 50) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.diode_quality_factor, 1.397, delta = 0.1)
        print("series_resistance=", parameter_extraction.series_resistance)
        print("shunt_resistance=", parameter_extraction.shunt_resistance)
        print("diode_quality_factor=",
              parameter_extraction.diode_quality_factor)
def execute_parameter_extraction(args):
    from photovoltaic_modeling.parameter_extraction import ParameterExtraction
    parameter_extraction = ParameterExtraction(args.short_circuit_current, args.open_circuit_voltage, 
                                               args.maximum_power_point_current, args.maximum_power_point_voltage, 
                                               number_of_cells_in_series = args.number_of_cells_in_series)

    parameter_estimates = [args.series_resistance_estimate, args.shunt_resistance_estimate, args.diode_quality_factor_estimate]
    parameter_extraction.calculate(parameter_estimates)

    print('series_resistance=', parameter_extraction.series_resistance)
    print('shunt_resistance=', parameter_extraction.shunt_resistance)
    print('diode_quality_factor=', parameter_extraction.diode_quality_factor)
Example #3
0
    def test_extract_series_resistance_parallel_resistance_and_diode_quality_factor(
            self):

        short_circuit_current = 3.87  # [A]
        open_circuit_voltage = 42.1  # [V]
        maximum_power_point_current = 3.56  # [A]
        maximum_power_point_voltage = 33.7  # [V]
        # maximum_power_point_power = 120 # [W]
        # short_circuit_current_temperature_coefficient = -0.160
        # power_temperature_coefficient = -0.5
        number_of_cells_in_series = 72

        parameter_extraction = ParameterExtraction(
            short_circuit_current,
            open_circuit_voltage,
            maximum_power_point_current,
            maximum_power_point_voltage,
            number_of_cells_in_series=number_of_cells_in_series)

        # series_resistance_estimate = 0.5
        # shunt_resistance_estimate = 1500
        # diode_quality_factor_estimate = 1.5
        series_resistance_estimate = 1
        shunt_resistance_estimate = 1
        diode_quality_factor_estimate = 1
        parameter_estimates = [
            series_resistance_estimate, shunt_resistance_estimate,
            diode_quality_factor_estimate
        ]

        solution = parameter_extraction.calculate(parameter_estimates)

        # Note: Results:
        #   With series_resistance_estimate = 0.5, shunt_resistance_estimate = 1500, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.56, shunt_resistance = 1862, diode_quality_factor_estimate = 1.343
        #   With series_resistance_estimate = 1, shunt_resistance_estimate = 1, diode_quality_factor_estimate = 1:
        #        (1 is chosen because the two latter parameters are used in the denominator of divisions and 0 cannot be used.)
        #        series_resistance = 0.58, shunt_resistance = 1398, diode_quality_factor_estimate = 1.318
        # self.assertEqual(parameter_extraction.series_resistance, 0.47) # [Ohm]
        # self.assertEqual(parameter_extraction.shunt_resistance, 1365) # [Ohm]
        # self.assertEqual(parameter_extraction.diode_quality_factor, 1.397)
        self.assertAlmostEqual(parameter_extraction.series_resistance,
                               0.47,
                               delta=0.2)  # [Ohm]
        self.assertAlmostEqual(parameter_extraction.shunt_resistance,
                               1365,
                               delta=50)  # [Ohm]
        self.assertAlmostEqual(parameter_extraction.diode_quality_factor,
                               1.397,
                               delta=0.1)
    def test_extract_series_resistance_parallel_resistance_and_diode_quality_factor_with_less_number_of_cells(self):

        short_circuit_current = 5.75 # [A]
        open_circuit_voltage = 22.5 # [V]
        maximum_power_point_current = 5.29 # [A]
        maximum_power_point_voltage = 18.9 # [V]
        # maximum_power_point_power = 100 # [W] Not used for the calculation. TODO: Remove this parameter. 
        # short_circuit_current_temperature_coefficient = None # Not used for the calculation. TODO: Remove this parameter.
        # power_temperature_coefficient = None # Not used for the calculation. TODO: Remove this parameter. 
        number_of_cells_in_series = 36

        number_of_iterations = 1000

        parameter_extraction = ParameterExtraction(short_circuit_current, open_circuit_voltage, 
                                                   maximum_power_point_current, maximum_power_point_voltage, 
                                                   number_of_cells_in_series = number_of_cells_in_series, 
                                                   number_of_iterations = number_of_iterations)

        series_resistance_estimate = 1.0
        shunt_resistance_estimate = 900
        diode_quality_factor_estimate = 1.5
        # series_resistance_estimate = 0.5
        # shunt_resistance_estimate = 1500
        # diode_quality_factor_estimate = 1.5
        # series_resistance_estimate = 1
        # shunt_resistance_estimate = 1
        # diode_quality_factor_estimate = 1       
        parameter_estimates = [series_resistance_estimate, shunt_resistance_estimate, diode_quality_factor_estimate]

        solution = parameter_extraction.calculate(parameter_estimates)

        # Note: Results:
        #   With number_of_iterations = 1000, series_resistance_estimate = 1.0, shunt_resistance_estimate = 900, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.115493194076, shunt_resistance = 655596.982698, diode_quality_factor_estimate = 1.27995759761        
        #   With number_of_iterations = 1000, series_resistance_estimate = 0.5, shunt_resistance_estimate = 1500, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.115493194076, shunt_resistance = 655596.982698, diode_quality_factor_estimate = 1.27995759761
        #   With number_of_iterations = 1000, series_resistance_estimate = 1, shunt_resistance_estimate = 1, diode_quality_factor_estimate = 1:
        #        (1 is chosen because the two latter parameters are used in the denominator of divisions and 0 cannot be used.)
        #        RuntimeWarning: The iteration is not making good progress, as measured by the improvement from the last ten iterations.
        #        series_resistance = -32.8604015489, shunt_resistance = 36.4430900554, diode_quality_factor_estimate = -177.346609341
        # self.assertAlmostEqual(parameter_extraction.series_resistance, 0.47, delta = 0.2) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.shunt_resistance, 1365, delta = 50) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.diode_quality_factor, 1.397, delta = 0.1)  
        print("series_resistance=", parameter_extraction.series_resistance)
        print("shunt_resistance=", parameter_extraction.shunt_resistance)
        print("diode_quality_factor=", parameter_extraction.diode_quality_factor)      
def execute_parameter_extraction(args):
    from photovoltaic_modeling.parameter_extraction import ParameterExtraction
    parameter_extraction = ParameterExtraction(
        args.short_circuit_current,
        args.open_circuit_voltage,
        args.maximum_power_point_current,
        args.maximum_power_point_voltage,
        number_of_cells_in_series=args.number_of_cells_in_series)

    parameter_estimates = [
        args.series_resistance_estimate, args.shunt_resistance_estimate,
        args.diode_quality_factor_estimate
    ]
    parameter_extraction.calculate(parameter_estimates)

    print('series_resistance=', parameter_extraction.series_resistance)
    print('shunt_resistance=', parameter_extraction.shunt_resistance)
    print('diode_quality_factor=', parameter_extraction.diode_quality_factor)
    def test_extract_series_resistance_parallel_resistance_and_diode_quality_factor_with_specified_number_of_iterations(self):

        short_circuit_current = 3.87 # [A]
        open_circuit_voltage = 42.1 # [V]
        maximum_power_point_current = 3.56 # [A]
        maximum_power_point_voltage = 33.7 # [V]
        # maximum_power_point_power = 120 # [W]
        # short_circuit_current_temperature_coefficient = -0.160
        # power_temperature_coefficient = -0.5
        number_of_cells_in_series = 72

        number_of_iterations = 1000

        parameter_extraction = ParameterExtraction(short_circuit_current, open_circuit_voltage, 
                                                   maximum_power_point_current, maximum_power_point_voltage, 
                                                   number_of_cells_in_series = number_of_cells_in_series, 
                                                   number_of_iterations = number_of_iterations)

        # series_resistance_estimate = 0.5
        # shunt_resistance_estimate = 1500
        # diode_quality_factor_estimate = 1.5
        series_resistance_estimate = 1
        shunt_resistance_estimate = 1
        diode_quality_factor_estimate = 1       
        parameter_estimates = [series_resistance_estimate, shunt_resistance_estimate, diode_quality_factor_estimate]

        solution = parameter_extraction.calculate(parameter_estimates)

        # Note: Results:
        #   With series_resistance_estimate = 0.5, shunt_resistance_estimate = 1500, diode_quality_factor_estimate = 1.5:
        #        series_resistance = 0.56, shunt_resistance = 1862, diode_quality_factor_estimate = 1.343
        #   With series_resistance_estimate = 1, shunt_resistance_estimate = 1, diode_quality_factor_estimate = 1:
        #        (1 is chosen because the two latter parameters are used in the denominator of divisions and 0 cannot be used.)
        #        series_resistance = 0.577100619127, shunt_resistance = 1471.6762257, diode_quality_factor_estimate = 1.32304017483
        # self.assertAlmostEqual(parameter_extraction.series_resistance, 0.47, delta = 0.2) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.shunt_resistance, 1365, delta = 50) # [Ohm]
        # self.assertAlmostEqual(parameter_extraction.diode_quality_factor, 1.397, delta = 0.1)  
        print("series_resistance=", parameter_extraction.series_resistance)
        print("shunt_resistance=", parameter_extraction.shunt_resistance)
        print("diode_quality_factor=", parameter_extraction.diode_quality_factor)   
from photovoltaic_modeling.parameter_extraction import ParameterExtraction

short_circuit_current = 3.87 
open_circuit_voltage = 42.1 
maximum_power_point_current = 3.56 
maximum_power_point_voltage = 33.7 
number_of_cells_in_series = 72

parameter_extraction = ParameterExtraction(short_circuit_current, open_circuit_voltage, 
                                           maximum_power_point_current, maximum_power_point_voltage, 
                                           number_of_cells_in_series = number_of_cells_in_series)

series_resistance_estimate = 1
shunt_resistance_estimate = 1000
diode_quality_factor_estimate = 1

parameter_estimates = [series_resistance_estimate, shunt_resistance_estimate, diode_quality_factor_estimate]
parameter_extraction.calculate(parameter_estimates)

print('series_resistance=', parameter_extraction.series_resistance)
print('shunt_resistance=', parameter_extraction.shunt_resistance)
print('diode_quality_factor=', parameter_extraction.diode_quality_factor)