DC I-V curve¶
For PV device types the simulator computes the array's I-V characteristic at the current irradiance + cell temperature on every tick. The curve is what real PV-inverter MPPT controllers walk to find the maximum power point; DERSim exposes it directly so test harnesses can verify MPPT behavior, impedance-matching scenarios, and shading conditions without a real PV array.
When this matters¶
The I-V curve only matters for testing things the simple "PV produces 4 kW right now" abstraction doesn't capture:
- MPPT verification — does the inverter's MPPT walk find the maximum-power point? At what voltage?
- Partial shading — does the inverter's MPPT survive a curve with multiple local maxima?
- Cold-cell behavior — open-circuit voltage rises as cell temperature drops; does the inverter's input-protection threshold trip correctly at low ambient?
- Soft-string — graceful degradation as one string of the array loses output (e.g. fault, single-cell short).
For tests that only need a P/Q on the AC side, the I-V curve is
irrelevant — those work fine with /api/dersim/overview.
REST surface¶
The endpoint returns the current curve sample-by-sample plus the live operating point on it:
GET /api/dersim/dc-iv
Response shape:
{
"irradiance_w_m2": 1000.0,
"cell_temperature_c": 25.0,
"operating_point": {
"v": 412.5,
"i": 9.7,
"p": 4001.2
},
"curve": [
{"v": 0, "i": 10.5, "p": 0},
{"v": 50, "i": 10.5, "p": 525},
/* ... */
{"v": 412.5, "i": 9.7, "p": 4001}, /* MPP */
/* ... */
{"v": 470, "i": 0, "p": 0} /* open circuit */
]
}
The curve array is sampled densely enough that linear
interpolation between adjacent points is accurate; the MPP is
guaranteed to be one of the samples (the simulator samples the
curve adaptively around the knee).
Headers:
irradiance_w_m2— current effective irradiance (after shear / cloud / curtailment factors).cell_temperature_c— current cell temperature; rises above ambient with sustained MPPT operation.operating_point— where the inverter is actually drawing power right now (a real MPPT-tracked operating point, not just the MPP).
Reading the curve¶
A healthy MPP-tracked PV inverter operates close to the MPP
(operating_point.p ≈ max(curve.p)). The voltage delta between the
operating point and the MPP indicates MPPT tracking error; the
power delta indicates the cost of that error.
For partial-shading tests the curve develops a second local maximum
— the inverter may converge to the lower one and report a stable
operating point well below the true MPP. The curve makes this
diagnosable; the operating_point.p alone wouldn't.
When the endpoint isn't available¶
/dc-iv returns HTTP 503 with a clear message when the simulator
is not in PV mode. Battery, wind, fuel cell, and hybrid-DC
device types don't have a meaningful I-V curve at the DC source —
their DC-side electrical model is different.
(Hybrid DC's PV component does produce a curve, but the coordinator clamps the operating point to whatever its dispatch policy demands rather than walking the MPPT — the curve still shows the available power but the operating point may not be at the MPP.)
Dashboard integration¶
The dashboard's Analytics view renders the curve as the third tile for PV scenarios. The chart updates each simulator tick; for fast-moving scenarios (cloud passage, panel shading test) you'll see the curve scale up and down in real-time.