TestBench.tools
GitHub

4-20mA Scaling Calculator

Current loop ↔ process value with open-loop and range warnings.

In range

Process value (°C)
100
Percent of span
50.00 %

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

range: 0…200 °C
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

ParameterValueNotes
Live zero4 mArange low
Full scale20 mArange high
Open loop< 3.8 mAwiring / transmitter fault
Under-range3.8 – 4 mAtransmitter saturated low
Over-range> 20.5 mAtransmitter saturated high

C implementation

C
/* 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.

Related tools