这个程序用三菱 PLC 的触点比较指令来写比较方便。

程序梯形图:

三菱 PLC | 十字路口红绿灯模拟控制_PLC

在线仿真效果如下:

三菱 PLC | 十字路口红绿灯模拟控制_触点_02

ST 代码:

M0 := (M0 AND NOT X1)  OR X0;
OUT_T(M0 AND NOT X1 AND NOT TS0, TC0, 160);

D1:=40;
D2:=60;
D3:=80;
D4:=120;
D5:=140;

IF M0 THEN
IF TN0 < D3 THEN
Y0 := TRUE;
Y2 := FALSE;
ELSIF TN0 >= D3 AND TN0 < D4 THEN
Y0 := FALSE;
Y1 := TRUE;
ELSIF TN0 >= D4 AND TN0 < D5 THEN
Y1 := M8013;
ELSIF TN0 >= D5 THEN
Y1 := FALSE;
Y2 := TRUE;
END_IF;

IF TN0 < D1 THEN
Y4 := TRUE;
Y6 := FALSE;
ELSIF TN0 >= D1 AND TN0 < D2 THEN
Y4 := M8013;
ELSIF TN0 >= D2 AND TN0 < D3 THEN
Y5 := TRUE;
Y4 := FALSE;
ELSIF TN0 >= D3 THEN
Y6 := TRUE;
Y5 := FALSE;
END_IF;

END_IF;