GRAFCET — Car Park Entry Barrier
Ticket or season card, then raise, hold and lower: two alternative divergences and the alternative convergence between them resolve the barrier's two real arguments — which credential opened it, and what stops it descending onto a vehicle still standing on the safety loop.
Make it your own.
title "Car park entry barrier — ticket, card and safety loop"
step 1 "Barrier down, entry loop clear" initial
N "Entry lamp red"
step 2 "Vehicle on arming loop"
N "Ticket printer ready"
P "Presence chime"
step 3 "Issue ticket"
N "Print and present ticket"
step 4 "Validate season card"
N "Reader poll"
step 5 "Raise barrier"
N "Barrier motor up"
S "Entry lamp green"
step 6 "Hold barrier up"
L 20s "Hold timer"
step 7 "Lower barrier"
N "Barrier motor down"
R "Entry lamp green"
step 8 "Descent inhibited, loop occupied"
N "Barrier motor stop"
D 2s "Obstruction alarm"
transition t1 : "arming_loop_occupied"
transition t2 : "ticket_button . /card_presented"
transition t3 : "card_presented"
transition t4 : "ticket_taken"
transition t5 : "card_valid . space_available"
transition t6 : "barrier_up_limit"
transition t7 : "safety_loop_clear + hold_elapsed"
transition t8 : "safety_loop_occupied"
transition t9 : "barrier_down_limit . arming_loop_clear"
transition t10 : "safety_loop_clear"
1 -> t1 -> 2
# Ticket or card — two branches that rejoin on the raise step, so the
# chart carries an alternative divergence AND its convergence.
alternative 2 -> t2, t3
t2 -> 3
t3 -> 4
3 -> t4 -> 5
4 -> t5 -> 5
5 -> t6 -> 6 -> t7 -> 7
# Down, unless the safety loop is still occupied.
alternative 7 -> t8, t9
t8 -> 8
t9 -> 1
8 -> t10 -> 7