PLC pressure scaling shows three decimal places

6 min read · Published November 9, 2026

Three decimal places on a 0-10 psi input fail when the multiply by 10,000 outgrows the accumulator and the 10,000 result needs two BCD words. Scale to milli-psi inside the PLC with math storage wide enough for the intermediate product, convert across two words, and set three decimal places on the display. Multiplying a rounded two-decimal value by 10 only appends a zero.

A 0-10 psi signal from a 4-20 mA transmitter can show three decimal places from a compact PLC. The multiply by 10,000 fails for two separate reasons: the intermediate product outgrows the accumulator the controller does its math in, and the largest result, 10,000, is five digits long. Multiplying the finished two-decimal value by 10 is no fix; it appends a zero to a number that never held thousandths. Scale in thousandths of a psi inside the PLC with math storage wide enough for the intermediate product, convert the result across two words, then point the display at both words with three decimal places set. Here is how to tell which part failed and how to make the third digit real.

Why the third digit reads zero

Multiplying a two-decimal value by 10 gives 10.000, 5.000, 2.000, and the last digit never moves. That register was rounded to hundredths long before the display saw it: at full scale it holds 1,000, meaning 10.00 psi, and the divide that produced it threw the milli-psi digit away. Multiplying by 10 turns 1,000 into 10,000 but builds the new digit from nothing. This sits in the same family as an HMI value that shows ten times too small: the display formats honestly, but the number it is handed lacks the resolution you asked for.

So the work is upstream. The PLC must carry pressure in thousandths, unrounded, before any conversion for display.

Symptoms and what each one points to

  • The multiply by 10,000 returns a wrong number, wraps, or faults the CPU. The intermediate product, endpoint count × 10,000, exceeded the capacity of the accumulator or result register the instruction uses. The divide then runs on garbage.
  • The CPU drops to stop mode during the multiply. Some controllers treat an arithmetic overflow as an internal fault and halt the whole scan, not just one register.
  • Multiplying by 10 works but the last digit stays 0. The arithmetic is fine; the precision was cut upstream when the value was rounded to hundredths.
  • The display tops out at 9.999 or wraps near full scale. The result 10,000 needs two BCD words; a single-word conversion or display object stops at 9999.
  • Large random numbers appear after conversion. The display object reads one word of a two-word result, or reads the two words in the wrong order.

Check the raw input before touching the scaling

Start at the analog module. Put the transmitter at its 0 psi endpoint and record the raw count; apply a known pressure near 10 psi and record it again. Those two numbers, R4 at 4 mA and R20 at 20 mA, are the entire scale. Exact counts depend on the module and its configuration, so measure them; one count equals the engineering span divided by the resolution.

Endpoint errors move every digit on the screen. A 1% error in the span is 0.1 psi at full scale, and 0.001 psi is one step of the new digit, so 1% of span is 100 steps. The endpoint arithmetic is the same as when you scale a 4-20 mA pressure transducer for an HMI display; only the resolution target changes.

If this value feeds an alarm or interlock, verify the scaled result against a calibrated gauge before the loop goes back into service.

Scale in thousandths with storage that fits

The scaling form is:

milli_psi = (R - R4) × 10000 ÷ (R20 - R4)

R is the raw count and the result is in thousandths of a psi, so 10 psi becomes 10,000. The multiply comes first, and that order is what breaks: the intermediate reaches endpoint count × 10,000. Compute that product for your endpoints and compare it with the largest value your controller's math instruction documents for its accumulator. If the only integer path is 16-bit signed, it tops out at 32,767, and overflow starts at a count of 4 (32,767 ÷ 10,000 = 3.28). With endpoint counts in the thousands, a 16-bit multiply cannot carry this scaling at any usable pressure.

Use the controller's double-word or 32-bit integer math, or its documented scaling instruction with a wide result register, so the product survives to the divide. Dividing first is no escape: with a 4095-count span, every count below 4095 divides down to 0, and the display reads 0.000 at any pressure.

If the controller has no wide integer path, floating-point math avoids the overflow. Check the documentation first: a knowledge base documents a floating-point multiply that returned incorrect results on a compact PLC, so test a float multiply at full scale once before trusting it.

Worked example: 0-10 psi from a 12-bit input

The endpoint counts below are illustrative; measure your own before trusting any result.

Setup: a 12-bit input reads 0 counts at 4 mA (0 psi) and 4095 counts at 20 mA (10 psi). Span = 4095 - 0 = 4095 counts, so one count is 16 mA ÷ 4095 ≈ 0.0039 mA.

Old path, hundredths: R × 1000 ÷ 4095. At full scale the intermediate is 4095 × 1000 = 4,095,000 and the result is 1,000, displayed as 10.00.

New path, thousandths: R × 10000 ÷ 4095. At full scale the intermediate is 4095 × 10000 = 40,950,000, ten times the old product, and the result is 10,000, displayed as 10.000. If the math path caps at 32,767, the product overflows from a count of 4 upward (4 × 10000 = 40,000), which is why the ×1000 version ran and the ×10000 version failed.

Mid-span check at R = 2048: 2048 × 10000 = 20,480,000; 20,480,000 ÷ 4095 = 5001 with the remainder dropped. The display shows 5.001.

The ×10 shortcut at the same count: 2048 × 1000 = 2,048,000; ÷ 4095 = 500 with the remainder dropped; × 10 = 5000, displayed as 5.000. The true value is 5001 milli-psi. The digit exists in the loop and is gone in the register.

Convert to two words and set the decimal point

At full scale the result is 10,000. A 16-bit word in BCD form carries four digits, 0 through 9999, so the fifth digit of 10,000 needs a second word. Use the controller's conversion instruction for eight-digit, two-word BCD results; the instruction set lists it beside the single-word version. Note which word it writes first.

Then set up the display:

  1. Point the pressure object at both words, in the order the conversion writes them; the instruction documentation names the high and low word.
  2. Set the object's format to three decimal places.
  3. Check that the object reads the register the conversion writes, not the old hundredths register.

If you carry the value as a 32-bit float instead, the display still reads two words; the mapping problem is the same one described in display a PLC float stored in two word registers on an HMI.

The decision

Recommendation: Keep the scaling in the PLC. Scale to milli-psi with a multiply whose intermediate fits the documented accumulator width: double-word integer math, a wide scaling instruction, or floating point. Convert with the two-word BCD conversion, then set three decimal places on a display object pointed at both words. Move the math to the display only when the display scales from the raw count; a display computing on the PLC's rounded hundredths register still shows a dead zero. Keep control and alarm comparisons on the same milli-psi register, so the logic and the screen read the same number.

Checks after the change

  • At 0 psi the display reads 0.000.
  • At full scale it reads 10.000 with no fault, no stop, and no wrap.
  • At a mid pressure against a calibrated gauge, the display matches the gauge within the transmitter's accuracy.
  • Nudge the pressure slightly and watch the third digit move through nonzero values; a third digit that only ever reads 0 means the register still carries hundredths.
  • Force the intermediate product once at each endpoint, on purpose, before the loop returns to service.

Questions

Does a third decimal place mean the measurement is truly that precise?

No. Resolution and accuracy are different things. The scaling now carries steps of 0.001 psi, but a typical industrial pressure transmitter is accurate to 0.1% to 0.5% of span, which on a 10 psi range is 10 to 50 milli-psi. Expect the last one or two digits to wander with loop noise. The wandering means the scaling is live; the accuracy figure on the transmitter datasheet tells you which digits to trust.

Can an arithmetic overflow stop the PLC?

On some controllers, yes. An arithmetic overflow can switch the CPU to stop mode as an internal fault, and the whole scan halts, not just the display value. Other controllers wrap the result and keep running on a wrong number. The controller's manual names which behavior applies, and the full-scale product test in this article shows you which one you have before the loop goes live.

Can the display do the scaling instead of the PLC?

Only if it scales from the raw analog count. A display that receives the raw count plus the two endpoint values computes thousandths from unrounded data, and the third digit is real. A display that receives the PLC's finished two-decimal value can only append a zero, because the divide already discarded that digit. Keep the control and alarm logic on the PLC's own milli-psi register either way.

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