MCR (Master Control Reset) fences a group of rungs into a zone: while the MCR rung is true the zone executes normally, and while it is false every rung inside is scanned with a false rung condition — de-energizing all non-retentive outputs at once.
Join 1900+ learners practicing PLC programming
How it works
An MCR zone is built from two MCR instructions: a conditioned start rung (the zone’s enable) and an unconditional end rung that closes the fence. Enabled, the zone is invisible — every rung inside behaves exactly as if the MCR were not there. Disabled, the controller still scans every rung in the zone but forces each rung’s condition false before executing its outputs. That distinction — scanned-as-false, not skipped — is what separates MCR from a false JSR, and it drives every consequence worth knowing.
Because the rungs execute with a false condition, each instruction inside does whatever it does on a false rung. OTE outputs are written 0 — the whole zone’s non-retentive outputs drop on the first disabled scan, which is the instruction’s reason for existing. OTL and OTU do nothing on false rungs, so latched bits keep their state through the disabled window. TON timers reset (that is normal TON false-rung behaviour). RTO retentive timers hold their accumulated value. Counters keep their ACC. And the genuinely nasty one: a TOF timer treats the forced-false rung exactly like a real de-energization — it starts timing, and its DN bit stays true until the preset expires. A "the zone is off, why is this output still on for three seconds" mystery is almost always a TOF inside an MCR zone.
ONS/OSR instructions inside the zone deserve a thought too: the forced-false scans update their edge memory, so on re-enable, conditions that stayed true through the outage present fresh rising edges — one-shots fire on the first enabled scan. Sequences that were mid-step when the zone dropped can lurch on re-entry unless the enable logic re-homes them.
Two rules are non-negotiable. First: MCR is a program-flow convenience, not a safety function — the name collides with the hardwired Master Control Relay that drops real power to outputs, and the PLC instruction is not a substitute for it or for a safety relay/controller. Emergency stops belong in hardware (and safety-rated logic), full stop. Second: zones must be properly closed by their unconditional end MCR and must not nest or overlap — a missing end rung silently extends the zone to places the author never intended. Siemens legacy STL had the same construct (MCRA/MCRB brackets); TIA Portal deprecates it for S7-1200/1500 in favour of plain conditional logic, and IEC 61131-3 has no direct equivalent — group-disable is done with enable bits or by structuring the code.
Across vendors
| Platform | Name / syntax | Notes |
|---|---|---|
| Allen-Bradley (Studio 5000 / RSLogix) | MCR | Paired MCR output instructions delimit the zone; the end MCR must be unconditional. Zones must not nest or overlap. |
| Siemens (legacy STL / S7-300/400) | MCRA/MCRB, MCR( )MCR | Master Control Relay brackets in STL. Deprecated in TIA Portal for S7-1200/1500 — Siemens recommends restructuring with normal enable logic. |
| IEC 61131-3 (CODESYS, OpenPLC) | No direct equivalent | Group-disable is expressed with an enable condition ANDed into the relevant networks, or by conditional execution of a POU — retention semantics are then explicit in your code. |
| Mitsubishi (GX Works) | MC / MCR | MC N0 M0 opens master-control nest N0 controlled by M0; the MCR N0 instruction closes it. Unlike AB, Mitsubishi nests (N0–N7) are explicitly numbered and may nest in order. |
Mitsubishi’s MCR mnemonic closes a zone that its MC instruction opens — a naming collision with Allen-Bradley’s MCR that regularly confuses people moving between the platforms. Always ask "whose MCR?" first.
In practice
| Manual_Mode Guards_OK MCR | |----] [-----------] [----------------------------(MCR)--| | Jog_Fwd_PB Conveyor_Fwd | |-----] [---------------------------------------( )------| | Jog_Rev_PB Conveyor_Rev | |-----] [---------------------------------------( )------| | MCR | |-------------------------------------------------(MCR)--|
All the jog controls live inside one zone enabled only in manual mode with guards healthy. Leave manual mode mid-jog and every OTE in the zone is written false on the next scan — no per-rung mode contacts needed, and no way to forget one. The unconditional MCR on the last rung closes the zone; everything after it is normal logic again.
| Zone_Enable MCR | |----] [------------------------------------------(MCR)--| | Fan_Request TOF Purge_Timer | |-----] [------------------------------[ PRE 5000 ms ]--| | Purge_Timer.DN Purge_Fan | |-----] [--------------------------------------( )-------| | MCR | |-------------------------------------------------(MCR)--|
The design intent: the purge fan runs 5 seconds beyond the fan request (a classic TOF use). Now disable the zone while the fan is running. The TOF sees its rung go false — forced by the MCR — and starts its off-delay: DN stays true for another 5 seconds. But wait: the Purge_Fan OTE is also inside the zone, so it is forced off immediately. Move that OTE below the zone (a plausible refactor) and the fan genuinely runs on for 5 seconds after the zone is "off".
The lesson generalizes: an MCR zone forces rung conditions false, and every instruction responds with its own false-rung behaviour. Audit TOFs, retentive timers and latches inside any zone you add.
Gotchas
Using the MCR instruction as a safety function
The PLC MCR is a software convenience that shares a name with the hardwired master control relay. It does not remove power, it does not meet any safety category, and a controller fault bypasses it entirely. E-stops and guard circuits belong in safety-rated hardware/logic.
Forgetting the unconditional end MCR
The zone extends until the next MCR instruction — omit it (or delete it during an edit) and rungs far below silently join the zone. Studio 5000 will flag unmatched zones, but only if you let the verify finish and read it.
Assuming a disabled zone resets everything
It de-energizes OTEs and resets TONs — but OTL latches, RTO accumulators and counter ACCs all retain. If "zone off" must mean "zone reset", write the reset logic explicitly on the disable edge.
TOF timers inside zones
Disabling the zone starts every TOF in it (forced-false rung = start of off-delay) — DN bits inside the zone stay true for their presets. Outputs driven from those DN bits outside the zone stay on after the zone is disabled.
Nesting or overlapping zones
Allen-Bradley zones must not nest or overlap — the controller pairs each MCR with the nearest end, and overlapping fences produce zones the editor never shows you. (Mitsubishi MC/MCR nests are numbered and may nest — different platform, different rules.)
Drop the instruction on a rung in the browser simulator, toggle the inputs, and watch the rung state, accumulator values and outputs update scan by scan.
Questions
MCR stands for Master Control Reset. It is a zone-control instruction: two MCR instructions fence a group of rungs, the first conditioned (the zone enable) and the last unconditional. While the enable is false, every rung inside the zone is scanned with a forced-false rung condition, so all non-retentive outputs (OTEs) in the zone de-energize.
Each instruction does what it normally does on a false rung. TON timers reset. RTO retentive timers keep their accumulated value. Counters keep their ACC. OTL/OTU latches hold their state. TOF timers actually start timing — the forced-false rung looks like a real de-energization — so their DN bits stay true for the preset duration. The zone is scanned as false, not skipped.
A false MCR zone is still scanned — rung conditions are forced false, so OTEs are actively written off. A false JSR simply never scans its routine — every output inside freezes at its last value. If you want outputs to drop, MCR (or in-rung conditions) does it; a conditioned JSR quietly does the opposite.
No — and the name collision is dangerous. The hardwired master control relay physically removes power from output circuits and is part of the machine’s safety system. The MCR instruction only manipulates rung conditions in software. Rockwell’s own documentation is explicit that the instruction is not a substitute for a hardwired MCR or any safety function.