─┤ ├─ Normally Open contact (passes power when bit = 1)
─┤/├─ Normally Closed contact (passes power when bit = 0)
─( )─ Output coil (energizes when rung is true)
─(/)─ Negated output coil
─(L)─ Latch coil (sets and holds)
─(U)─ Unlatch coil (resets)
| Gate | Ladder | Boolean |
|---|---|---|
| AND | Two NO contacts in series | Y = A · B |
| OR | Two NO contacts in parallel | Y = A + B |
| NOT | One NC contact | Y = ¬A |
| NAND | Two NC contacts in parallel | Y = ¬(A · B) |
| NOR | Two NC contacts in series | Y = ¬(A + B) |
| XOR | (A NO + B NC) parallel with (A NC + B NO) | Y = A ⊕ B |
| XNOR | (A NO + B NO) parallel with (A NC + B NC) | Y = ¬(A ⊕ B) |
Seal-in latch (most common):
START STOP
─┤ ├──┬──┤/├──────( MOTOR )
│
MOTOR
─┤ ├──┘
SR latch (set/reset coils):
START
─┤ ├────────( L MOTOR )
STOP
─┤ ├────────( U MOTOR )
⚠️ STOP must be NO here, not NC — the unlatch coil only fires when the rung is true.
This is a useful fiction. Internally the PLC just evaluates Boolean expressions — there is no electrical current in software.
Same logic, drawn as wired blocks instead of rungs:
A ───┐
├─[ AND ]─── Y
B ───┘
When to prefer FBD over LD:
When to prefer LD over FBD:
MOTOR = START · GUARD · ¬FAULT