Skip to content

Benchmarks

dead bus / synchro-check close permissive (graphical LD)

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

Authored for this suite, modeling a breaker close permissive gated by dead-bus or synchro-check

What is proved

From benchmarks/power_substation/g_dead_bus_close_check/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 !breaker_close || !bus_live || sync_check_ok A breaker may close onto a live bus only after synchro-check passes; closing onto a dead bus needs no check.

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 1b4b53688a74
bomb.xml ladder program, PLCopen XML 3.0 KB 7c1dd8485528
clean.xml ladder program, PLCopen XML 2.5 KB 554438481289
props.yaml property file 0.3 KB de3b3aeaae7d

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_dead_bus_close_check_bomb
VAR_INPUT
    close_request : BOOL;
    bus_live : BOOL;
    sync_check_ok : BOOL;
    maint : BOOL;
END_VAR

VAR_OUTPUT
    breaker_close : BOOL;
END_VAR


breaker_close := ((close_request AND NOT bus_live) OR (close_request AND sync_check_ok) OR (close_request AND maint));

END_PROGRAM
PROGRAM g_dead_bus_close_check_clean
VAR_INPUT
    close_request : BOOL;
    bus_live : BOOL;
    sync_check_ok : BOOL;
    maint : BOOL;
END_VAR

VAR_OUTPUT
    breaker_close : BOOL;
END_VAR


breaker_close := ((close_request AND NOT bus_live) OR (close_request AND sync_check_ok));

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_dead_bus_close_check__bomb (props.yaml, expected VIOLATION): v8.4 VIOLATION
  • g_dead_bus_close_check__clean (props.yaml, expected SAFE): v8.4 SAFE