Skip to content

Benchmarks

trip lockout relay (86) reclose block (graphical LD)

suite id g_trip_lockout_86
domain power_substation
language LD-graphical
difficulty medium
validation status validated
origin authored
license CC-BY-4.0

Authored for this suite, modeling a latching 86 lockout relay that blocks autoreclose until manual reset

What is proved

From benchmarks/power_substation/g_trip_lockout_86/props.yaml. What each kind claims, and what it becomes on either route, is on The properties we prove.

id kind claim requirement
P1 invariant !(lockout && reclose) The 86 lockout relay must block reclose until an explicit manual reset clears it; lockout and reclose must never be true together.

Variants

file expected verdict violates method
clean.xml SAFE none expert
bomb.xml VIOLATION P1 fault-injection

Files

file what it is size sha256
benchmark.yml benchmark metadata 1.1 KB f904b56c1ee4
bomb.xml ladder program, PLCopen XML 3.7 KB 65b405c586e1
clean.xml ladder program, PLCopen XML 3.2 KB c0d0622a47ce
props.yaml property file 0.3 KB 31decd9274a8

Structured text, derived

Read off the ladder graph by runner/ld_to_st.py: every rung's contacts and coils rewritten as IEC 61131-3 assignments, in the same series/parallel logic the PLCopen XML encodes. This is a reading aid, not a second source of expected verdicts; ESBMC verifies the ladder program shown above, never this rendering.

PROGRAM g_trip_lockout_86_bomb
VAR_INPUT
    protection_trip : BOOL;
    manual_reset : BOOL;
    reclose_request : BOOL;
    maint : BOOL;
END_VAR

VAR_OUTPUT
    lockout : BOOL;
    reclose : BOOL;
END_VAR


lockout := (protection_trip OR (lockout AND NOT manual_reset));
reclose := (((reclose_request AND NOT lockout) AND NOT protection_trip) OR (reclose_request AND maint));

END_PROGRAM
PROGRAM g_trip_lockout_86_clean
VAR_INPUT
    protection_trip : BOOL;
    manual_reset : BOOL;
    reclose_request : BOOL;
    maint : BOOL;
END_VAR

VAR_OUTPUT
    lockout : BOOL;
    reclose : BOOL;
END_VAR


lockout := (protection_trip OR (lockout AND NOT manual_reset));
reclose := ((reclose_request AND NOT lockout) AND NOT protection_trip);

END_PROGRAM

Recorded runs

A task can carry two routes. ld is ESBMC's ladder front end reading the program directly. via C is the same solver reached through Beremiz and MatIEC, which is the only route that reaches ST, IL, FBD and SFC; see How ESBMC-PLC works.

  • g_trip_lockout_86__bomb (props.yaml, expected VIOLATION): v8.4 VIOLATION
  • g_trip_lockout_86__clean (props.yaml, expected SAFE): v8.4 SAFE