FA-92021 / PLC ladder logic scan cycles / Open access
Motor starter drops out when the start button is released · case 01
The motor only runs while start is held, like a jog circuit.
ROOT CAUSE
The seal-in branch around the start button is missing.
THE FAILURE
The seal-in branch around the start button is missing.
Unsuccessful approach: Breaking the seal-in on a reset press still drops a healthy running motor.
Case contract
Three-wire motor starter rung evaluated per scan. Each scan is a dict with optional keys start (pushbutton, default false), stop_nc (normally-closed stop contact: true means not pressed, default true), ol_nc (normally-closed overload contact, default true), reset (default false) and power (default true). An open overload contact latches a trip (retentive); reset clears it only on a scan where the overload contact is closed. The motor runs on start or its own seal-in, and only while stop_nc is closed and no trip is latched; stop and trip dominate start. A power-loss scan drops the motor and requires the start button to be seen released before it can start again. Return [motor, tripped] per scan.
Why this case matters
Ladder programs are executed as repeated scans; each defect here changes what a rung, timer, counter or data-table instruction reports on a particular scan, which is how commissioning and field faults are actually observed.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(scans):
motor = False
tripped = False
need_release = False
out = []
for s in scans:
if not s.get('power', True):
motor = False
need_release = True
out.append([False, tripped])
continue
start = s.get('start', False)
if not start:
need_release = False
if not s.get('ol_nc', True):
tripped = True
elif s.get('reset', False):
tripped = False
run_cmd = start and not need_release
motor = run_cmd and s.get('stop_nc', True) and not tripped
out.append([motor, tripped])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['regression: reset while running',
[[{'start': True}, {}, {'reset': True}, {}]],
[[True, False], [True, False], [True, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]],
['control: start after overload recovers',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: reset while running',
[[{'start': True}, {}, {'reset': True}, {}]],
[[True, False], [True, False], [True, False], [True, False]]],
['regression: scenario 29',
[[{},
{'stop_nc': True},
{'start': True, 'ol_nc': True, 'power': False},
{'start': True},
{'start': False},
{'start': True, 'ol_nc': False},
{},
{'start': False, 'ol_nc': True},
{'start': True},
{'stop_nc': True},
{'stop_nc': False},
{'stop_nc': False, 'ol_nc': True},
{'start': True, 'reset': True},
{'stop_nc': True, 'ol_nc': True, 'reset': True}]],
[[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[True, False],
[True, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 1',
[[{'stop_nc': True},
{'start': True},
{'stop_nc': True},
{'reset': True},
{'start': True, 'stop_nc': True, 'ol_nc': False, 'power': False},
{'stop_nc': False},
{'start': True},
{'start': True, 'stop_nc': False},
{'start': True, 'stop_nc': True, 'reset': True}]],
[[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False],
[True, False],
[False, False],
[True, False]]],
['regression: scenario 9',
[[{'start': True, 'ol_nc': True, 'reset': True},
{'power': False},
{},
{'start': True, 'stop_nc': True, 'ol_nc': True, 'reset': True},
{'ol_nc': True},
{},
{'reset': True}]],
[[True, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[True, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 3',
[[{'stop_nc': True},
{'stop_nc': False},
{'stop_nc': False},
{'start': True},
{'start': True},
{'start': False},
{'stop_nc': False, 'reset': True},
{'start': False},
{'ol_nc': True, 'reset': True},
{},
{'start': False}]],
[[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False]]],
['regression: scenario 14',
[[{'start': False, 'ol_nc': True},
{'stop_nc': False},
{},
{'start': True},
{'stop_nc': True},
{'start': True},
{},
{'ol_nc': True, 'reset': True},
{'ol_nc': False},
{'stop_nc': False, 'ol_nc': False, 'reset': True},
{'power': False}]],
[[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[False, True],
[False, True],
[False, True]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 4',
[[{'start': True, 'stop_nc': True, 'reset': True},
{'start': True, 'stop_nc': True},
{'power': False},
{},
{'start': False, 'stop_nc': True, 'ol_nc': True},
{'reset': True},
{'ol_nc': True},
{'start': True, 'stop_nc': False, 'ol_nc': True},
{'start': True},
{'ol_nc': True},
{'start': True},
{'start': True, 'stop_nc': False},
{'stop_nc': False}]],
[[True, False],
[True, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False]]],
['regression: scenario 14',
[[{'start': True, 'stop_nc': True},
{'start': True},
{'reset': True},
{},
{'start': True},
{'stop_nc': True},
{'stop_nc': False, 'ol_nc': False, 'reset': True},
{'stop_nc': False},
{'reset': True, 'power': False},
{'start': False},
{'start': False, 'stop_nc': True, 'reset': True}]],
[[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[False, True],
[False, True],
[False, True],
[False, True],
[False, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: start seal stop | [[True, False], [False, False], [False, False], [False, False], [True, False]] | [[True, False], [True, False], [False, False], [False, False], [True, False]] | Failed |
| regression: reset while running | [[True, False], [False, False], [False, False], [False, False]] | [[True, False], [True, False], [True, False], [True, False]] | Failed |
| control: power loss with start held | [[True, False], [False, False], [False, False], [False, False], [True, False]] | [[True, False], [False, False], [False, False], [False, False], [True, False]] | Passed |
| control: overload trip and reset | [[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]] | [[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]] | Passed |
| control: reset while overload open | [[True, False], [False, True], [False, True]] | [[True, False], [False, True], [False, True]] | Passed |
| control: stop and start together | [[False, False], [True, False], [False, False]] | [[False, False], [True, False], [False, False]] | Passed |
| control: trip across power loss | [[True, False], [False, True], [False, True], [False, True], [False, True]] | [[True, False], [False, True], [False, True], [False, True], [False, True]] | Passed |
| control: start after overload recovers | [[True, False], [False, True], [False, True], [False, True], [False, True]] | [[True, False], [False, True], [False, True], [False, True], [False, True]] | Passed |
SHA-256 / 458fbec6dfb9ec6a01aa7e4465b4624dbf5f17724a4f241d1a6a255d95d62660
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(scans):
motor = False
tripped = False
need_release = False
out = []
for s in scans:
if not s.get('power', True):
motor = False
need_release = True
out.append([False, tripped])
continue
start = s.get('start', False)
if not start:
need_release = False
if not s.get('ol_nc', True):
tripped = True
elif s.get('reset', False):
tripped = False
run_cmd = (start and not need_release) or (motor and not s.get('reset', False))
motor = run_cmd and s.get('stop_nc', True) and not tripped
out.append([motor, tripped])
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['regression: reset while running',
[[{'start': True}, {}, {'reset': True}, {}]],
[[True, False], [True, False], [True, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]],
['control: start after overload recovers',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: reset while running',
[[{'start': True}, {}, {'reset': True}, {}]],
[[True, False], [True, False], [True, False], [True, False]]],
['regression: scenario 29',
[[{},
{'stop_nc': True},
{'start': True, 'ol_nc': True, 'power': False},
{'start': True},
{'start': False},
{'start': True, 'ol_nc': False},
{},
{'start': False, 'ol_nc': True},
{'start': True},
{'stop_nc': True},
{'stop_nc': False},
{'stop_nc': False, 'ol_nc': True},
{'start': True, 'reset': True},
{'stop_nc': True, 'ol_nc': True, 'reset': True}]],
[[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[False, True],
[True, False],
[True, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 1',
[[{'stop_nc': True},
{'start': True},
{'stop_nc': True},
{'reset': True},
{'start': True, 'stop_nc': True, 'ol_nc': False, 'power': False},
{'stop_nc': False},
{'start': True},
{'start': True, 'stop_nc': False},
{'start': True, 'stop_nc': True, 'reset': True}]],
[[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False],
[True, False],
[False, False],
[True, False]]],
['regression: scenario 9',
[[{'start': True, 'ol_nc': True, 'reset': True},
{'power': False},
{},
{'start': True, 'stop_nc': True, 'ol_nc': True, 'reset': True},
{'ol_nc': True},
{},
{'reset': True}]],
[[True, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[True, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 3',
[[{'stop_nc': True},
{'stop_nc': False},
{'stop_nc': False},
{'start': True},
{'start': True},
{'start': False},
{'stop_nc': False, 'reset': True},
{'start': False},
{'ol_nc': True, 'reset': True},
{},
{'start': False}]],
[[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False]]],
['regression: scenario 14',
[[{'start': False, 'ol_nc': True},
{'stop_nc': False},
{},
{'start': True},
{'stop_nc': True},
{'start': True},
{},
{'ol_nc': True, 'reset': True},
{'ol_nc': False},
{'stop_nc': False, 'ol_nc': False, 'reset': True},
{'power': False}]],
[[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[False, True],
[False, True],
[False, True]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]],
[['regression: scenario 4',
[[{'start': True, 'stop_nc': True, 'reset': True},
{'start': True, 'stop_nc': True},
{'power': False},
{},
{'start': False, 'stop_nc': True, 'ol_nc': True},
{'reset': True},
{'ol_nc': True},
{'start': True, 'stop_nc': False, 'ol_nc': True},
{'start': True},
{'ol_nc': True},
{'start': True},
{'start': True, 'stop_nc': False},
{'stop_nc': False}]],
[[True, False],
[True, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[False, False],
[True, False],
[True, False],
[True, False],
[False, False],
[False, False]]],
['regression: scenario 14',
[[{'start': True, 'stop_nc': True},
{'start': True},
{'reset': True},
{},
{'start': True},
{'stop_nc': True},
{'stop_nc': False, 'ol_nc': False, 'reset': True},
{'stop_nc': False},
{'reset': True, 'power': False},
{'start': False},
{'start': False, 'stop_nc': True, 'reset': True}]],
[[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[True, False],
[False, True],
[False, True],
[False, True],
[False, True],
[False, False]]],
['regression: start seal stop',
[[{'start': True}, {}, {'stop_nc': False}, {}, {'start': True}]],
[[True, False], [True, False], [False, False], [False, False], [True, False]]],
['control: power loss with start held',
[[{'start': True}, {'power': False}, {'start': True}, {}, {'start': True}]],
[[True, False], [False, False], [False, False], [False, False], [True, False]]],
['control: overload trip and reset',
[[{'start': True}, {'ol_nc': False}, {}, {'start': True}, {'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]]],
['control: reset while overload open',
[[{'start': True}, {'ol_nc': False, 'reset': True}, {'start': True}]],
[[True, False], [False, True], [False, True]]],
['control: stop and start together',
[[{'start': True, 'stop_nc': False}, {'start': True}, {'start': True, 'stop_nc': False}]],
[[False, False], [True, False], [False, False]]],
['control: trip across power loss',
[[{'start': True}, {'ol_nc': False}, {'power': False}, {}, {'start': True}]],
[[True, False], [False, True], [False, True], [False, True], [False, True]]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: start seal stop | [[True, False], [True, False], [False, False], [False, False], [True, False]] | [[True, False], [True, False], [False, False], [False, False], [True, False]] | Passed |
| regression: reset while running | [[True, False], [True, False], [False, False], [False, False]] | [[True, False], [True, False], [True, False], [True, False]] | Failed |
| control: power loss with start held | [[True, False], [False, False], [False, False], [False, False], [True, False]] | [[True, False], [False, False], [False, False], [False, False], [True, False]] | Passed |
| control: overload trip and reset | [[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]] | [[True, False], [False, True], [False, True], [False, True], [False, False], [True, False]] | Passed |
| control: reset while overload open | [[True, False], [False, True], [False, True]] | [[True, False], [False, True], [False, True]] | Passed |
| control: stop and start together | [[False, False], [True, False], [False, False]] | [[False, False], [True, False], [False, False]] | Passed |
| control: trip across power loss | [[True, False], [False, True], [False, True], [False, True], [False, True]] | [[True, False], [False, True], [False, True], [False, True], [False, True]] | Passed |
| control: start after overload recovers | [[True, False], [False, True], [False, True], [False, True], [False, True]] | [[True, False], [False, True], [False, True], [False, True], [False, True]] | Passed |
SHA-256 / 4193417e0084e020a7be016c89fb4dbab2b0d364c9f4ca6a569face737164e9d
HELD IN THE MEMBER ARCHIVE
The verified repair and its recorded checks are member-only.
This mechanism has 8 recorded checks per implementation. The open-access tier publishes the failure and the unsuccessful fix; the repaired source that passes every check, and the observations that prove it, are available to members.
Every case sharing this mechanism uses the same contract and the same repair, so this one record is held back for all of them.
Member access is invitation-based. Sign in with your invited account to inspect the repair.
Sign in to the archive ↗Verification & scope
A deterministic bounded teaching model of one PLC instruction or rung pattern evaluated scan by scan. The stated contract is a stipulated toy convention, not a claim of conformance to any vendor controller or IEC 61131-3 runtime. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:51:41.792715+00:00.
Case digest / 43db3938e83e6f448c9c6e310ab7c94fd511bfb295568d7c386a43949a9ee2c1