TestBench.tools

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