交通灯模拟plc程序控制(s7-1200 博图v15.1 带讲解ppt ) 起动后,南北红灯亮并维持25s。 在南北红灯亮的同时,东西绿灯也亮,1s后,东西车灯即甲亮。 到20s时,东西绿灯闪亮,3s后熄灭,在东西绿灯熄灭后东西黄灯亮,同时甲灭。 黄灯亮2s后灭东西红灯亮。 与此同时,南北红灯灭,南北绿灯亮。 1s后,南北车灯即乙亮。 南北绿灯亮了25s后闪亮,3s后熄灭,同时乙灭,黄灯亮2s后熄灭,南北红灯亮,东西绿灯亮,循环。
最近做了一个交通灯模拟的PLC程序控制项目,基于S7 - 1200和博图V15.1,还做了个带讲解的PPT,今天就在这跟大家分享分享。
整体逻辑梳理
整个交通灯的控制逻辑其实就是按照一定的时间顺序和规则,循环切换各个方向的信号灯状态。启动后,南北红灯先亮25秒,同时东西绿灯亮起,1秒后东西方向的车灯甲亮。到20秒时,东西绿灯开始闪亮,3秒后熄灭,接着黄灯亮2秒,之后东西红灯亮,同时南北红灯灭,南北绿灯亮。南北绿灯亮1秒后,南北方向的车灯乙亮。南北绿灯亮25秒后闪亮,3秒后熄灭,乙也跟着灭,然后黄灯亮2秒,最后南北红灯亮,又回到东西绿灯亮的状态,如此循环。
PLC程序实现
在博图V15.1中,我们先创建一个新项目,选择S7 - 1200系列的PLC。下面看看关键部分的代码实现(这里以LAD语言为例):
定义变量
我们需要定义一些变量来表示各个信号灯以及时间计数等。
// 定义南北方向信号灯变量 Bool SouthNorthRed; Bool SouthNorthGreen; Bool SouthNorthYellow; Bool SouthNorthCarLightY; // 定义东西方向信号灯变量 Bool EastWestRed; Bool EastWestGreen; Bool EastWestYellow; Bool EastWestCarLightX; // 时间计数变量 Int TimerValue;这里定义了南北和东西方向的红、绿、黄灯以及对应方向的车灯变量,还有一个时间计数变量TimerValue。
主程序逻辑
// 启动程序 If StartButton Then // 南北红灯亮 SouthNorthRed := True; // 东西绿灯亮 EastWestGreen := True; // 开启定时器 TimerValue := 0; TimerEnable := True; End_If; // 定时器逻辑 If TimerEnable Then // 每1秒定时器值加1 If Rising_Edge(Clock1s) Then TimerValue := TimerValue + 1; End_If; End_If;启动按钮按下后,南北红灯和东西绿灯亮起,同时开启定时器,每1秒TimerValue加1 。
// 东西方向绿灯逻辑 If TimerValue >= 0 And TimerValue < 20 Then EastWestCarLightX := True; End_If; If TimerValue >= 20 And TimerValue < 23 Then // 绿灯闪烁逻辑,假设闪烁频率为1Hz If Rising_Edge(Clock1s) Then EastWestGreen := NOT EastWestGreen; End_If; EastWestCarLightX := EastWestGreen; End_If; If TimerValue >= 23 And TimerValue < 25 Then EastWestGreen := False; EastWestYellow := True; EastWestCarLightX := False; End_If; If TimerValue >= 25 Then EastWestRed := True; EastWestYellow := False; EastWestCarLightX := False; SouthNorthRed := False; SouthNorthGreen := True; TimerValue := 0; End_If;这段代码实现了东西方向信号灯和车灯的逻辑控制。在0 - 20秒,东西绿灯常亮且车灯甲亮;20 - 23秒,绿灯闪烁且车灯跟着闪烁;23 - 25秒,绿灯灭黄灯亮,车灯灭;25秒后,东西红灯亮,南北红灯灭,南北绿灯亮,同时重置定时器。
// 南北方向绿灯逻辑 If TimerValue >= 0 And TimerValue < 25 Then SouthNorthCarLightY := True; End_If; If TimerValue >= 25 And TimerValue < 28 Then // 绿灯闪烁逻辑,假设闪烁频率为1Hz If Rising_Edge(Clock1s) Then SouthNorthGreen := NOT SouthNorthGreen; End_If; SouthNorthCarLightY := SouthNorthGreen; End_If; If TimerValue >= 28 And TimerValue < 30 Then SouthNorthGreen := False; SouthNorthYellow := True; SouthNorthCarLightY := False; End_If; If TimerValue >= 30 Then SouthNorthRed := True; SouthNorthYellow := False; SouthNorthCarLightY := False; EastWestRed := False; EastWestGreen := True; TimerValue := 0; End_If;这部分是南北方向信号灯和车灯的逻辑,和东西方向类似,按照设定的时间进行状态切换。
总结
通过这样的PLC程序编写,我们就实现了交通灯的模拟控制。这个项目对于理解PLC的时间控制、逻辑判断等基本功能很有帮助。配合PPT讲解,无论是学习PLC编程的新手,还是想要深入了解交通灯控制逻辑的朋友,都能从中获取不少知识。大家要是有兴趣可以自己动手在博图V15.1里实践一下,说不定还能发现一些优化的思路呢。