Skip to main content

TOFR — Off-Delay Timer

Structured Text off-delay timer function block. Uses FBD_TIMER; the ST equivalent of ladder TOF.

Operands

NameType
timerFBD_TIMER

FBD_TIMER Tag Members

MemberTypeMeaning
.EnableInBOOLForced to 1 each scan by the instruction call — setting it 0 has no effect
.TimerEnableBOOL1 primes the timer (ACC held at 0); 0 runs the off-delay, counting ACC up to PRE
.PREDINTPreset target time in milliseconds
.ResetBOOL1 clears EN, TT, DN and sets ACC to PRE
.EnableOutBOOL1 while the instruction is executing normally
.ACCDINTAccumulated time in milliseconds
.ENBOOL1 while TimerEnable is 1 and Reset is 0
.TTBOOL1 while the timer is actively counting toward PRE
.DNBOOLDone status — each timer (TONR, TOFR, RTOR) decides when this turns on
.StatusDINTPacked status word — combines InstructFault and PresetInv bits
.InstructFaultBOOL1 when the instruction hit an execution error
.PresetInvBOOL1 when PRE is outside its valid range

How It Works

TOFR is the Structured Text function-block equivalent of the ladder TOF instruction. It operates on an FBD_TIMER tag.

While .TimerEnable is 1, the timer is primed — .DN is 1 and .ACC stays at 0. When .TimerEnable drops to 0, .ACC counts up; .DN stays 1 until .ACC reaches .PRE, then goes 0. So .DN holds 1 for the preset duration after TimerEnable drops to 0.

Example

ExhaustTimer.TimerEnable := MachineRunning;
ExhaustTimer.PRE := 30000;
TOFR(ExhaustTimer);

ExhaustFan := ExhaustTimer.DN;
Practice

Try off-delay timing in the Off Delay exercise — keep an output on for two seconds after its input drops.

Common Mistakes

  • Trying to pause with .EnableIn := 0. The instruction call forces .EnableIn back to 1 every scan, so the assignment has no effect. .TimerEnable is the control: 1 holds the output on, 0 begins the off-delay before the output turns off.
  • Assigning .ACC from logic to change it (MyTimer.ACC := 0). Structured Text recomputes .ACC every scan, so a runtime write is ignored (the initial .ACC default is still honored). Reset with .Reset := 1. The same write does take effect on the ladder TOF — so don't rely on it either way; it isn't portable.
  • TOF — the ladder-logic equivalent
  • TONR, RTOR — other ST timer function blocks