TP — Pulse Timer

Description
Section titled “Description”TP (Pulse Timer) produces one pulse of a fixed width when its rung goes true. The pulse is the timer’s TT bit: it turns on the scan the rung rises and stays on for exactly the preset, whatever the rung does in the meantime. A rung that drops early does not shorten the pulse, and a rung held true does not stretch it or start another. Use TP for anything that must be on for a set time from an event: a horn, a solenoid kick, a stamp, a status flash. Do not use TP where the output should follow the input; that is OTE, and do not use it as a delay; that is TON. TP is borrowed from IEC 61131-3 and has no equivalent in RSLogix 500 or Studio 5000.
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 pulse timer’s preset, accumulator and status bits. One TP per tag. |
| Preset | DINT | Whole milliseconds | 1 to 2,147,483,647 (about 24.8 days) | Yes | The pulse width. Stored in the tag as .PRE; editable online. |
| Accum | DINT | Milliseconds | Read-only on the face | — | Time elapsed in the current pulse, .ACC. |
The time base is always milliseconds.
Scan Behavior
Section titled “Scan Behavior”TP has three states, encoded in the existing timer bits: pulsing (TT on), complete (DN on), and idle (neither).
Prescan
Section titled “Prescan”All status bits clear and ACC is 0. The timer is idle.
Rung-condition-in is true
Section titled “Rung-condition-in is true”- Idle: this is the rising edge. TT sets and the pulse starts; ACC begins counting from 0.
- Pulsing: ACC is updated. When it reaches the preset TT clears, DN sets, and ACC stops at the preset. The rung being true has no other effect.
- Complete: nothing changes. The timer waits, with DN on, for the rung to go false.
EN follows the rung.
Rung-condition-in is false
Section titled “Rung-condition-in is false”- Pulsing: the pulse continues unaffected; ACC keeps counting and TT stays on until the preset is reached.
- Complete: the timer re-arms: DN clears and ACC returns to 0. It is now idle and the next true scan starts a new pulse.
- Idle: nothing.
Postscan
Section titled “Postscan”Nothing special.
Member Bits
Section titled “Member Bits”| Member | IEC name | Set when | Cleared when |
|---|---|---|---|
.TT |
Q | The rung rises from idle; this is the pulse | ACC reaches PRE |
.DN |
— | The pulse ends | The rung goes false after the pulse |
.EN |
IN | The rung is true | The rung is false |
.PRE |
PT | The pulse width in milliseconds | — |
.ACC |
ET | Elapsed time in the pulse; parks at PRE while DN is on | The timer re-arms |
Wire the output from .TT, not from the bare tag. A bare TIMER reference in a contact reads .DN, which for a pulse timer means “pulse finished”, the opposite of what an output usually wants. XIC Pulse_TMR.TT → OTE Horn is the idiom.
TP versus TON
Section titled “TP versus TON”If you are coming from RSLogix, TP will feel wrong the first time you try it: hold its rung true with a plain XIC and you get exactly one pulse, then TT goes dark, DN lights, the Accum parks at the preset, and nothing more happens for as long as you hold the rung. That is not the timer being stuck. It is a one-shot that has fired and is waiting to be re-armed.
The difference is that a TON follows the rung level and a TP fires on the rung edge.
A TON times while the rung is true. Reach the preset and DN sets and stays set for as long as the rung is held; drop the rung and everything resets. Hold it and you get one delay followed by DN on indefinitely.
A TP starts its pulse on the false-to-true transition and then ignores the rung. Release the rung mid-pulse and the pulse still runs to its full width. Keep holding the rung and the pulse still ends on time. When it ends, TT drops and DN sets, and the timer sits in that “fired” state until the rung has gone false. Only after it has seen a false rung will it accept a new rising edge.
| Rung input | TON | TP |
|---|---|---|
| Held true | Output on after PRE, stays on | Output on for PRE, then off |
| Tapped briefly (shorter than PRE) | Nothing; the delay is abandoned | A full PRE-wide pulse |
| Released while timing | Resets | The pulse completes |
Those last two rows are what TP is for: a fixed-width output from a trigger whose length you do not control. A momentary button tap giving a one-second horn, a sensor blip stretched long enough to drive a solenoid, a “ding” that is the same length no matter how long the operator leans on the button. A TON cannot do any of those, because it needs the rung held for the whole preset and then never turns off on its own.
So to make a TP pulse repeatedly, something has to take the rung false after each pulse. The example below does that with an XIO on the timer’s own DN bit. DN sets when the pulse ends, the XIO opens, the rung goes false for one scan, the timer re-arms, the XIO closes again, and that false-to-true transition is a fresh rising edge. DN is the “pulse over, please restart” signal, which is also why it is the right bit to re-trigger from and the wrong bit to drive an output from.
Example
Section titled “Example”Scenario: A free-running one-second pulse train, built from a single TP that retriggers itself. The XIO in front of the timer is not decoration; without it the TP fires once and waits (see TP versus TON above).
Tags:
Pulse_TMR— Pulse Timer, TIMER, Preset 1000Beacon— Beacon lamp, BOOL
Rung 1 (the pulse):
—|XIO Pulse_TMR.DN|———[TP Pulse_TMR Preset 1000]———Rung 2 (the output):
—|XIC Pulse_TMR.TT|———(OTE Beacon)———At start-up DN is 0, so the XIO conducts and the rung is true: the pulse starts, TT lights and Beacon turns on. For one second the Accum climbs toward 1000. When it gets there TT goes dark, DN lights, and Beacon turns off. On the next scan the XIO sees DN = 1 and the rung goes false, so the timer re-arms: DN clears and the Accum returns to 0. One scan later the XIO conducts again and a new pulse begins. The result is a one-second on, one-scan off pulse train that runs for as long as the sketch does.

For an even on/off flash use two timers, one for the on time and one for the off time. A TP on its own gives a fixed on time and an off time of one scan.
See Also
Section titled “See Also”- TON — Timer On Delay (a delay, not a pulse)
- ONS — One-Shot Rising (a one-scan pulse; TP is a timed one)
- RES — Reset (aborts a pulse in progress)
- Timer and Counter Instructions — Category index
Non-retriggerable. A second rising edge during the pulse is ignored. The pulse neither restarts nor extends. This is what separates TP from a TON wired to hold its own output.
Trigger width does not matter. The rung may be true for a single scan or for a minute; the pulse is exactly one preset either way. That makes TP the right tool for a pushbutton that must produce a fixed-length output no matter how long it is held.
One pulse per rung cycle. After the pulse ends DN stays on until the rung has been false at least once. A rung held true forever produces exactly one pulse. If you want a pulse every time an event happens, make sure the rung drops between events; if you want a pulse train, feed the rung through XIO <timer>.DN as in the example.
RES on a TP aborts the pulse and returns the timer to idle. Because the timer re-arms from the rung level, a rung still held true starts a fresh pulse on the very next scan.
Range. PRE and ACC are DINT (32-bit) on every board, so a pulse can be as long as 24.8 days.
Timer arrays. The Timer operand may be an element of a TIMER array.
Applies to LadderIDE >=1.2.2 · Last reviewed 2026-09-10 · Screenshots verified 2026-09-10