A numeric entry that closes its keypad, takes effect on the process, and then shows 0 points to a data type mismatch between the entry object and the register. Watch the register live in the PLC software, read the word pattern it holds, and match the object's type to that representation before you change any ladder logic.
A numeric entry whose keypad closes with no error, whose value takes effect on the process, and whose display then snaps back to 0 points at one cause first: the entry object and the PLC disagree about how the number is stored. The fix is usually a type setting on the object, not ladder logic. A 16-bit signed integer word read by a display object configured as a 32-bit floating-point value decodes to about 1.4e-38, which the screen draws as 0.0. The write happened; the register holds a word pattern, and either the ladder decodes it as a different number or a display object decodes a correct word with the wrong type. Watch the register live, enter one safe test value such as 150 °F, and check the data type first before you touch ladder logic.
What the symptom points to
Three observations together isolate this fault from everything else on the same screen:
- The keypad closes and no error appears. The entry object accepted the input and completed its write. The error check validates the transfer; it is not proof that the register holds the number you typed.
- The process responds but overshoots or runs away. The ladder decoded a number different from the one you entered, so the write landed in the wrong representation and the control loop is acting on it.
- The display returns to 0. The object's readback runs the register through its own configured type. A 16-bit integer word read as the high half of a 32-bit floating-point value decodes to about
1.4e-38, which displays as 0.0. - Nothing changes anywhere, screen or process. Suspect the address or the communications path; HMI numeric display shows nothing: check the tag address first covers that fault.
An entry that gets refused or clamped at a limit is a different fault with different logic: the register receives a value your ladder logic has forced to a minimum or maximum, and the live monitor will show that clamped value holding steady where your entry should be.
Watch the register while you enter
The test that separates the causes takes one safe entry and one live monitor.
- Open the ladder and find the exact word every rung that acts on the setpoint reads. Watch that word in the PLC programming software, set to raw or hexadecimal display.
- Choose a test value the process tolerates. For a temperature loop, 150 °F works well: it fits a 16-bit signed integer (-32,768 to +32,767), a 16-bit unsigned integer (0 to 65,535), 16-bit BCD (0 to 9999) and a 32-bit float, so the stored pattern identifies the representation. If the setpoint drives heat, motion or pressure, put the loop in manual or stop the machine before you enter anything.
- Enter 150 on the keypad and watch the word across at least three scans. Most PLC scans complete in under 10 ms, so a few seconds of watching covers many scan cycles.
- Compare three numbers: what you typed, what the word holds, what the screen shows.
The outcomes split cleanly:
- The word holds
0x0096(150) and the screen shows 0. The write is correct; a display object's type or format is decoding it wrongly. Fix the object. - The word holds something else. The entry object wrote in the wrong representation and the ladder is decoding that pattern. The table below identifies which.
- The word never changes. The write went nowhere. Check the address and the path before anything else.
- The word takes 150 and then changes within a scan or two. A rung owns the register and overwrites your entry. Search the ladder for every instruction that writes to that word.
What the word pattern tells you
With 150 as the test value, each representation leaves a different fingerprint:
| Word after entering 150 | What wrote it | What a binary 16-bit ladder reads |
|---|---|---|
0x0096 |
binary 16-bit integer | 150; the types agree |
0x0150 |
BCD, two digits per byte | 336 |
0x4316 |
the high word of the 32-bit float for 150.0, 0x43160000 |
17,174 |
0x0000 |
nothing landed, or a rung wrote 0 afterwards | 0 |
Sign mismatches leave their own fingerprint. Enter -10 into a signed register and the word reads 0xFFF6, which an unsigned ladder reads as 65,526; a freezer that never shuts off with a target of 65,526 is that fault exactly. A BCD read of a binary word produces the same class of wrong number in the other direction, which HMI panel shows nonsense numbers from a PLC BCD analog register covers.
Example: the display shows 0 while the setpoint works
A dryer holds part temperature at an operator setpoint stored in one 16-bit signed data word. The numeric entry object is configured as a 16-bit signed integer and matches the ladder. Above it sits a numeric display object copied from another screen, still configured as a 32-bit floating-point.
The operator enters 150 for a 150 °F target. The entry object writes 150 = 0x0096 into the word. The live monitor shows 0x0096 and the ladder holds the heater at 150 °F; the process is correct.
The display object reads the setpoint word as the first half of a 32-bit float and the unused word beside it as the second half: 0x00960000. The exponent field holds 1, so the value scales by 2^-126; the mantissa adds a factor of 1.171875; the product is about 1.4e-38, and the field shows 0.0. The screen says 0 while the machine holds exactly the setpoint you entered.
Set the display object's type to 16-bit signed and it reads 0x0096 as 150. Nothing in the ladder changes. The same arithmetic runs the overshoot case in reverse: an entry object left as a 32-bit float writes 150.0 as 0x43160000, the setpoint word receives the high word 0x4316, and the ladder compares against 17,174 °F, a target the heater never reaches.
Make the types match
Find the register's real representation from the ladder instructions that touch it, not from the engineering unit on the screen face. A BCD-to-binary conversion instruction on the word marks it as BCD. A compare against a negative constant marks it as a signed 16-bit integer. A rung that multiplies by 10 before the compare stores tenths as an integer, and the object then needs its decimal-places setting at 1.
Set every object that touches the word, entry and display alike, to that type; Change an HMI tag data type without rebuilding every object covers the change itself. Apply or download the HMI project the way your workflow requires, repeat the watched entry, and check that the monitor and the screen agree across several scans. If the word is right but the engineering value is off by a factor of ten, the type is correct and the decimal or scaling setting is not; Why the scale value differs from the PLC analog input walks that case. Do not add arithmetic in the ladder to make a mistyped word look right on screen; it hides the mismatch and the next person to open the project inherits it.
Recommendation: For any numeric entry that closes its keypad without an error, takes effect on the process, and then shows 0, put the live monitor on the register first and enter one safe test value such as 150 °F. Match the entry and display objects' data types to the representation the monitor reveals, retest the watched entry, and edit ladder logic only when the monitor shows a rung overwriting the register.
Questions
What if the setpoint has a decimal point, such as 150.5?
Check how the ladder stores the fraction. Many programs keep tenths in an integer, so a 150.5 °F target sits in the word as 1505, which is 0x05E1. That register needs a 16-bit integer object with its decimal-places setting at 1, and a floating-point object will miss it by a factor of ten. The live monitor still settles the question: the raw word shows which encoding is stored, and the decimal setting only changes how the word is drawn.
Which way does the BCD mismatch run?
Both ways, and the results differ. Enter 150 with the object set to binary into a register the ladder reads as BCD and the word becomes 0x0096, which BCD logic reads as 96. Enter 150 with the object set to BCD into a binary register and the word becomes 0x0150, which binary logic reads as 336. Note the ceiling too: 16-bit BCD holds 0 to 9999, so no larger setpoint fits one BCD word.
The word pattern matches none of the table rows. What is left?
Word order for the 32-bit formats. Some controllers place the low word first, so a floating-point 150.0 arrives as 0x0000 in the setpoint word and 0x4316 in the word beside it. Enter 150, watch both words at once, and if the pattern 0x4316 shows up one word over, set the entry object's word order to match the controller's before anything else.
Planning information, not legal or engineering advice. Rules differ by place: check codes and permits with your local authority and your licensed trades.