Setpoint reaches the wrong position after a firmware update

5 min read · Published November 12, 2026

The firmware update forced a project download, and the setpoint entry and the compare now disagree on data format. A 4200-count setpoint that stops under a quarter stroke means the compare reads a packed-BCD word as ordinary binary. Read the written V-memory word and both operands, then fix the representation and keep the entry at 4200.

Your setpoint did not move; its interpretation did. After the update to firmware 2.60 and the project download it forced, an entry of 4200 counts still shows 4200 on the panel, but the machine now changes speed at roughly a quarter of the stroke instead of half. The classic cause in that sequence: the compare instruction is reading a packed-BCD word as an ordinary binary integer. 4200 packed as BCD is the bit pattern 0x4200, which a binary compare sees as 16896. Measure three things before you change anything: the V-memory word the panel writes, both operands of the compare, and encoder counts per inch of travel. Then fix the representation, not the number.

What each symptom points to

Each symptom below has one usual cause in this family of faults. Match yours, then run the checks.

  • The entry reads 4200 online and the machine stops short. The compare fires at a lower count than the setpoint. From 10 counts upward, a packed-BCD pattern is a bigger number than the count it encodes, so a binary compare against it fires early.
  • The machine runs past the mark toward the hard limit. The setpoint operand is bigger than the number you entered, which is what a packed-BCD entry looks like in binary.
  • The encoder display shows nonsense digits. The display tag's format disagrees with the word's contents, the fault behind a panel showing nonsense numbers from a BCD analog register.
  • Presets misbehave once they carry more than one digit pair. The split between binary and BCD shows up at two-digit values and above, the same family as a timer preset multiply that breaks after 9.
  • The written value lands somewhere else entirely. Check the entry object's tag format and word width first, the sequence in a numeric entry writing wrong values to a BCD analog output.

Check the word the panel writes

One safety note, where it belongs: run every check with motion inhibited, or in a mode where a compare transition cannot command a move, and confirm the independent travel limits stop the axis before any full-stroke test.

  1. Enter 4200 on the panel.
  2. Go online with the PLC and read the destination V-memory word the entry writes.
  3. A decimal view of 4200 means the tag wrote an ordinary binary unsigned 16-bit integer, matching the unsigned int 16 format in the project. A decimal view of 16896 means the tag wrote packed BCD, the pattern 0x4200.
  4. A word that never changes means the entry writes a different address than the compare reads. Fix the mapping before anything else.

One test value separates the formats at any time: enter 10. Ten written as binary reads 10; ten written as packed BCD is the pattern 0x0010, which a decimal view shows as 16. Know the ranges too: an unsigned 16-bit word covers 0 to 65535, and the same word as packed BCD covers four digits, 0 to 9999.

Check both operands of the compare

The project converts the encoder count to BCD, moves it to a second V-memory word, and compares that word against the setpoint. Read both words at the same moment with the axis parked at a known count.

The compare is sound only when both operands carry the same representation: both ordinary binary, or both packed BCD into an instruction that decodes BCD. A setpoint word holding binary 4200 against an encoder word holding a packed-BCD pattern compares a number with a bit pattern. It fires at whatever count makes the pattern's binary value reach 4200, and that count is far below 4200.

Worked example: where the stroke stops now

Use the case numbers. Full stroke is 8400 encoder counts, because 4200 counts was half stroke. The setpoint word holds binary 4200, and the compare reads the encoder's packed-BCD copy as a number.

Find the count at which the packed pattern first equals 4200 as a binary value. Convert 4200 to hex: 4200 = 4096 + 96 + 8 = 0x1068. The hex digits of 0x1068 are 1, 0, 6, 8, so the axis produces that pattern at 1068 actual counts.

Position on the stroke: 1068 ÷ 8400 = 0.127, about 13% of travel. The design point was 50%, and 13% is the under-a-quarter behavior you are chasing.

Run the opposite fault with the same numbers. If the entry tag writes packed BCD, the compare sees 0x4200 = 4 × 4096 + 2 × 256 = 16896. That exceeds the 8400-count stroke, the compare never fires inside travel, and the axis runs to the limit switch. One root, two opposite symptoms.

Confirm counts per unit of travel

Close the loop on the encoder path with one measurement. Jog the axis a measured distance at slow speed and divide the count change by the distance. Example numbers: 10.0 in of travel and a count change of 8400 gives 840 counts per inch. Compare that with the commissioning record. Counts per inch comes from the encoder and the mechanics, so a panel update leaves it alone. A match means the fault is in the compare path and motion scaling stays untouched. A moved number means counter setup or wiring, and that investigation comes first.

The fix

Make both operands the same representation, then stop:

  • Drop the BCD step and compare the raw binary encoder count against the binary setpoint. One word, one format, and the panel formats the count for display on its own tag.
  • Keep BCD only where an instruction expects it. If the compare is a BCD compare, convert the setpoint to BCD as well, or decode the encoder word to binary ahead of the compare.

Verify at three setpoints, 1000, 4200 and 8000 counts, and confirm each transitions at its own count. Record the final tag formats, word addresses and the counts-per-inch figure in the machine file.

Never pull the stop point back by entering a bigger number. A compensation entry tuned to one endpoint shifts every other setpoint and every speed-change point, and it hides the format fault from the next person.

What the update to 2.60 actually changed

The update replaced the panel runtime and then demanded a project download. Tag formats are settings inside that project, and the PLC compare instruction ran through the update untouched. Open the current project, put the entry object's data format beside your commissioning backup, and the written-word check tells you which one the machine is running. If the panel went silent after the update instead, that is a panel that stops communicating after a firmware update, a different fault with a different fix.

Recommendation: Treat the fault as a representation mismatch until the written word proves otherwise. With motion inhibited, enter 4200 and read the destination V-memory word. A decimal 4200 means the entry is clean: convert the encoder operand to binary, or decode it, so both sides of the compare match, and keep the entry at 4200. A decimal 16896 means the entry tag's format changed in the downloaded project: set it back to 16-bit unsigned binary and download again. Release the machine only after the 1000, 4200 and 8000 count checks each transition at their own value.

Questions

Why did the machine run correctly before the update?

The project that ran before the update matched the compare. The update forced a download of the newly edited project, and one format setting in it differs from the commissioned version. Small values hide that difference: single digits are the same in both formats, so a check done with small test numbers passes while a working setpoint such as 4200 fails.

How do I keep a format fault from coming back after the next update?

After any update and download sequence, verify one entry at working magnitude before you release the machine: type a value near a real setpoint, confirm the written V-memory word, then release. Keep the commissioning backup of the project with the machine file so tag formats can be compared after every editor session. Changes of this kind travel inside a modified project.

How do I measure counts per inch without backlash in the number?

Jog in one direction only, past the first mark, then take counts at both marks approached from that same direction. Backlash shows up only on a direction reversal, so a one-way move keeps it out of the quotient. Divide the count difference by the distance: 8400 counts over 10.0 in is 840 counts per inch. Repeat the move and match the quotients.

What quick check shows the encoder word is packed BCD?

Index the axis by hand to a round count, 1000 for instance, and read the copied word in a decimal view. A binary copy shows 1000. A packed-BCD copy shows 4096, because 1000 packs into the pattern 0x1000 and 0x1000 read as binary is 4096. One hand-indexed count identifies the representation with no entry and no compare in the path.

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