TON — Timer On Delay
![TON instruction block: Timer TMR[0], Preset 10000, Accum 0, with the EN, DN and TT indicators on the right](/assets/docs/instructions/timer-counter/timer-ton-block.png)
Description
Section titled “Description”TON (Timer On Delay) waits for its rung to have been true for the preset time, then sets its done bit. While the rung is true the accumulator counts up in milliseconds; when it reaches the preset the DN bit turns on and the accumulator stops there. The moment the rung goes false the timer resets to zero and DN turns off. Use TON for any delay that should begin when a condition appears and be abandoned if the condition disappears: a warning horn before a conveyor starts, a debounce on a sensor, a timeout on a motion. Do not use TON when the elapsed time must survive the rung going false; that is RTO.
Operands
Section titled “Operands”| Operand | Type | Format | Valid Range | Required | Description |
|---|---|---|---|---|---|
| Timer | TIMER | Tag name or Array[n] |
A TIMER tag owned by no other timer instruction | Yes | The structure that holds this timer’s preset, accumulator and status bits. One TON per tag. |
| Preset | DINT | Whole milliseconds | 1 to 2,147,483,647 (about 24.8 days) | Yes | How long the rung must stay true before DN sets. Stored in the tag as .PRE; editable online in the Tag Browser. |
| Accum | DINT | Milliseconds | Read-only on the face | — | Elapsed time so far, .ACC. Shown live while simulating or online. |
The time base is always milliseconds. RSLogix 500 timers have a selectable 0.01 s or 1.0 s base; LadderIDE has neither. A preset of 2500 is two and a half seconds.
Scan Behavior
Section titled “Scan Behavior”Prescan
Section titled “Prescan”EN, TT and DN are cleared and ACC is 0. The preset is loaded from the tag.
Rung-condition-in is false
Section titled “Rung-condition-in is false”The timer resets: EN, TT and DN clear and ACC returns to 0. Any time already accumulated is lost.
Rung-condition-in is true
Section titled “Rung-condition-in is true”On the first true scan the timer starts and EN sets. Each scan the accumulator is updated from the elapsed time. While ACC is below the preset, TT (timer timing) is on and DN is off. When ACC reaches the preset, DN sets, TT clears, and ACC stops at the preset for as long as the rung stays true.
Postscan
Section titled “Postscan”Nothing special. The status bits and accumulator carry into the next scan.
Member Bits
Section titled “Member Bits”| Member | Type | Set when | Cleared when |
|---|---|---|---|
.EN |
BOOL | The rung is true | The rung is false |
.TT |
BOOL | The rung is true and ACC is below PRE | ACC reaches PRE, or the rung goes false |
.DN |
BOOL | ACC reaches PRE | The rung goes false, or RES |
.PRE |
DINT | The preset, in milliseconds | — |
.ACC |
DINT | Elapsed milliseconds; stops at PRE | The rung goes false, or RES |
Read the members anywhere with a contact: XIC TMR[0].DN is the usual output of a TON, and XIC TMR[0].TT is true only while the delay is in progress.
Example
Section titled “Example”Scenario: A run command must be present for ten seconds before the motor starter is allowed to pull in.
Tags:
MotorRun— Motor run output, BOOLTMR[0]— element 0 of a TIMER array namedTMR, Preset 10000Starter— Starter coil, BOOL
Rung 1 (the delay):
—|XIC MotorRun|———[TON TMR[0] Preset 10000]———Rung 2 (the output):
—|XIC TMR[0].DN|———(OTE Starter)———Values before: MotorRun = 0, TMR[0].ACC = 0, TMR[0].DN = 0, Starter = 0.
Turn MotorRun on. For the first ten seconds the rung is green, the Accum on the block face climbs toward 10000, the EN and TT indicators are lit and DN is dark; Starter stays off. The screenshot below was taken partway through that ten seconds.
![Figure 1 — Delay in progress: MotorRun on, TON TMR[0] with the Accum climbing toward 10000, EN and TT lit, DN dark](/assets/docs/instructions/timer-counter/timer-ton-example-rung-1.png)
At 10000 ms DN lights, TT goes dark, and the Accum stops at 10000. Rung 2 now conducts and Starter turns on.
Values after: MotorRun = 1, TMR[0].ACC = 10000, TMR[0].DN = 1, Starter = 1.
Turn MotorRun off and everything clears on the next scan: Accum 0, DN off, Starter off. Turn it on again and the full ten-second delay repeats.
See Also
Section titled “See Also”- TOF — Timer Off Delay (delays the turn-off instead of the turn-on)
- RTO — Retentive Timer On (keeps its accumulator when the rung goes false)
- TP — Pulse Timer (fixed-width pulse from an edge)
- RES — Reset (clears a timer’s accumulator and status bits)
- CTU — Count Up (count timer cycles for delays longer than one preset)
- Timer and Counter Instructions — Category index
The accumulator stops at the preset. Once DN is set, ACC reads exactly PRE for as long as the rung is held; it never runs past it. This matches RSLogix 500 and Studio 5000.
Range. PRE and ACC are DINT (32-bit) on every board, so one timer can run for 24.8 days. A preset of 0 or below sets DN on the first true scan.
No one-shot needed. TON starts on its own when the rung goes true; an ONS in front of it changes nothing.
RES on a TON clears ACC and all three status bits while the RES rung is true. The timer restarts from zero on the next scan its own rung is true. RES is rarely needed with a TON, since a false rung already resets it.
Timer arrays. The Timer operand may be an element of a TIMER array, for example Timers[3]. Each element is an independent timer with its own members.
Applies to LadderIDE >=1.2.2 · Last reviewed 2026-09-10 · Screenshots verified 2026-09-10