0

我正在尝试制作 IV 曲线,pvlib但出现错误:

TypeError:必须是 str,而不是 int。

在 Spyder 上运行。你能建议吗?这个例子取自网络。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
rom pvlib.pvsystem import singlediode, v_from_i, i_from_v, retrieve_sam

def fivepoints_to_frame(pnt):
    """
    Converts a 1 dimensional, dict-like singlediode or sapm result
    to a 5 row DataFrame with columns current and voltage.
    Users can iterate over the rows of a multidimensional
    singlediode or sapm result, if necessary.
    """
    ivframe = {'i_sc': (pnt['i_sc'], 0),
               'p_mp': (pnt['i_mp'], pnt['v_mp']),
               'i_x': (pnt['i_x'], 0.5*pnt['v_oc']),
               'i_xx': (pnt['i_xx'], 0.5*(pnt['v_oc']+pnt['v_mp'])),
               'v_oc': (0, pnt['v_oc'])}
    ivframe = pd.DataFrame(ivframe, index=['current', 'voltage']).T
    ivframe = ivframe.sort_values(by='voltage')

    return ivframe

resistance_shunt = 16
resistance_series = 0.094
nNsVth = 0.473
saturation_current = 1.943e-09
photocurrent = 7
module_parameters = retrieve_sam('cecmod')['Example_Module']

v_oc = v_from_i(resistance_shunt, resistance_series, nNsVth, 0, 
saturation_current, photocurrent)
voltage = np.linspace(0, v_oc, 100)

current = i_from_v(resistance_shunt, resistance_series, nNsVth, 
voltage,saturation_current, photocurrent)

fivepnts = singlediode(
    module_parameters, photocurrent, saturation_current, resistance_series, 
resistance_shunt, nNsVth)
ivframe = fivepoints_to_frame(fivepnts)

fig, ax = plt.subplots()
ax.plot(voltage, current)
ax.scatter(ivframe['voltage'], ivframe['current'], c='k', s=36, zorder=10)
ax.set_xlim(0, None)
ax.set_ylim(0, None)
ax.set_ylabel('current (A)')
ax.set_xlabel('voltage (V)')
4

1 回答 1

1

来自(文档

pvlib.pvsystem.singlediode(photocurrent, saturation_current, resistance_series, 
                           resistance_shunt, nNsVth, ivcurve_pnts=None)

一个参数singlediode()正确。如果我像这样删除它:

fivepnts = singlediode(
    photocurrent, saturation_current, resistance_series,
    resistance_shunt, nNsVth)

我得到:

在此处输入图像描述

于 2017-06-04T16:36:52.197 回答