Basic
12 min

Forward/Reverse Motor PLC Ladder Diagram (Run It Free)

This page walks through the complete forward/reverse motor control PLC program — the seal-in latches that hold each direction, the cross-interlock that stops the two contactors from ever pulling in together, the stop-before-reverse logic, and the auxiliary-feedback fault detection that catches a welded contactor. The ladder is grounded in a live scenario you can run right now in your browser: write the rungs, press the forward and reverse push-buttons, watch the motor spin each way, and get instant pass/fail feedback — no PLC hardware and no software to install.

motorforward-reverseinterlocksafety
Forward / Reverse Motor scenario preview

Ready to build this?

Sign up free — no credit card required. This scenario requires the Basic plan.

Sign up to play this scenario →

Already have an account? Log in

Briefing

A reversible motor starter with electrical and mechanical interlocking. FWD_PB runs the motor forward (seals in); REV_PB reverses it. STOP_PB de-energises both contactors. A cross-interlock prevents both contactors from energising simultaneously. Auxiliary feedback contacts are used to detect a stuck (welded) contactor — a mismatch between the commanded contactor and its auxiliary latches FAULT_LAMP.

Objectives

  • FWD_PB energises FWD_CONTACTOR and seals in (while STOP_PB and no fault)
  • REV_PB energises REV_CONTACTOR and seals in; FWD_CONTACTOR is de-energised first
  • STOP_PB de-energises both contactors
  • Both contactors are interlocked — FWD inhibits REV and vice versa
  • ESTOP drops both contactors and latches FAULT_LAMP
  • AUX mismatch (contactor commanded off but AUX still on) latches FAULT_LAMP

Hints

  • FWD_BIT: S= by FWD_PB; R= by STOP_PB, ESTOP off, REV_PB (change direction), or fault
  • REV_BIT: S= by REV_PB; R= by STOP_PB, ESTOP off, FWD_PB, or fault
  • FWD_CONTACTOR := FWD_BIT AND /FAULT_BIT AND /REV_BIT (cross-interlock)
  • FAULT: S= by /ESTOP. Aux mismatch: FWD_AUX high when FWD_CONTACTOR de-energised (or REV_AUX similarly)

I/O Table

Inputs

FWD_PB

Forward push-button (momentary)

BOOL · %I0.0

REV_PB

Reverse push-button (momentary)

BOOL · %I0.1

STOP_PB

Stop push-button (momentary)

BOOL · %I0.2

ESTOP

E-stop (NC — true=healthy)

BOOL · %I0.3

FWD_AUX

Forward contactor auxiliary feedback

BOOL · %I0.4

REV_AUX

Reverse contactor auxiliary feedback

BOOL · %I0.5

Outputs

FWD_CONTACTOR

Forward motor contactor coil

BOOL · %Q0.0

REV_CONTACTOR

Reverse motor contactor coil

BOOL · %Q0.1

FWD_LAMP

Forward running indicator lamp

BOOL · %Q0.2

REV_LAMP

Reverse running indicator lamp

BOOL · %Q0.3

FAULT_LAMP

Fault indicator lamp

BOOL · %Q0.4

Your program will be tested against:

All test cases run automatically when you submit. Assertions are hidden until you pass.

  1. #1FWD_PB seals in forward contactor

    Momentary FWD_PB energises FWD_CONTACTOR; STOP_PB drops it

  2. #2REV_PB seals in reverse contactor

    Momentary REV_PB energises REV_CONTACTOR; STOP_PB drops it

  3. #3REV_PB clears forward and energises reverse — never both on

    Pressing REV_PB while forward is running switches direction; both contactors never simultaneously energised

  4. #4E-stop latches fault and drops both contactors

    E-stop drops both contactors and latches fault

How forward/reverse motor control works

A reversing motor starter drives a three-phase motor in either direction by swapping two of the three supply phases. In the power circuit this is done with two contactors: the forward contactor connects the phases straight through, and the reverse contactor swaps L1 and L3. Energising the wrong pair — or both contactors at once — creates a phase-to-phase short across the swapped lines, so the single most important job of the PLC program is to guarantee the two contactors can never be energised at the same time.

The control logic is a pair of seal-in (latching) rungs, one per direction, tied together by a cross-interlock. Pressing FWD_PB energises FWD_CONTACTOR, which seals itself in through a holding contact so the motor keeps running after the button is released. Pressing REV_PB does the same for REV_CONTACTOR. STOP_PB and the E-stop drop both. The cross-interlock is the contact of each direction wired normally-closed into the other direction's rung, so whenever one contactor is in, the opposite rung is broken.

In this scenario six inputs are pre-wired for you: FWD_PB (%I0.0), REV_PB (%I0.1), STOP_PB (%I0.2), ESTOP (%I0.3, normally-closed — TRUE means healthy), and the two contactor auxiliary feedback contacts FWD_AUX (%I0.4) and REV_AUX (%I0.5). Five outputs are pre-wired: FWD_CONTACTOR (%Q0.0), REV_CONTACTOR (%Q0.1), FWD_LAMP (%Q0.2), REV_LAMP (%Q0.3), and FAULT_LAMP (%Q0.4).

The seal-in and cross-interlock rungs

Each direction is a memory latch. The cleanest way to build it is with SET/RESET coils on an internal bit, then drive the physical contactor from that bit through the interlock.

FWD_BIT is SET by a momentary press of FWD_PB and RESET by any of: STOP_PB, the E-stop dropping out, a fault, or — for stop-before-reverse safety — REV_PB. REV_BIT mirrors it: SET by REV_PB, RESET by STOP_PB, E-stop, fault, or FWD_PB. Because pressing the opposite direction button resets the running bit, the motor always coasts to stop before the other direction can take over, which protects the gearbox and the contactors from a plugging-style instant reversal.

The physical coils then carry the cross-interlock: FWD_CONTACTOR := FWD_BIT AND NOT FAULT_BIT AND NOT REV_BIT, and REV_CONTACTOR := REV_BIT AND NOT FAULT_BIT AND NOT FWD_BIT. The NOT REV_BIT term in the forward rung (and vice versa) is the software interlock — even if both bits were somehow set, neither contactor would energise. In a real panel this software interlock is backed up by a mechanical interlock on the contactors and by the normally-closed auxiliary contacts in the power-circuit wiring, giving three independent layers of protection.

Welded-contactor fault detection with auxiliary feedback

A contactor whose main contacts weld shut is one of the most dangerous failures in a reversing starter: the PLC commands the coil off, but the motor keeps running, and if the operator then selects the opposite direction the interlock in software is no longer enough. This scenario teaches the standard guard — auxiliary-contact feedback.

Each contactor carries a normally-open auxiliary contact wired back to an input: FWD_AUX and REV_AUX. When the program de-energises a contactor coil, its auxiliary should drop within one scan. If the coil is commanded OFF but the auxiliary is still reading ON, the main contacts are stuck (welded or mechanically jammed). The program latches FAULT_BIT, lights FAULT_LAMP, and forces both contactors off until the fault is cleared. The E-stop input does the same: losing ESTOP (it is normally-closed, so TRUE is healthy) drops both contactors and latches the fault.

This is exactly the kind of diagnostic logic the CCST and most maintenance roles expect you to be able to read and write. You can build it and watch the fault latch fire in the live scenario — toggle a contactor's auxiliary out of step with its coil and the fault lamp comes on.

Frequently asked questions

What does a forward/reverse motor PLC ladder diagram look like?

It is two seal-in (latching) rungs — one for forward, one for reverse — joined by a cross-interlock. Each rung latches its contactor on a momentary push-button and holds it through a seal-in contact; a normally-closed contact of the opposite direction is wired into each rung so the two contactors can never be energised together. Stop and E-stop drop both. You can run a complete working version free in the browser on this page.

How do you write a forward/reverse motor control PLC program?

Use SET/RESET on an internal bit per direction: FWD_BIT is set by FWD_PB and reset by STOP, E-stop, a fault, or REV_PB; REV_BIT mirrors it. Then drive the contactors with the interlock — FWD_CONTACTOR = FWD_BIT AND NOT REV_BIT AND NOT FAULT, and REV_CONTACTOR = REV_BIT AND NOT FWD_BIT AND NOT FAULT. Resetting the running bit when the opposite button is pressed gives you safe stop-before-reverse behaviour.

Why must forward and reverse contactors be interlocked?

A reversing starter swaps two supply phases to change direction. If the forward and reverse contactors energise at the same time, those two swapped phases are shorted together phase-to-phase, which trips protection at best and causes an arc-flash at worst. The interlock — a normally-closed contact of each direction in the other rung — guarantees only one contactor can ever be in. Real panels add a mechanical interlock on top of the software one.

What is stop-before-reverse (anti-plugging) in motor control?

Stop-before-reverse means the motor must come to rest before it can run the other way, instead of being instantly reversed (plugged) while still spinning. In ladder logic you achieve it by making the reverse button reset the forward latch (and vice versa) rather than directly starting the opposite contactor — the motor de-energises, coasts down, and only a second press starts it in the new direction. This protects the coupling, gearbox, and contactors from the huge current and torque of a plugging reversal.

How does a PLC detect a welded (stuck) motor contactor?

With auxiliary-contact feedback. Each contactor has a spare contact wired back to a PLC input. When the program commands a contactor off, that feedback input should drop within a scan. If the coil is off but the feedback is still on, the main contacts are welded shut — the program latches a fault, lights the fault lamp, and forces both directions off. This scenario includes that FWD_AUX / REV_AUX fault logic so you can see the fault latch fire.

Ready to build this?

Sign up free — no credit card required. This scenario requires the Basic plan.

Sign up to play this scenario →

Already have an account? Log in