4-20mA Scaling Calculator
Current loop ↔ process value with open-loop and range warnings.
In range
This tool converts a 4-20 mA loop current into the process value it represents (and back), for any configured range. It also judges loop health: readings below 3.8 mA are flagged as an open loop — a broken wire, not a measurement — while 3.8–4 mA reads as under-range and anything above 20.5 mA as over-range.
How it works
A 4-20 mA transmitter maps its calibrated range linearly onto the 16 mA span: 4 mA is the range low (“live zero”), 20 mA the range high. The process value is low + (mA − 4) × (high − low) / 16. Because a healthy loop never sits below roughly 3.8 mA, currents under that threshold are diagnosed as an open loop rather than converted blindly — the single most useful sanity check when commissioning instrumentation.
Worked example
12 mA → 100.0 °C (50 % of span)
4 mA → 0 °C · 20 mA → 200 °C
3.7 mA → OPEN LOOP (below 3.8 mA)
Parameters
| Parameter | Value | Notes |
|---|---|---|
| Live zero | 4 mA | range low |
| Full scale | 20 mA | range high |
| Open loop | < 3.8 mA | wiring / transmitter fault |
| Under-range | 3.8 – 4 mA | transmitter saturated low |
| Over-range | > 20.5 mA | transmitter saturated high |
C implementation
/* 4-20 mA -> engineering units with loop judgement */
typedef enum { OPEN_LOOP, UNDER_RANGE, OK, OVER_RANGE } loop_status_t;
float scale_4_20(float ma, float lo, float hi, loop_status_t *st)
{
*st = (ma < 3.8f) ? OPEN_LOOP
: (ma < 4.0f) ? UNDER_RANGE
: (ma > 20.5f) ? OVER_RANGE : OK;
return lo + (ma - 4.0f) * (hi - lo) / 16.0f;
}
/* 12 mA @ 0..200 -> 100.0, status OK; 3.7 mA -> OPEN_LOOP */FAQ
▸Why does 3.7 mA show OPEN LOOP instead of a negative value?
A healthy 4-20 mA transmitter never drives below about 3.8 mA — a reading under that almost always means a broken wire, a dead transmitter or an unpowered loop. The calculator still shows the linear extrapolation math, but the judgement banner flags the fault first, because that is the real diagnosis.
▸What are the exact judgement thresholds?
Below 3.8 mA: open loop. From 3.8 up to 4 mA: under-range (live zero undershoot). Above 20.5 mA: over-range. Between 4 and 20 mA (and up to 20.5): in range. These bands reflect common transmitter saturation behavior.
▸Why does 4-20 mA use 4 mA as zero instead of 0 mA?
The 4 mA 'live zero' separates a legitimate zero measurement from a dead circuit: 0 mA can only mean a fault. It also leaves current available to power two-wire transmitters over the same pair.
▸How is the process value computed?
Linear interpolation: value = low + (mA − 4) × (high − low) / 16. With a 0–200 °C range, 12 mA lands exactly at 100 °C — the midpoint of the span.
▸Is my data uploaded?
No. Everything is computed locally in your browser.