sectional door with photo-eye reversal¶
| suite id | g_door_reversal |
| domain | building_automation |
| language | LD-graphical |
| difficulty | easy |
| validation status | validated |
| origin | authored |
| license | CC-BY-4.0 |
Authored from the reversal requirement for power-operated doors in EN 13241: an obstruction sends the door back to open rather than pausing it
What is proved¶
From benchmarks/building_automation/g_door_reversal/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 |
!(MoveDown && Beam) |
The door never drives down while the photo-eye beam is broken. |
Variants¶
| file | expected verdict | violates | method |
|---|---|---|---|
program.xml |
SAFE | none | cross-tool-consensus |
momentary.xml |
SAFE | none | fault-injection |
Files¶
| file | what it is | size | sha256 |
|---|---|---|---|
benchmark.yml |
benchmark metadata | 1.2 KB | d7332b376e5f |
momentary.xml |
ladder program, PLCopen XML | 3.6 KB | 44a7408425fd |
program.xml |
ladder program, PLCopen XML | 3.8 KB | f6673a537b31 |
props.yaml |
property file | 0.2 KB | 61809139c726 |
reversal_check.props.yaml |
property file | 0.5 KB | db727e6ab299 |
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_door_reversal_momentary
VAR_INPUT
CloseCmd : BOOL;
OpenCmd : BOOL;
Beam : BOOL;
TopLimit : BOOL;
END_VAR
VAR_OUTPUT
Reversing : BOOL;
MoveDown : BOOL;
MoveUp : BOOL;
END_VAR
Reversing := (Beam AND NOT TopLimit);
MoveDown := ((CloseCmd AND NOT Beam) AND NOT Reversing);
MoveUp := (OpenCmd OR Reversing);
END_PROGRAM
PROGRAM g_door_reversal
VAR_INPUT
CloseCmd : BOOL;
OpenCmd : BOOL;
Beam : BOOL;
TopLimit : BOOL;
END_VAR
VAR_OUTPUT
Reversing : BOOL;
MoveDown : BOOL;
MoveUp : BOOL;
END_VAR
Reversing := ((Reversing OR Beam) AND NOT TopLimit);
MoveDown := ((CloseCmd AND NOT Beam) AND NOT Reversing);
MoveUp := (OpenCmd OR Reversing);
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.
door_reversal_latched(reversal_check.props.yaml, expectedVIOLATION): masterVIOLATIONdoor_reversal_momentary(reversal_check.props.yaml, expectedSAFE): masterSAFEg_door_reversal__momentary(props.yaml, expectedSAFE): v8.4SAFEg_door_reversal__program(props.yaml, expectedSAFE): v8.4SAFE