Fix an HMI showing lost sign on bipolar RTD temperatures

8 min read · Published November 6, 2026

A bipolar temperature reading keeps its sign in bit 15 of the V-memory word; the panel loses it only because the number is shown unsigned. Confirm the card's binary format, then display the raw two's-complement word as Signed_Int_32 or rebuild a signed real at V3000 and show it as FLOATING_PT_32, verified at one reading above zero and one below.

A bipolar temperature reading does not lose its sign when an RTD card stores it in V-memory. The sign sits in bit 15 of the raw word and survives every copy and mask on the way to the display. The panel shows the wrong thing because its numeric object renders the word as an unsigned number, or because the PLC built a magnitude-only real and nothing re-attached the polarity. The card's documented binary format decides the fix: display the raw two's-complement word as Signed_Int_32, or mask, convert and negate into a real that the panel reads as FLOATING_PT_32. Both routes, and the arithmetic behind them, are worked through below on a freezer channel that should read -18.5 °C.

Why does the HMI show a huge positive number when the process is below zero?

The panel is showing the raw bit pattern as an unsigned number, so a word that means -185 counts reads back as 65351 or 32953, while the sign itself still sits untouched in bit 15 of the same V-memory word.

A 16-bit word gives bit 15 a weight of 32768. An unsigned rendering adds that weight into the displayed number, so a magnitude of 185 counts shows as 32953 while the PLC monitor shows the same word with its true sign.

What each wrong number points to:

  • A large positive value between 32768 and 65535 while the process is cold: the panel is rendering a signed word as unsigned.
  • The right magnitude with the wrong sign: the sign bit was dropped somewhere in the copy or mask chain inside the PLC.
  • A value that never moves, or nonsense that never changes: the object reads the wrong address or the wrong number of words, which the page on fixing HMI invalid address errors when tagging PLC memory covers in detail.
  • The right sign but the wrong magnitude: scaling, not sign handling.

Where is the sign still stored, and how do you look at it?

Bit 15 of the raw word holds it: in the example layout the first RTD channel sits at V2000, so the sign test is contact B2000.15, and you confirm it by opening that location in the PLC monitor and reading the word in binary before you mask or convert.

Open V2000 in the PLC monitor, switch that location's display to binary, and watch bit 15 while the process moves across zero: 0 on a warm reading, 1 on a cold one. Masking the magnitude in a derived value hides the bit from that derived value; the source word keeps it.

Two errors follow from the same fact. Testing the sign in a location the mask has already overwritten returns a positive result forever. And swapping the panel's number format while the real fault sits upstream wastes the afternoon: if bit 15 never toggles between a known warm and a known cold point, the card configuration or the transfer logic is wrong, and no display format will repair that.

Which binary format does the RTD card put in V-memory?

Two documented formats exist and both keep the sign: 15-bit magnitude plus a sign bit, and 16-bit two's complement, each occupying the first of the two V-memory words the channel uses; the card's setup manual names which one your configuration produces, and the format picks the display route.

RTD input card manuals document the binary format each configuration produces, and the common option cards give exactly these two. Both keep the polarity in bit 15 and both sit in the first of the two V-memory words the channel uses.

Format in the raw word What bit 15 holds Display route
16-bit two's complement The sign of a signed count from -32768 to 32767 Display the raw word as Signed_Int_32
15-bit magnitude plus sign A sign flag; bits 0 to 14 hold the magnitude, 0 to 32767 Mask, convert and negate into a real

The PLC monitor confirms the format in a minute. Just below zero, a two's-complement word steps 65535, 65534, 65533 as the temperature falls by tenths of a degree, because -1 count is stored as 65536 - 1. A sign-plus-magnitude word steps 32769, 32770, 32771, because bit 15 adds 32768 to a magnitude of 1, 2, 3. Whichever pattern you see names your route.

Applied in the wrong direction, each route produces the other's symptom: a signed-integer object on a sign-plus-magnitude word reads 32953 as 32953 - 65536 = -32583, negative but nonsense.

Can the raw word be displayed directly as a signed integer?

Yes when the channel is in two's complement: display the raw word as Signed_Int_32, leave the address on the channel's own word, and a raw reading of 65351 renders as -185 with no PLC edits at all.

Two's complement stores -185 counts as 65536 - 185 = 65351, so the value is already signed and only the interpretation is missing. Set it and prove it:

  1. Point the numeric object at the channel's raw address, V2000 for the first channel in the example layout.
  2. Set the object's format to Signed_Int_32 so the panel applies the signed interpretation to the raw word.
  3. Change nothing in the PLC; the ladder keeps doing what it already does.
  4. Compare panel against PLC monitor at one warm and one cold point until the signs agree.

If the readout must show degrees instead of counts, apply the scale after the signed interpretation, so the multiply carries the minus sign through. PC-based HMI packages make the same signed-format choice, and a guide on configuring signed, scaled temperatures in HMI software works through that side of it. When the PLC itself must produce the signed integer, subtract 65536 from any raw reading above 32767, so 65351 - 65536 = -185; a page on subtracting 65536 from a 16-bit reading works that arithmetic in detail.

How do you rebuild a signed float for the panel?

Keep the raw word untouched at V2000, mask the magnitude with 32767, convert that to a real, scale it, then make the result negative when contact B2000.15 is true, and store the finished real at V3000 for the panel to read as FLOATING_PT_32.

  1. Leave the raw channel word at V2000 exactly as the card writes it; it stays the sign source.
  2. AND the raw word with 32767. The mask clears bit 15 and keeps bits 0 to 14, which hold the magnitude.
  3. Convert the masked magnitude from integer to real.
  4. Multiply by the card's scale; the example layout uses 0.1 °C per count.
  5. When contact B2000.15 is true, negate the real.
  6. Store the signed real at V3000 and point the panel object at that address as FLOATING_PT_32.

V2000 is the example address for the first channel and V3000 the example result address; substitute the addresses your program uses. A 32-bit real spans two 16-bit V-memory words, so the object must read both words, and the page on displaying a PLC float stored in two word registers on an HMI covers that layout from the panel side.

The negation rung reads bit 15 from the original word, so keep the raw word and the result in separate addresses. If an earlier rung overwrites V2000 with the masked magnitude, the sign test finds a 0 from then on and every cold reading displays positive.

What does a worked example look like at -18.5 °C?

Say a freezer channel should read -18.5 °C, the card gives 0.1 °C per count in sign-plus-magnitude form, and the raw word at V2000 is 32953: the mask, the conversion and the sign bit turn that into a clean -18.5 °C real at V3000.

That 32953 is the symptom number from the first section: bit 15 carries a weight of 32768, and 32768 + 185 = 32953, which is exactly what an unsigned object displays. Work the chain through:

  1. Magnitude: 32953 AND 32767 = 185. The mask removes the 32768 weight of bit 15 and leaves bits 0 to 14.
  2. Scale: 185 counts × 0.1 °C per count = 18.5 °C.
  3. Sign: B2000.15 is true on this cold reading, so negate: -18.5 °C.
  4. Display: store -18.5 as a real at V3000, point the object at V3000 as FLOATING_PT_32, and the panel shows -18.5 with the sign and the decimal correct.

The same channel in two's complement stores -185 counts as 65536 - 185 = 65351. Read as Signed_Int_32 the panel shows -185, and -185 × 0.1 °C per count gives -18.5 °C, with no PLC edits.

How do you verify the sign at both polarities?

Check four points at one warm and one cold condition: the raw word in the PLC monitor, bit 15, the converted value in the PLC, and the number on the panel; fix at the first point that disagrees, one change at a time.

Work one channel at a time and compare the four checkpoints:

  • Raw word at the channel address in the PLC monitor: 32953 cold in the example.
  • Bit 15: 0 warm, 1 cold.
  • Converted value in the PLC: 18.5 warm, -18.5 cold.
  • Panel: the same two numbers, signs included.

The first point that disagrees names the fault. A correct PLC value with a wrong panel number is an object address or format problem. A correct sign with the wrong magnitude is scaling, and the page on scaling negative analog values on an HMI panel continues from there. A value that never moves is an address or word-count error.

Make the cold reading with a reference instead of the process: an ice bath pins a 0 °C point, and a substitute resistor at the value the card manual maps to a negative temperature pins the cold point with the channel out of service. Do not drive a live process below zero or bypass an interlock to create a test reading.

Which route should you pick, and when?

Pick the signed integer route whenever the channel is in two's complement and a whole-number readout is acceptable, because it needs no PLC edits; build the signed float when the panel needs a real, when the format is sign-plus-magnitude, or when the readout must show engineering units.

The route follows the format, and the format is written in the card's setup manual and visible in the PLC monitor. If the manual does not state a format, or the monitor shows a pattern neither route explains, record the raw word and the converted value and take both to the card vendor's support channel.

Recommendation: Confirm the format from the card manual and the PLC monitor before touching the panel. For two's-complement channels, display the raw word as Signed_Int_32 and change nothing in the PLC. For sign-plus-magnitude channels, mask with 32767, convert to a real, scale, negate on B2000.15, and store the result where the panel reads it as FLOATING_PT_32. Verify every channel at one reading above 0 °C and one below before you call the job done.

Questions

What does a bit reference like B2000.15 mean?

It names bit 15 of the 16-bit word at address V2000. Bit 15 is the most significant bit: the bit a two's-complement word uses for its sign and a sign-plus-magnitude word uses as the sign flag. Substitute your own channel address; V2000 is the example word used on this page.

Why is the masked magnitude never larger than 32767?

Masking with 32767 keeps bits 0 through 14 and clears bit 15. Fifteen magnitude bits count from 0 to 2^15 - 1, which is 32767, so the masked value always fits the positive half of the word, however cold the channel reads. The polarity returns in the negation step, not in the mask.

Does converting counts to a 32-bit real lose accuracy?

No. An IEEE 32-bit real represents every integer exactly up to 16,777,216, and a 15-bit magnitude tops out at 32767, so counts and tenths-of-degree values survive the conversion untouched. The scale multiply, 0.1 per count in the example, introduces binary rounding at the displayed decimal that is far finer than one RTD count.

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