Hide an HMI number when a 4-20 mA transmitter fails

8 min read · Published November 9, 2026

The integer visibility test dies when the transmitter tag becomes a Float32, because the panel's visibility setting takes a discrete value. Write a real-number compare in the PLC that holds a bit ON while the scaled value sits above a threshold set below the 4 mA fault point, aim the object's visibility at that bit, and prove it by lifting one transmitter wire.

Numeric displays stop hiding dead transmitters the moment their tags change from integer to Float32. The visibility setting on the panel takes a discrete value, and a 32-bit floating-point process tag is not one, so the old cutoff expression, which compared the raw count against 819 counts, has nothing left to evaluate and a dead loop keeps its number on screen. The fix lives in the ladder: a real-number compare on the scaled value drives an internal bit, the bit becomes the visibility tag, and the object hides only when loop current actually dies. Set the threshold below the 4 mA fault point, for example 3.5 mA, which is about 717 counts on an input that reports 0 to 4095 counts across 0 to 20 mA. This page gives the compare rung, the threshold arithmetic, the three ladder habits that defeat it, and the wire-lift test that proves the chain end to end.

Why the number stopped hiding

Object visibility on these panels is a discrete decision. The configuration help for the major HMI families describes the same input: pick a discrete tag, then choose whether the object shows when the tag is ON or OFF, and some panels accept a discrete tag or boolean expression in the same place. A Float32 process tag fits neither form, so the object loses its condition and stays visible permanently. The old program worked because the transmitter tags were integers and the visibility expression could evaluate a count. Converting the tags to Float32 for trending and datalogging in engineering units removed the input that expression needed.

Match your symptom to its cause before you change anything:

  • The number stopped hiding the day the tag type changed. The visibility input lost its condition when the tag became Float32; the fix is the PLC-side bit described next.
  • The number hides or flickers on a healthy loop parked near the bottom of range. The cutoff sits at exactly 4 mA, where a live reading and a dead loop meet; the threshold needs to move below that point.
  • The number stays for a transmitter you have already unplugged. Either the new bit has not replaced the old expression in the visibility setting yet, or the compare reads a float that a clamp, a hold-on-fault, or a module open-circuit setting has altered; the wire-lift test below tells the three cases apart.
  • The number reads wrong since the conversion. Scaling or tag mapping moved with the change; fix that first, because every threshold inherits the error.

Hiding is one choice. If operators should see straight away that a loop is dead, keep the object on screen and drive its color from the same health bit; changing a numeric display color from an alarm tag shows that exact pattern.

Build the bit in the ladder

One compare rung per transmitter does the whole job:

  1. Find the scaling rung that turns the raw input word into engineering units and writes the Float32 tag.
  2. Add a real-number comparison contact on that tag: value greater than the threshold you calculate below.
  3. Drive an internal bit from that contact, one bit per transmitter. Keep it internal unless something outside the panel needs a field indication too.
  4. Name the bit for what it means, so ON reads as transmitter healthy.
  5. Add the bit to the panel's tag database as a discrete tag.
  6. In the numeric object's visibility setting, select that tag and set the object visible when the bit is ON.
  7. Leave the numeric display, trend and datalog objects on the Float32 tag; only visibility moves to the bit. If visibility also depends on a second condition such as the current screen or a machine mode, fold both into the one bit; HMI object visibility with two conditions covers that combination.

There is a shortcut when the raw input word still sits in an integer register and nothing overwrites it: add that word to the panel's tag database as an integer tag and point the visibility expression at it again, with no ladder change. Compare against the count form of a threshold below 4 mA, worked out in the example below, so a healthy loop at the bottom of its range keeps its number.

Set the threshold below the fault point

Convert the chosen fault current into engineering units with the same span the scaling rung uses:

EU_threshold = EU_low + ((I_threshold - 4 mA) / 16 mA) × (EU_high - EU_low)

Read EU_low and EU_high from your own scaling instruction. A dead 4-20 mA loop drives current toward 0 mA, so any threshold between 0 and 4 mA separates a low-but-alive process from a dead one. About half a milliamp of margin under the fault point is a sound starting place; widen it if the process is noisy. A healthy loop sitting at EU_low then stays visible, which is correct, and the object hides only when current falls below the threshold. If the process itself can run below EU_low, the transmitter is ranged wrong for the job; re-range it, because no threshold choice will behave.

Threshold choice What it does Where it belongs
At 4 mA, the old count cutoff A healthy loop parked at the bottom of range hides its own number, and noise there flickers the object Only where the process never sits near the bottom of range
Between 0 and 4 mA Low-but-alive readings stay on screen; a dead loop falls below it The default choice
Any threshold, compared after a clamp The clamp parks a dead loop at EU_low, which reads as healthy Move the compare ahead of the clamp or compare the raw counts

The threshold inherits every scaling error, so if the displayed value and the loop current disagree, sort the scaling chain out first; why the scale value differs from the PLC analog input works through the usual causes.

Example: a 0 to 200 °C transmitter on a 0 to 4095 count input

The setup: a temperature transmitter ranged 0 to 200 °C, a scaling rung that maps 4 mA to 0 °C and 20 mA to 200 °C, and an analog input module that reports 0 to 4095 counts across 0 to 20 mA. The threshold current is 3.5 mA.

Engineering-unit threshold: 0 °C + ((3.5 - 4) / 16) × 200 °C = (-0.03125) × 200 °C = -6.25 °C. The compare rung is value > -6.25 °C.

The same point in counts: 4095 counts × (3.5 / 20) = 716.6 counts, so 717 counts is the integer form to use. The old cutoff, for reference, was 4095 × (4 / 20) = 819 counts.

Dead loop: the current falls toward 0 mA and the float falls with it, to 0 °C + ((0 - 4) / 16) × 200 °C = -50 °C. That is 43.75 °C below the trip point, the compare goes false, the bit drops OFF and the number leaves the screen.

Healthy loop anywhere in range: at 0 °C the float sits 6.25 °C above the trip point, and a transmitter accurate to 1% of span moves the reading by 2 °C, still leaving 4.25 °C of margin, so the bit holds ON and the number stays.

One compare and one bit, and the object disappears exactly when the loop dies, at any process temperature from 0 to 200 °C.

Three rung habits that defeat the compare

The compare sees only what the Float32 tag holds, so anything between the input and the compare decides whether a dead loop looks dead:

  1. A clamp after the scaling. A limit instruction that holds the float at EU_low turns a dead loop into a healthy-looking bottom-of-range reading. Place the compare ahead of the clamp, or compare the raw counts.
  2. Hold-on-fault or heavy filtering. Logic that freezes the float at its last good value keeps the bit ON and the number on screen indefinitely. Feed the compare from the unfiltered value ahead of the hold.
  3. Module open-circuit configuration. Some analog input modules can be configured to substitute a fixed count or value when the loop opens. Read the module configuration and establish what an open loop produces before you fix the threshold, because that value has to land below it.

Prove it by lifting one wire

Follow your plant's lockout rules for the loop, and for anything interlocked to this transmitter, before touching a terminal. Then:

  1. Watch three values live in the programming software: the raw count, the scaled float, and the health bit.
  2. Lift one transmitter wire at the terminal.
  3. Read the result. Float falls past the threshold, bit drops OFF, number disappears on the panel: the chain works. Float freezes at its last reading: hold logic ahead of the compare. Float parks at EU_low: a clamp after the scaling. Float jumps to a fixed value: the module's open-circuit substitution.
  4. Land the wire and confirm the bit returns, the object reappears, and the value tracks the process again. If the object stays blank while the bit is ON, the visibility chain is fine and the display tag is the problem; HMI numeric display shows nothing: check the tag address first is the shortest route there.
  5. Repeat on every transmitter whose rung you copied. A stale tag address in one copy hides the wrong number and still passes a test made on one screen.

The trend and datalog keep recording engineering units through all of this, including the samples the operator no longer sees; the bit governs the screen object only.

Recommendation

Recommendation: keep every display, trend and datalog object on the Float32 tag, and drive visibility from a PLC bit set by a real-number compare against a threshold roughly half a milliamp below the 4 mA fault point. Compare the raw counts against the count form of the same threshold when the scaled float is clamped or held downstream, keep the old 4 mA cutoff only where the process never sits near the bottom of its range, and drive the number's color from the same bit when operators need to see that a loop is dead.

A transmitter fault belongs in the PLC and on the HMI. The line-wide message that follows it belongs across the wall, on an andon-style board; we build shop-floor signage for exactly that job.

Questions

Does an object with a visibility tag still respond to touches while it is hidden?

Treat it as dead. At least one major panel family states in its documentation that an object with a visibility tag assigned cannot be operated while the object is invisible. That makes visibility the wrong tool for a button whose availability rides on a live process value: keep the control on screen and drive its color or label from the same health bit.

What happens to trending and datalogging with this arrangement?

Nothing in the logging configuration changes. The trend and datalog objects stay pointed at the Float32 tag and keep recording engineering units, including the dead-loop samples the visibility bit hides from the operator. If those samples would pollute records someone reads later, gate the logging itself on the same compare rung, so the record and the screen tell the same story.

What should I collect before contacting the panel maker's support line?

The CPU firmware version, the analog input module's catalog number, the panel model with its configuration software version, and the screen and rung that misbehave. Bring the threshold calculation too. Stop and escalate when the health bit will not change with a transmitter wire lifted while the raw count and the scaling both look correct, or when the panel rejects a discrete tag its driver should provide.

Planning information, not legal or engineering advice. Rules differ by place: check codes and permits with your local authority and your licensed trades.

Keep reading

Build your signAsk for a quote