时器分别控制该方向黄灯闪烁的亮、灭时间,根据道路人车流量多少,分别设置各信号灯亮灭时间的长短,通过6个定时器依次交替工作,就可实现各方向交通信号灯的顺序工作。本文所设计的软件由一个主程序和四个子程序(时钟初始化子程序,晚间时段交通灯控制子程序,正常时段交通灯控制子程序和高峰时段交通灯控制子程序)组成。主程序主要任务包括:读取两个开关状态,根据开关的不同状态做出相应的处理,当开关SB0闭合时则对时钟进行初始化,反之则不对时钟进行初始化;当开关SB1闭合时,则读取时钟值,并做处理,根据处理后的时钟值的大小判定当前时间是属于哪个时间段,并调用相应的交通灯控制子程序,反之,则停止程序的运行主程序流程图如图5所示。晚间时段的控制规律为:两个方向的四个黄灯均按亮0.4秒灭0.6秒的规律闪烁,其余的交通灯全灭程序中将用到两个定时器T37和T38,各定时器的功能如表3所示。正常时段的控制方案结构图如图6所示,程序中将用到8个定时T37-T44,各定时器的功能如表4所示。高峰时段的控制方案结构图如图7所示,程序中将用到8个定时T37-T44,各定时器的功能如表5所示。
该程序实现了信号由东西左转、东西直行、南北直行依次循环变化。其优势思路简单,容易理解,对时钟的校正以及各时段的起始时间和终止时间的修改方便。如路口要求在晚上10:00以后实行各方向黄色信号灯闪烁功能,只需要将实时采集PLC的时钟信号作为一个子程序的跳转条件,再增加一段闪光程序即可。如果需要将几个路口集中到一台PLC控制,根据实际需要的I/O点数,硬件上再增加相应
11
的数字量输出模板即可。需要指出的是,用PLC实现城市道路关通信号控制,最好几个路口共用一套PLC,这样可以大大降低工程成本。
表3 晚间时段各定时器一个循环中的功能明细表 定时器 t0 t1 T2 T37
定时0.4秒 开始定时,黄灯亮 定时到,输出ON且保持;黄灯灭 开始下一次循环的定时
T38 定时1秒
开始定时 继续定时 定时到,输出ON,随即复位开始下一次循环的定时,黄灯亮。
表4 正常时段各定时器一个循环中的功能明细表 定时器
t0 t1 t2 t3 t4 t5 t6
T37
定时10秒 开始定时,南北转弯灯、南北红灯、东西红灯亮。 定时到,输出ON且保持;南北转弯灯灭,南北绿灯亮,东西红灯继续亮。 ON ON ON ON 开始下一个循环定时
T38
定时40秒 开始定时 继续定时 定时到,输出ON且保持;南北绿灯灭,南北黄灯闪烁,东西红灯继续亮。ON ON ON 开始下一个循环定时
12
T39
定时45秒 开始定时 继续定时 继续定时 定时到,输出ON且保持;南北黄灯灭,东西转弯灯、南北红灯亮,东西红灯继续亮。 ON ON 开始下一个循环定时
T40
定时55秒 开始定时 继续定时 继续定时 继续定时 定时到,输出ON
且保持;东西转弯、东西红灯灭,东西绿灯亮,南北红灯继续亮。 ON 开
始下一个循环定时 T41
定时85秒 开始定时 继续定时 继续定时 继续定时 继续定时 定时到,输出ON且保持;东西绿灯灭,东西黄灯闪烁,南北红灯继续亮。 开始下一个循环定时
T42
定时90秒开始定时 继续定时 继续定时 继续定时 继续定时 继续定时 定时到,输出ON,随即复位开始下一次循环定时;东西黄灯、南北红灯
灭,南北转弯灯、南北红灯、东西红灯亮。 表5 高峰时段各定时器一个循环中的功能明细表 定时器t0 t1 t2 t3 t4 t5 t6 T37
13
定时10秒 开始定时,南北转弯灯、南北红灯、东西红灯亮。 定时到,输出ON且保持;南北转弯灯灭,南北绿灯亮,东西红灯继续亮。 ON ON ON ON开始下一个循环定时
T38
定时45秒 开始定时 继续定时 定时到,输出ON且保持;南北绿灯灭,南北黄灯闪烁,东西红灯继续亮。 ON ON ON 开始下一个循环定时
T39
定时50秒 开始定时 继续定时 继续定时 定时到,输出ON且保持;南北黄灯灭,东西转弯灯、南北红灯亮,东西红灯继续亮。ON ON 开始下一个循环定时
T40
定时60秒 开始定时 继续定时 继续定时 继续定时 定时到,输出ON且保持;东西转弯、东西红灯灭,东西绿灯亮,南北红灯继续亮。ON 开
始下一个循环定时 T41
定时85秒 开始定时 继续定时 继续定时 继续定时 继续定时 定时到,输出ON且保持;东西绿灯灭,东西黄灯闪烁,南北红灯继续亮。开始下一个循环定时
T42
14
定时90秒 开始定时 继续定时 继续定时 继续定时 继续定时 继续定时 定时到,输出ON,随即复位开始下一次循环定时;东西黄灯、南北红灯灭,南北转弯灯、南北红灯、东西红灯亮。
6、总结
附录 源程序-STL语句
ORGANIZATION_BLOCK 主:OB1 TITLE=程序注解 VAR
T:BYTE; //时钟值缓冲区 H:INT; //小时数存储单元 M:INT; //分钟数存储单元 SEC:INT; //秒钟数存储单元
Tim:WORD; //小时数乘100加分钟数乘10加秒钟数所得结果存储单元 END_VAR
BEGIN
Network 1 // 网络标题 // 网络注解 LD I0.0
CALL SBR0 //开关SB0闭合,调用SBR0(INIT)对时钟进行初始化 Network 2
LDN I0.1 //起动/停止开关SB1断开,则停止程序 STOP
15