PLC Glossary

Six things every PLC engineer runs into.

Cycle-time bottlenecks, dead code, missing interlocks, broken handshakes, race conditions, and signal tracing — plain-English explanations of concepts that usually take years on the floor to learn to spot.

/cycle-time

Cycle-time bottleneck

A step in a sequence that takes longer than it should, delaying the whole cycle. Bottlenecks often hide in timers (TON/TOF) or wait loops that nobody has revisited since commissioning.

Sample output · CYCLE-TIME
Found 3 bottlenecks:
→  TON T47      1,200ms   Station 4
→  TON T12        840ms   Conveyor Exit
→  WAIT loop      300ms   PackML Init

Longest delay at Station 4. Review T47 first.
/dead-code

Dead code

Logic that is disabled, bypassed, or unreachable — a rung whose condition can never be true, a function block nobody calls anymore, a flag that's written but never read. It adds risk every time someone tries to modify the program without knowing it's inert.

Sample output · DEAD-CODE
Found 4 inactive blocks:
→  FC22          bypassed since 2021
→  Rung 47       condition always FALSE
→  DB14.flag     written, never read
→  CALL FB33     commented block

No active references found. Safe to review.
/interlocks

Interlock audit

Safety interlocks — E-stops, guard doors, drop chains — are supposed to have a reset path, a bypass timeout, and confirmed feedback before the line re-energizes. An interlock audit checks each chain for the gaps that don't show up until something goes wrong.

Sample output · INTERLOCKS
12 interlocks scanned. 2 flagged:
→  E-stop at Cell 3    no reset confirmation
→  DB5.bypassActive    no timeout guard

Recommend adding reset logic and bypass timeout.
/missing-handshake

Missing handshake

Two stations in a sequence are supposed to confirm to each other before the next step proceeds — a robot signals it has cleared before the conveyor advances. A missing or incomplete handshake means one station can act on stale information from the other.

Sample output · MISSING-HANDSHAKE
FINDING 1 — Incomplete Handshake (Conv001 → Rob010):
bArmReleased is confirmed but bHeightClear is not — conveyor
can advance before arm has fully cleared the pick zone.
/race

Race condition

When two parts of a program — two tasks, two interrupts, two routines — can write to the same tag, whichever one runs last wins, and that order isn't always guaranteed. Race conditions are some of the hardest bugs to reproduce because they depend on scan timing.

Sample output · RACE
1 race condition found:
→  DB3.runCmd written by OB1 and OB35
   OB35 fires on interrupt, may override OB1

Last write wins. Add arbitration or priority logic.
/signal-trace

Signal trace

Following one tag or signal through every place it's written and read across a project — useful when you're trying to understand why a value changed, or what depends on it before you touch it.

Sample output · SIGNAL-TRACE
Tracing Motor1_Enable...

Write sites (3):
→  FC10 Rung 4    set on start command
→  FC10 Rung 19   cleared on fault
→  OB86           cleared on CPU restart

Read sites: 7 found across 4 function blocks.

These skills run on your own project.