Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

09 mikoski pv-mismatch_pvpmc-8_20170509_r5


Published on

8th PVPMC Workshop, May 9-10 2017

Published in: Technology
  • Be the first to comment

09 mikoski pv-mismatch_pvpmc-8_20170509_r5

  1. 1. Copyright | © 2017 SunPower Corporation PVMismatch Free Open Source Software 8th PV PMC Workshop, Albuquerque, NM Bennet E. Meyers and Mark A. Mikofski | May 9th, 2017
  2. 2. 2Copyright | © 2017 SunPower Corporation | Agenda • Description • Simple usage • Benefits • Advanced usage • Links to source, documentation and installation • Future work • Questions
  3. 3. 3Copyright | © 2017 SunPower Corporation | Description • PVMismatch is … – A free open source software Python package – for modeling both forward and reverse bias current – voltage (I-V) curves – at system, string, module and cell level – using a 2-diode analog. • Future versions will use a backend plugin to allow other cell models like CEC, PVSyst, etc. to be used instead of the default 2-diode model. – Cell, module, string and system constraints are all independent and variable
  4. 4. 4Copyright | © 2017 SunPower Corporation | Simple Usage: Rooftop shading Create PV system Set irradiance for entire 2nd string Set irradiance on individual modules in shaded regions of 3rd , 4th, 8th 9th and 10th modules
  5. 5. 5Confidential | © 2014 SunPower Corporation | Case Study: Current margin for string with a degraded cell • Determine the current margin for a string of modules with a single degraded cell as a function of the length of the string and the amount of degradation causing the cell to reverse bias. • Given a string of perfectly matched modules, and a single cell degraded by Y proportional to Isc, find the point at which Imp = YIsc, and any increase in Y will cause the degraded cell to go into reverse bias. This is the point at which there are 2 max powers. Repeat for 72, 96 and 128 cell modules in strings with N modules, and plot Y* = 1-Y vs. N. def findY(Y, num_mods, num_cells, return_pvsys=False): pvsys = pvsystem.PVsystem( numberStrs=1, numberMods=num_mods, numberCells=num_cells, pvconst=PVCONST) pvsys.setSuns({0: {0: {'cells': 0, 'Ee': Y}}}) retv = (Y * pvsys.Isc - pvsys.Imp) ** 2 if return_pvsys: retv = (retv, pvsys) return retv
  6. 6. 6Copyright | © 2017 SunPower Corporation | PVMismatch harnesses benefits of Python-based research • Easily organize complex simulations through use of classes – Intuitive access to system, module, and cell-level models – Subclassing to create technology-specific simulations (e.g. SPWRPVsystem) • Effortless expansion of functionality through use with extensive Python scientific computing modules – Pandas: organization and statistical analysis of large datasets – Matplotlib/Seaborn: data visualization and exploration – Shapely: geometric approach to shade pattern design • Simple integration with Python’s multiprocessing module for painless parallelization • Perhaps most importantly, it is incredibly easy to model non-uniform irradiance and shade effects at the cell level – Most previous work/research in this area has only modeled the system down to the module level, assuming uniform behavior within each module, ignoring cell-level mismatch and the impact of bypass diodes and other module-level circuit designs – See Bennet’s talk at PVSC 44 this June!
  7. 7. 7Copyright | © 2017 SunPower Corporation | Advanced Usage Example: Shade design with Shapely • We can use Shapely, an open source Python package for manipulation and analysis of 2-D geometric objects, to model shade as polygons intersecting with PV system objects. – Bold rectangles are PV modules. Groups of the same color are series-connected strings. Small squares are PV cells. – A Shapely polygon representing the shade from a pipe is overlaid. • Shapely finds the intersections between the shade polygon and the individual cells in the system, from which calculate the irradiance on each cell and use PVMismatch to get the system IV and PV curves.
  8. 8. 8Copyright | © 2017 SunPower Corporation | Advanced Case Study: P-Series Shade Performance Model • 219,200 unique shade scenarios, defined programatically • Automatic batching and autosaving of results • ~30 hours of processing time across 24 processors on an OpenStack Linux cluster • Results: – Deep exploration of domain space of system shade response, modeled as a cell level. – Small step-sizes allow for good characterization of highly- nonlinear response regions – Dataset is dense enough to allow for non-linear statistical learning • For more information on background/methodology, see “A Fast Parameterized Model for Predicting PV System Performance under Partial Shade Conditions,” 2016 IEEE 43nd Photovolt. Spec. Conf. PVSC 2016, no. 1, pp. 3173–3178, 2016 Statistical learning from PVMismatch simulation data. Plot of power loss modeled by PVMismatch versus power loss from a non-linear model based on three variables.
  9. 9. 9Copyright | © 2017 SunPower Corporation | Links, Source Code, Installation • Documentation: • Source Code: – This is a public Git repository hosted by GitHub. Please feel free to fork it and collaborate! • Build status: – Every tagged build is tested by Travis CI and deployed automatically to PyPI and GitHub releases • Issues: • Wiki: – Roadmap discussion and user curated content such as tips and tricks. • Installation: – You can use pip or conda with SunPower channel. • Bugs reports and contributions are welcome!
  10. 10. 10Copyright | © 2017 SunPower Corporation | Future Work • #39 Make cell model a backend “plugin” with documented API so that any continuous IV curve model such as CEC or PVSyst can be used. This makes PVLIB integration possible. – – EG: in add new attribute like PVcontstants.pvcell_backend = default # any backend plugin • #48 Make a generic “update” method to set any cell, module, string or system attribute, not just temperature and irradiance. This makes calculations faster, and is better “DRY” code. – – delay calculation of cell IV curve so multiple cell attributes can be updated simultaneously – EG: if pvcsys = pvsystem.PVsystem() then to change cells in module #1, string #1 … >>> pvsys.update({0: {0: {'cells': (11, 12, 13), 'Ee': (0.7, 0.5, 0.5), 'Tc': (45, 41, 40.3) , 'Rsh': (9.9, 7, 7.6)}}}) would replace … >>> pvsys.setSuns(({0: {0: {'cells': (11, 12, 13), 'Ee': (0.7, 0.5, 0.5)}}}) >>> pvsys.setTcell(({0: {0: {'cells': (11, 12, 13), 'Tc': (45, 41, 40.3)}}}) and also change shunt resistance – other update structures too can be used for flexibility
  11. 11. Thank You Let’s change the way our world is powered. Copyright | © 2017 SunPower Corporation
  12. 12. 12Copyright | © 2017 SunPower Corporation | Description: 2-diode cell analog • Photogenerated current is directly proportional to effective irradiance, E and short circuit current, Isc. • Short circuit current is linearly proportional to cell temperature. • The saturation current of the 1st diode, Isat1, has a cubic dependence on temperature. • Bypass diodes are modeled as perfect conductors if substring voltage is less than a “trigger” voltage. • Reverse bias uses a quadratic avalanche breakdown to control the “softness” of the breakdown. • The full I-V curve is solved explicitly using the method described by J.W. Bishop in Solar Cells 25 (1988) pp. 73-89 • Memory optimization allows fast calculation of large systems where the majority of cells are identical.
  13. 13. 13Copyright | © 2017 SunPower Corporation | Deep Dive: Bishop’s Solar 25 1988 explicit method 1. Select a range of Vdiode values, .e.g. -5.5[V] to 0.8[V] with log spacing around breakdown bend and max power point bends 2. Evaluate corresponding cell currents at given diode voltages 3. Evaluate corresponding cell voltages at given cell currents, Vcell = Vdiode - IcellRs . 4. Evaluate cell power from currents and voltages, P = IcellVcell, and find maximum, requires sufficient resolution. Interpolate to find Isc and Voc. 5. Rescale currents for series objects and add voltages, rescale voltages for parallel objects and add currents, to get system attributes. • Explicit calculations are faster than iterating non-linear because “vectorized” operations are optimized automatically • Bishop’s method returns more information about the full IV curve than non-linear interpolation or W-Lambert
  14. 14. 14Copyright | © 2017 SunPower Corporation | PVMismatch memory management PVsystem PVstring_1 PVmod_1_1 PVcell 1_1_1 PVmod_1_1 PVmod_1_M PVcell 1_1_2 PVcell 1_1_N … … PVstring_L PVmod_L_1 PVcell L_M_1 PVmod_L_2 PVmod_L_M PVcell L_M_2 PVcell L_M_N … … PVstring_2 … <pvmismatch.PVsystem object at 0x11115f610> <pvmismatch.PVstring object at 0x11115fb90> <pvmismatch.PVmodule object at 0x11115ffd0> <pvmismatch.PVcell object at 0x11115ff90> • At instantiation of a new system model, PVMismatch creates three unique objects in memory. • All components of a type point to the same object, e.g. there are 𝐿 × 𝑀 × 𝑁 PV cells in the system, but only a single pvmismatch.PVcell object in memory • Copying of objects is done “on demand” • For instance, say I want to set a new irradiance to cells 1_1_1 and 1_1_2. A new pvmismatch.PVcell object will be created that shares all the same parameters of the existing Pvcell …
  15. 15. 15Copyright | © 2017 SunPower Corporation | PVMismatch memory management PVsystem PVstring_1 PVmod_1_1 PVcell 1_1_1 PVmod_1_1 PVmod_1_M PVcell 1_1_2 PVcell 1_1_N … … PVstring_L PVmod_L_1 PVcell L_M_1 PVmod_L_2 PVmod_L_M PVcell L_M_2 PVcell L_M_N … … PVstring_2 … <pvmismatch.PVsystem object at 0x11115f610> <pvmismatch.PVstring object at 0x11115fb90> <pvmismatch.PVmodule object at 0x11115ffd0> <pvmismatch.PVcell object at 0x11115ff90> • Set a the irradiance on cells 1_1_1 and 1_1_2 to 0.1 suns. • A new PVcell object is created to store the new state variable • In addition a new PVmodule object and a new PVstring object are created because these objects now have IV curves that differ from the rest of the elements in the system • The memory complexity for a single “large” system (20 strings, 20 modules per string, 500 cells per module) would be >10GB if every element was a unique object in memory • This method keeps the expected memory complexity for most simulations well under 1MB <pvmismatch.PVstring object at 0x111136910> <pvmismatch.PVmodule object at 0x111136690> <pvmismatch.PVcell object at 0x111136090>