Wiring a 4-20mA 2-Wire Level Sensor to a 0-10V PLC Input

Patricia Callen13 min read
Other ManufacturerOther TopicTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

A 2-wire level transmitter with a black lead and a red lead looks like it should land on any analog input. It does not, and the failure is quiet: the value sits at zero, or pins at full scale, or wanders with no relation to the water in the tank. The cause is upstream of the program. Look at the current before you look at the scaling block.

Which fixes fail, and why?

Four attempts show up repeatedly on this exact symptom.

Landing the two wires straight on the 0-10 V terminals. A voltage input is deliberately high impedance. A loop-powered transmitter is a current regulator that needs a return path with a defined resistance; with nothing but the input's own impedance in the loop, either no current flows and the reading sits at the bottom, or the input's protection network defines an uncontrolled operating point and the reading sits at the top. Nothing in the program changes this.

Selecting current mode in the module configuration. The MPS053 CPU analog input does not accept a current input. Setting Mode to current acquisition either fails outright or reconfigures nothing useful. The Mode must be set to voltage acquisition; the current-to-voltage conversion happens externally, in a resistor you install.

Fitting a 250 Ohm burden out of habit. 250 Ohm is the reflex value because it produces the classic 1-5 V signal, and that works electrically. But on a 0-10 V input it uses 40 % of the span and throws away half the available resolution. On a 4000 litre tank that is a coarser count per litre for no benefit other than supply headroom you already have at 24 V.

Adding a filter to stabilise a jumping value. LRamp or an averaging block will smooth a reading that jumps because the sensor 0 V and the module 0 V are not bonded, but it smooths the symptom, not the fault. The value still carries the offset and still moves when the second sensor or a contactor switches. Tuning does not fix wiring. Bond the grounds first, trend the raw value, then decide whether filtering is needed at all.

What actually happens inside a 2-wire loop?

The transmitter has no separate supply terminals. It draws its own operating power from the same current it modulates, which is why the minimum is 4 mA and not 0 mA: the electronics have to live on the bottom of the range. The two leads are simply the two ends of a series circuit. Current leaves the +24 V rail, passes through the transmitter, comes back through your burden resistor, and lands on the supply 0 V.

That series path is the whole design. Level pushes on the sensing diaphragm, the transmitter regulates loop current between 4 and 20 mA in proportion, the burden resistor turns that current into a voltage by Ohm's law, and the module's ADC reads that voltage. The controller never sees current. It sees the voltage you built for it, and every error in the resistor, the ground reference, or the supply headroom shows up as a level error in litres.

With the red lead to +24 V, the black lead to the analog input, and the burden resistor from that input to 0 V, the input terminal sits at exactly the burden voltage above the module's own reference. That only holds if the sensor supply 0 V and the module supply 0 V are the same node. Two separate supplies with floating commons give the ADC an undefined reference and a reading that drifts.

How do I size the burden resistor and check headroom?

For a 0-10 V input, pick the resistor that puts 20 mA at the top of the span:

R = V_fs / I_max = 10 V / 0.020 A = 500 Ohm

 4 mA x 500 Ohm =  2.00 V   (empty)
20 mA x 500 Ohm = 10.00 V   (full)
Span = 8.00 V over a 10 V input = 80 % of range

Use a precision resistor, not a general-purpose one. The burden is now part of the measurement chain: a 1 % error in resistance is a 1 % error in level, or 40 litres on a 4000 litre tank. Specify 0.1 % tolerance and a low temperature coefficient. 499 Ohm is a standard E96 value and gives 9.98 V at 20 mA, which is within the input span and easier to source than an exact 500 Ohm part. Power dissipation at full scale is I2R = 0.0202 x 500 = 0.2 W, so use a 0.5 W part and give it air.

Now check that the transmitter still has enough voltage across itself. The burden steals voltage from the loop:

V_transmitter = V_supply - I_max x (R_burden + R_cable)

At 20 mA through 500 Ohm the burden drops 10 V. From a 24 V supply that leaves 14 V across the transmitter, comfortably above the 6 V minimum typical of this class of device. Read the actual minimum from the transmitter datasheet, because it varies. Working backwards from 6 V, the lowest usable supply is 10 V + 6 V = 16 V. If the panel runs on a sagging 24 V rail, a long cable run, or an intrinsic-safety barrier in the loop, subtract those drops too and re-check. The tell-tale for starved headroom is a reading that tracks correctly at low level and then flattens out near the top, because the transmitter runs out of compliance exactly when it tries to sink 20 mA.

If headroom is genuinely tight, 250 Ohm is the fallback: 1-5 V into the input, 5 V of extra headroom, half the resolution. Take that trade only when the arithmetic forces it.

Where does each signal come from, and how does it fail?

Signal Source Symptom when wrong
4-20 mA loop current Transmitter, powered by the loop itself No return path: value pinned at 0 or at full scale, unmoved by level
2-10 V burden voltage 500 Ohm resistor, input terminal to 0 V Wrong resistor: reading scales by exactly R_actual/500 (250 Ohm halves it)
Input Mode Module configuration, set to voltage Current mode selected: input rejected, no usable value
0 V reference Sensor supply common bonded to module supply common Floating commons: slow drift, offset, value shifts when other loads switch
Transmitter terminal voltage V_supply minus burden and cable drops Below minimum: linear at low level, flattens near full scale
Level in litres ValueScale (regular tank) or Linearize (irregular) Linear scaling on a shaped tank: correct at 0 and 4000 L, wrong mid-range
Filtered value LRamp or FB Average Over-filtered: value lags real fills, high-level alarms trip late

How do I wire it to the MPS053 analog input?

  1. Power down the panel and confirm the 24 V supply is dead at the terminals.
  2. Land the transmitter's red lead on +24 Vdc. This is the loop supply, not a signal.
  3. Land the transmitter's black lead on the analog input terminal of the CPU module.
  4. Fit the 500 Ohm resistor from that same analog input terminal to 0 V. Keep the leads short and terminate them properly; a resistor dangling on long tails is an antenna and a mechanical failure waiting to happen.
  5. Bond the sensor supply 0 V and the module supply 0 V to a single common point. If both run from the same 24 V unit, this is already satisfied.
  6. In the module configuration, set the input Mode to voltage acquisition, 0-10 V. Do not select a current mode.
  7. For the second level sensor, repeat on the second analog input with its own 500 Ohm burden. The same 24 V supply feeds both; only the burden resistors and input channels are separate.

Before the resistor goes in permanently, break the loop and put a DMM in series on the mA range. A live transmitter at a known level reads a specific current, and that number is the reference for everything downstream. If it reads 0 mA, the fault is the loop or the supply, not the module.

How do I convert 2-10 V into litres?

The transfer function from current to volume on a 4000 litre tank is:

Volume_L = (I_mA - 4) / 16 x 4000     =  250 litres per mA
Volume_L = (V_in - 2.0) / 8.0 x 4000  =  500 litres per volt

That sensitivity is worth internalising: 250 litres per milliamp means a 0.04 mA zero offset is a 10 litre error, and a 1 % burden tolerance is 40 litres. Assuming a 12-bit converter across 0-10 V (confirm the module's stated resolution), the 8 V span covers roughly 3276 counts, about 1.2 litres per count. Converter resolution is not your limiting factor here; resistor accuracy and transmitter calibration are.

ValueScale is the right block only when the tank has a regular shape, meaning level and volume are proportional over the whole range. A vertical cylinder or a rectangular tank qualifies. A horizontal cylinder, a cone-bottomed tank, or any vessel with internal structure does not: the volume-per-centimetre changes with height, and a linear scale will read correctly at empty and at full while being badly wrong at mid-level. Replace ValueScale with the Linearize function and load a breakpoint table of level versus volume, taken from tank drawings or from a fill test with a calibrated meter. Put breakpoints where the curvature is, not evenly spaced.

Two physical points affect the numbers before any block runs. A submersible hydrostatic sensor measures pressure, so its output is proportional to head times fluid density; the litre figure is only valid for the fluid it was calibrated on. And a gauge-referenced sensor needs its vent tube kept clear and dry, or barometric change appears as level change.

LRamp or FB Average for a moving surface?

These are different tools. LRamp limits the rate of change of the value; it will not let the reading move faster than the configured slope, so a genuine fast fill is reported late and by an amount that depends on the size of the step. FB Average takes a moving average over N samples, attenuating random noise with a predictable lag of roughly half the window.

Tank level noise is mostly surface turbulence and pump-induced ripple, which is random around a true mean, so averaging is the better match: it removes the ripple without distorting the trend. Choose the window from the trend, not from a guess. Trend the unfiltered litres for a few minutes with the pump running and read the peak-to-peak ripple; size the window to bring that inside your tolerance and no larger. If the raw value is already quiet with the pump off but jumps when a contactor pulls in, that is a wiring and grounding problem showing up as noise, and averaging it is hiding a fault you should fix.

What changes on a PCB122D100 expansion with an RTD?

The manual's wiring examples cover RTDs and 0-10 V inputs, so a 4-20 mA transmitter needs an adaptation, and the input range is different from the CPU module. Use a 62 Ohm shunt between the analog input and GND. At 20 mA that produces 1.24 V, and at 4 mA it produces 0.248 V, so the input must be set for the low-level range: remove the jumper on that input, otherwise the input stays on the range intended for 0-10 V and the 1.24 V full-scale signal occupies almost none of it.

The ground reference is the trap on this board. Removing LK59 means pin 1 of P12 is no longer the GND signal; it becomes a sense input for the RTD excitation current. Take the GND reference from pin 2 or pin 3 of P9 instead. Wiring the shunt or the transmitter return to P12 pin 1 in that configuration injects your loop current into the RTD sense path and corrupts the temperature channel as well as the level channel.

Feed the 2-wire transmitter's positive terminal from an external supply, which can be the same one powering the system, and bring the supply negative to the GND reference at P9 pin 2 or 3. Because the shunt voltage is only a quarter of a volt at empty tank, run the transmitter pair in shielded cable, ground the shield at one end only, and keep it away from motor leads. Millivolt-level signals will pick up what a 2-10 V signal shrugs off.

How do I verify the loop before handing it over?

  1. With the loop live, measure DC volts directly across the burden resistor. At a known 4 mA it reads 2.00 V on 500 Ohm, or 0.248 V on 62 Ohm.
  2. Compare that meter reading with the module's raw input value in the same units. A mismatch here is a configuration or reference problem, not a sensor problem.
  3. Inject with a loop calibrator in place of the transmitter and step 4, 8, 12, 16, 20 mA. Expect 2, 4, 6, 8, 10 V and 0, 1000, 2000, 3000, 4000 litres. Record the deviation at each point; a constant offset is zero error, a growing one is span or resistor error.
  4. Check fault behaviour. If the transmitter drives above 20 mA to signal a fault, multiply that current by the burden and confirm the result stays inside the input's rating; a device pushing 22 mA into 500 Ohm produces 11 V. Read the transmitter's fault-drive current from its datasheet.
  5. Trend the finished value for an hour with the tank static and the pump cycling. A flat line with the pump off and clean steps with it running means the wiring is sound. Only then set the averaging window.
  6. Connect the second sensor and re-check the first. A shift on channel 1 when channel 2 comes online points at a shared-return or common-mode problem, not at either sensor.

Stop and escalate when the measured loop current is correct at the DMM but the module's raw value still disagrees after the Mode, the burden, and the ground bonding have all been verified. At that point the question is board-level: the input range configuration, a jumper or link position, or a damaged front end. Contact the module manufacturer's technical support with the wiring diagram, the measured burden voltage, the raw input value, and the module configuration, and ask them to confirm the input range setting and jumper state for a low-level voltage source on that specific channel.

Frequently Asked Questions

How do I connect a 2-wire 4-20mA sensor to a 0-10V analog input?

Wire the sensor's positive lead to +24 Vdc, its negative lead to the analog input terminal, and fit a 500 Ohm resistor from that input terminal to 0 V. Set the input Mode to voltage acquisition, and bond the sensor supply common to the module supply common.

How do I calculate the burden resistor for a 4-20mA to 0-10V conversion?

Divide full-scale voltage by full-scale current: 10 V / 0.020 A = 500 Ohm, giving 2 V at 4 mA and 10 V at 20 mA. Use a 0.1 % tolerance resistor rated at least 0.5 W, since I2R at 20 mA is 0.2 W and any resistance error becomes a direct level error.

How do I know if my 24V supply has enough headroom for the loop?

Calculate V_transmitter = V_supply - I_max x (R_burden + R_cable). With 500 Ohm at 20 mA the burden drops 10 V, leaving 14 V from a 24 V rail; if the transmitter needs 6 V minimum, the lowest usable supply is 16 V. Starved headroom shows as a reading that tracks correctly at low level then flattens near full scale.

How do I scale the input when the tank is not a regular shape?

Replace the linear ValueScale block with the Linearize function and load a breakpoint table of level versus volume from the tank drawings or a metered fill test. A linear scale on a shaped vessel reads correctly at empty and full while being wrong through the middle of the range.

Back to blog