Add an operator-settable start delay when the HMI has no scripting

6 min read · Published November 12, 2026

Panel programming software at version 3.1a has no scripting, so a delay the operator can change belongs in the PLC: a numeric entry object writes seconds into the timer's preset register, and the timer's done bit, gated by the machine's permissives, sets the start bit. Enter 0 to 30 s, scale seconds to the preset's counting base, and clamp the entry in ladder logic.

Put the delay in the PLC and let the panel write the number. Panel programming software at version 3.1a has no scripting, so the panel cannot run the if-then logic a conditional start needs, and a delay the operator changes on the floor is conditional logic. The build is short. A numeric entry object on the panel writes the operator's delay into the timer's preset register. The start button writes a request bit instead of the machine start bit. The timer's done bit, in series with the machine's existing permissives, sets the start bit after the entered time. This page gives the build for a 0 to 30 s delay in 1 s steps, the address, data type and units checks that make the write land where you expect, and the one panel feature that can do the job without a PLC edit.

What the panel can do at version 3.1a

As of version 3.1a, this panel software has no scripting capability. There is no if-then editor and no script language, so a button whose action depends on which radio button is selected hands that decision to the PLC. Give the panel the presentation jobs: the radio buttons, the delay entry, the start button. Give the PLC the decision jobs: decoding the selection, timing the delay, and gating the start against the machine's permissives.

Two panel-side features get tried for this job:

  • A pushbutton "Delay On" option runs its delay at a value fixed at design time. In one documented project there was no way to bind a numeric object to that time, so the operator could not change it. Use it only for a delay nobody adjusts.
  • An event manager with a "copy tag data" action can write an operator-edited numeric tag into the preset register on a trigger. On panels that document that action, this is a real panel-only path. Prove it on a copy of the project: the trigger, the source and destination data types, and the value landing in the preset register.

If your panel software documents no conditional event, stop hunting for a script editor. The delay is a PLC change, and it is a small one: a timer, an entry object, and one rung.

What you need

  • The panel programming software and the current project.
  • The PLC programming software and a verified upload of the program as it runs.
  • The timer's address, preset register, data type and counting base, read from the timer's configuration.
  • An agreed range and units from the machine owner. This build uses 0 to 30 s in 1 s steps, default 5 s.
  • The machine secured so it cannot move during the checks.

Read the timer before you build the object

If the start sequence already contains a timer, use its preset field: record its address, data type, counting base, what enables it, and what its done bit drives. If there is no timer, add one and let the HMI change a timer preset instead of a constant: the preset lives in an unused variable memory location, which is what makes it writable from the panel. Timer preset registers on this class of controller are addressable directly from the panel software, so the write is one object, not a gateway project.

Then point a numeric object at the timer preset address and set the HMI data format for a timer preset before anything else: integer to integer, and the object's counting base equal to the register's.

A timer preset is a count of the timer's counting base, and bases differ. One controller line, in a vendor support answer, counts the preset in milliseconds: 6 s is 6000. Another documented approach uses two tags: the operator enters seconds in the first, and the program multiplies by 1000 into the preset. Read your timer's base in its configuration, then pick one of those two shapes.

The build, step by step

  1. In the PLC, point the start-delay timer's preset at an unused variable memory location instead of a constant.
  2. Fix the range and units with the machine owner: here 0 to 30 s, 1 s steps, default 5 s.
  3. On the panel, add a numeric entry object aimed at the preset register, integer format, entry limits 0 to 30.
  4. Match the counting base. If the preset counts milliseconds, set the object's scaling to multiply by 1000, or write a seconds tag and let the PLC compute preset = seconds × 1000.
  5. Clamp the entry limits in ladder logic: rungs hold the written value at 0 below the range and 30 above it. Panel-side limits guide the operator; the rungs protect the machine.
  6. Repoint the start button to a start-request bit in the PLC. If the button is momentary, latch the request bit, the same fix as for a button output that only stays on while pressed.
  7. Build the rung: the request bit enables the timer; the timer's done bit, the decoded radio-button selection and the existing permissives in series set the start bit.
  8. Write the radio-button group to the PLC as one integer, 1 for the first choice, 2 for the second, 3 for the third, and decode it with compare rungs.

A timer on-delay instruction gives you an enable bit, a timer-timing bit and a done bit. The done bit sets when the accumulated time reaches the preset, and the start bit follows the done bit, so the machine command leaves exactly the entered time after the press.

Example: a 5 s start delay on a millisecond preset

Inputs: the operator's default delay is 5 s, entered in 1 s steps, with limits 0 to 30 s agreed with the machine owner. The preset register counts milliseconds, the base documented above at 6 s = 6000. The register is 16-bit signed, which holds counts up to 32767.

Rule: preset in counts = entered seconds × 1000, because 1 s is 1000 ms.

Arithmetic:

  • Default: 5 s × 1000 = 5000. After the operator writes 5, the preset register must read 5000.
  • Range top: 30 s × 1000 = 30000, under the 32767 ceiling. The register overflows at 32.767 s, so this build caps the range at 30 s and keeps margin.
  • Cross-check on the documented rule: 6 s × 1000 = 6000, the value the vendor support answer uses.
  • Clamp: an entry of 40 s is held at 30 s by the clamp rung, so the preset reads 30000 and the done bit sets at t = 30 s after the press.

Timing: press start at t = 0 s. The request bit enables the timer, the timer-timing bit runs, the done bit sets at t = 5 s, and the start bit follows. If the request bit drops before 5 s, the timer resets and the next press re-times the full delay.

Decision: if the register reads 5 after an entry of 5, the scale is missing and the timer would finish in 5 ms. Fix the object's scaling or the multiply rung before any machine test. Above 30 s of needed delay, count the preset in seconds or time with a counter, because 33 s × 1000 = 33000 overflows the register.

Check it works with the machine unable to move

One safety note first: put the machine where it cannot move before these checks, drives disabled or locked out to your site's procedure. The checks follow the same order any panel-to-PLC write deserves: test writes before motion.

  • Enter 5. The preset register reads 5000.
  • Enter 40. The value the PLC uses reads 30, and the preset reads 30000.
  • Press start with the permissives closed. The timer-timing bit is on and the done bit off; at t = 5 s the done bit sets and the start bit follows.
  • Open a permissive mid-delay. The start bit stays off even when the timer finishes.
  • Select each radio button in turn. Only the decoded action's rung energizes.

Which path to take

Recommendation: Build the delay in the PLC whenever the panel software documents no scripting. Numeric entry in seconds with limits 0 to 30, a ×1000 scale into a millisecond preset, clamp rungs in ladder logic, and the timer's done bit gating the start bit through the machine's permissives. Take the panel-only path only when your panel documents a conditional event, such as a "copy tag data" action that writes an operator-edited tag into the preset register, and prove that path on a copy of the project before it runs a machine.

Questions

Can a pushbutton Delay On option replace a PLC timer?

No, when the delay must be operator-settable. That option runs its delay at a value fixed at design time, and in one documented project there was no way to bind a numeric object to its time. It suits a delay nobody changes. For a settable delay, write the preset register from a numeric entry object and let the PLC time it.

What happens if the panel writes seconds into a millisecond preset?

The delay comes out a thousand times short. An entry of 5 lands as 5 counts, so a millisecond-based timer finishes in 5 ms and the start bit sets almost instantly after the press. The tell is the preset register: it should read 5000 for a 5 s delay. Fix the entry object's scaling or the multiply rung, then read the register again.

How should the radio-button selection reach the PLC?

As one integer per group: 1 for the first choice, 2 for the second, 3 for the third. Compare rungs in the PLC decode the value and gate each action with its own permissives. The panel keeps the presentation job only, so the decision still works on panel software with no scripting.

Why does the example cap the delay at 30 s?

The register is a 16-bit signed value, so 30 s is 30000 counts, just under its ceiling of 32.767 s. A process needing a longer delay should count the preset in seconds, or time with a counter and a fixed base tick, so the register never overflows.

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