(* CONVEYOR SHUTTLE CONTROL - Structured Text *) (* ACC PLC Simulator - Conveyor Scene *) (* X1 Start PB (N.O.) X2 Stop PB (N.C.) X3 Left sensor X4 Right sensor *) (* Y1 Conveyor run Y2 Reverse *) VAR State : INT := 0; (* 0 = Idle, 1 = Forward, 2 = Reverse *) StartLast : BOOL := FALSE; (* Start button state, previous scan *) StartPulse : BOOL := FALSE; (* One-shot on the Start press *) END_VAR (* One-shot the Start button *) StartPulse := X1 AND NOT StartLast; StartLast := X1; (* Stop has priority over everything *) IF NOT X2 THEN State := 0; ELSIF StartPulse AND State = 0 THEN State := 1; END_IF; (* State transitions *) CASE State OF 1: (* Forward - travelling right *) IF X4 THEN State := 2; END_IF; 2: (* Reverse - travelling left *) IF X3 THEN State := 0; END_IF; ELSE State := 0; END_CASE; (* Outputs driven from state *) Y1 := (State = 1) OR (State = 2); Y2 := (State = 2);