简介:这是一份面向PLC应用与城市交通控制课程设计的完整技术文档,围绕智能交通灯控制系统展开,针对传统定时控制无法适应车流量动态变化的问题,给出基于可编程控制器与传感器检测的方案。文档共1个docx文件,压缩包大小约528KB,内容包含课题背景、国内外研究现状、系统总体设计以及车辆滞留数检测原理等模块,可作为毕业设计或自动化竞赛的参考资料。目前已有2150人学习/下载,尤其适合正在做PLC课程设计、智能交通创新项目或需要撰写设计报告的读者。文档结合实际十字路口场景,详细阐述了如何通过检测器计数得到车辆滞留量并自适应调整绿灯时长,同时对比了传统固定配时与智能控制的优劣,能够帮助读者快速理解PLC实现交通灯控制的关键流程与设计思路。
1. PLC智能交通灯控制系统设计:信号控制真正难的从来不是"变灯"
交通灯控制器最难的不是红绿灯顺序,而是任意时刻都不能出现两个方向同时绿灯。PLC智能交通灯控制系统设计这个题目,表面是写一段红灯停绿灯行的循环程序,实际要解决的是时序切分、相位互锁、异常降级和现场抗干扰这四件事。用PLC做信号控制机,比单片机系统多的不是功能,而是可靠性:梯形图状态机看得见、摸得着,出问题能在线监控,改配时不用重新烧录。下面按从设计需求到落地调试的顺序,把系统怎么搭、梯形图怎么写、智能模式怎么加、现场最常见的坑在哪里,完整过一遍。适合正在做课程设计的同学,也适合准备用小型PLC改造老旧信号机的现场电气工程师。
2. 系统架构与I/O分配:先定输入输出,再谈智能
做交通灯控制最忌讳一上来就打开编程软件乱写梯形图。正确顺序是先把控制需求拆成状态,再把状态映射到输入输出点,最后才写程序。这一步看似繁琐,却能让后面少踩很多坑,尤其是现场接线和排故障时,一张清晰的I/O分配表比一段完美的程序更值钱。
2.1 十字路口的控制需求拆解:先列状态再画时序
先从最常见的两相位十字路口讲起。所谓两相位,就是南北方向一个相位、东西方向一个相位,南北同时通行时东西必须全红,反之亦然。这种结构覆盖了多数小路口和课程设计场景,四相位左转控制只需要把状态数翻倍,思路完全一样。
控制需求可以拆成四段循环状态:
| 状态 | 南北绿灯 | 南北黄灯 | 南北红灯 | 东西绿灯 | 东西黄灯 | 东西红灯 | 时长 |
|---|---|---|---|---|---|---|---|
| 1 南北通行 | ON | OFF | OFF | OFF | OFF | ON | 30秒 |
| 2 南北过渡 | OFF | ON | OFF | OFF | OFF | ON | 3秒 |
| 3 东西通行 | OFF | OFF | ON | ON | OFF | OFF | 30秒 |
| 4 东西过渡 | OFF | OFF | ON | OFF | ON | OFF | 3秒 |
这个时序表是全篇的基准。南北方向先放行30秒,然后黄灯3秒清空路口,再切换东西方向放行30秒,同样黄灯3秒,最后回到南北方向。一个完整周期是66秒。黄灯的意义不是让人冲过去,而是给已经进入路口的车辆一个清空时间,程序里必须单独作为一个状态存在,不能省略。
智能需求在项目规划阶段就要想清楚,后面才不会被推倒重来。我一般会把智能项列出来逐条过一遍:分时段配时是否需要主机具备实时时钟;车流量感应是否需要车辆检测器输入点;夜间模式是全部黄闪还是保持某个方向长绿;紧急车辆优先是手动按钮还是联动信号。这些需求全部映射到输入点规划里,宁可现在多留两个输入点,也不要等到程序写完才发现点数不够。
2.2 I/O分配表:从信号灯到PLC端子的映射原则
输入输出点规划是整个系统设计的骨架。一个双相位的交通灯系统,最基础的需要启动按钮、急停按钮、模式开关三路输入,加上东西南北各红黄绿六路输出。如果要加车流量感应,就再加两路检测器输入。
下面是一张可以直接照着用的I/O分配表:
| PLC地址 | 信号 | 类型 | 说明 |
|---|---|---|---|
| X0 | 启动 | 输入 | 自锁按钮,按下进入运行状态 |
| X1 | 急停 | 输入 | 常闭触点,断开时输出全部切断 |
| X2 | 模式开关 | 输入 | 自动模式 / 夜间黄闪模式切换 |
| X3 | 南北车检器 | 输入 | 地磁或视频检测,干接点信号 |
| X4 | 东西车检器 | 输入 | 同上 |
| X5 | 紧急优先 | 输入 | 消防或救护优先请求 |
| Y0 | 东西红灯 | 输出 | 220V LED信号灯 |
| Y1 | 东西黄灯 | 输出 | 同上 |
| Y2 | 东西绿灯 | 输出 | 同上 |
| Y3 | 南北红灯 | 输出 | 同上 |
| Y4 | 南北黄灯 | 输出 | 同上 |
| Y5 | 南北绿灯 | 输出 | 同上 |
分配原则有三条。第一,输入按功能分区排列,运行类放前面、检测类放后面,这样查线时不用整柜翻。第二,输出按"方向加颜色"成组排列,Y0到Y2是东西向、Y3到Y5是南北向,控制柜端子排的顺序可以和PLC端子一一对应。第三,必须预留备用点,至少留两个输入和两个输出,现场增加检测器或故障指示灯时不用重新开孔接线。
还有一个容易被忽略的细节:急停按钮一定要用常闭触点接入,不用常开。常闭触点的好处是断线时系统能识别出故障,如果用了常开触点,线断了系统根本不知道,急停形同虚设。
2.3 选型视角:继电器输出型PLC为什么够用
很多人在这一步纠结要不要上带模拟量或总线功能的高端机型。我的判断很直接:交通灯控制不需要模拟量,不需要高速计数,不需要通信总线,一台继电器输出型的小型PLC完全够用。
继电器输出的优势是能直接驱动220V交流信号灯。常见LED信号灯功率大多在10瓦到30瓦之间,继电器触点容量远大于这个负载,中间不需要再加接触器转换。如果选了晶体管输出型,输出侧只有直流24V,驱动220V灯具必须外接中间继电器,控制柜里多一层器件,接线和故障点也跟着多一层。对于这种慢速开关设备,继电器输出型在成本、抗过载能力和维护便利性上都更合适。
小型PLC的点数选择按当前I/O表估算,6路输入加6路输出,选10点或14点的主机即可,不用选点数过大的机型。定时器资源也不用担心,普通定时器几十个起步,一个双向交通灯状态机最多占用六七个。分时段配时需要主机自带实时时钟,选型时留意一下说明书里的系统寄存器或系统变量即可。电源方面,常见的220V供电小型机可以直接从控制柜取电,信号灯回路单独用一个断路器供电,不建议和PLC共用一路电源。
3. 梯形图实现:把时间轴切成四个状态,循环跑起来
3.1 时序图与状态划分:控制器的心跳节奏
拿到时序表之后,第一步是把四个时间段映射成PLC内部辅助继电器。这里用M0到M3分别代表四个状态,任意时刻只允许一个M为ON,这是状态机的核心约束。状态之间通过定时器触点触发切换,形成闭环循环。
控制逻辑可以简化为一张状态映射表:
| 状态 | 内部继电器 | 有效输出 | 切换条件 |
|---|---|---|---|
| 南北通行 | M0 | Y5南北绿、Y3东西红 | T0定时30秒到 |
| 南北过渡 | M1 | Y4南北黄、Y3东西红 | T1定时3秒到 |
| 东西通行 | M2 | Y2东西绿、Y0南北红 | T2定时30秒到 |
| 东西过渡 | M3 | Y1东西黄、Y0南北红 | T3定时3秒到 |
用辅助继电器而不是直接用输出线圈做状态标志,好处是状态判断和输出执行可以分开写。后面加夜间模式、紧急优先时,只需要切换状态继电器,不用改动输出网络,程序结构会清爽得多。
3.2 核心梯形图:定时器级联与状态转换
梯形图在文本里不便直接呈现,下面用等价的助记符来描述,逻辑和梯形图一一对应。LD表示取常开触点,LDI表示取常闭触点,OUT是输出线圈,SET是置位,RST是复位,PLS是上升沿微分。这套助记符在主流小型PLC编程软件里都认,具体画法略有差异但网络结构一致。
// 开机初始化:按下启动按钮后进入状态M0 LD X0 PLS M10 // 启动按钮上升沿脉冲,只导通一个扫描周期 LD M10 SET M0 // 进入南北通行状态 // 状态M0:南北绿灯 + 东西红灯,持续30秒 LD M0 ANI M2 // 互锁:东西绿灯未亮 ANI M3 // 互锁:东西黄灯未亮 OUT Y5 // 南北绿灯输出 LD M0 OUT Y3 // 东西红灯 OUT T0 K300 // T0定时30秒,K300为300个100ms时基 LD M0 AND T0 // 30秒到时 SET M1 // 进入南北过渡状态 RST M0 // 退出状态M0 // 状态M1:南北黄灯 + 东西红灯,持续3秒 LD M1 ANI M3 // 互锁:东西黄灯未亮 OUT Y4 // 南北黄灯输出 LD M1 OUT Y3 OUT T1 K30 // T1定时3秒 LD M1 AND T1 SET M2 // 进入东西通行状态 RST M1 // 状态M2:东西绿灯 + 南北红灯,持续30秒 LD M2 ANI M0 // 互锁:南北绿灯未亮 ANI M1 // 互锁:南北黄灯未亮 OUT Y2 // 东西绿灯输出 LD M2 OUT Y0 OUT T2 K300 LD M2 AND T2 SET M3 RST M2 // 状态M3:东西黄灯 + 南北红灯,持续3秒 LD M3 ANI M1 // 互锁:南北黄灯未亮 OUT Y1 // 东西黄灯输出 LD M3 OUT Y0 OUT T3 K30 LD M3 AND T3 SET M0 // 回到状态M0,形成循环 RST M3代码的逻辑分两大块:每段状态先写输出网络,再写转换网络。以南北通行状态为例,M0为ON时,南北绿灯和东西红灯输出,同时T0开始计时。T0触点闭合后,先置位M1、复位M0,当前扫描周期内后续程序扫描到M1输出段时,Y4黄灯在同一个扫描周期就亮了,几个输出之间没有全灭的切换间隙。
K值换算是新手最容易出错的地方。K300能不能代表30秒,完全取决于T0这个定时器的时基。如果编程软件里T0是100ms时基,K300就是300乘以100毫秒等于30秒;如果T0是10ms时基,K300只代表3秒,绿灯时间会整整短10倍。用哪个定时器编号对应哪个时基,写程序前一定要在软件说明里确认。
3.3 黄灯过渡与互锁:防止红绿同亮的程序兜底
黄灯过渡是靠状态机天然保证的,真正需要在程序层面额外做的是互锁。所谓互锁,就是一个方向的绿灯输出条件里,串进另一个方向绿灯的输出状态常闭点。
上面的代码里已经做了两层互锁。第一层是状态级互锁,比如Y5南北绿灯的OUT条件里串联了M2和M3的常闭,即便程序异常导致M0和M2同时为ON,南北绿灯也会被强制切断。第二层是输出级互锁,每个输出线圈在全程序只出现一次OUT,避免同一线圈在多个状态下重复输出互相覆盖。PLC里同一个输出线圈如果写了两次OUT,软件会报警,最终值以后面那个网络为准,这正是红绿同亮的常见根源之一。
硬件层面还要再加一道保险。工程上我会在信号灯控制柜里给同方向的红灯和绿灯串接触器互锁触点,一个方向的绿色主接触器吸合时,红色主接触器回路被机械切断。这样即使PLC程序跑飞、输出模块故障,两个方向的灯也不可能同时亮。软件互锁防逻辑错误,硬件互锁防物理故障,两层都在才算合格。
提示:互锁触点要用输出线圈的常闭点,不要用辅助继电器M的常闭点。用M互锁防的是状态乱,用输出线圈互锁才能防住输出通道本身的问题。
4. 智能在哪:分时段配时与车流量感应的工程实现
4.1 分时段配时:用PLC实时时钟切换三套配时参数
"智能"的第一个落点是分时段配时。早晚高峰时南北方向车流量大,给45秒绿灯;平峰时给30秒。这个需求不用增加任何硬件,只要PLC自带实时时钟,再配一块触摸屏或者直接改数据寄存器就能实现。
实现分时段配时的关键技巧是把定时器的预设值从常数改成数据寄存器。第3章的代码里写的是OUT T0 K300,智能版本改成OUT T0 D0,D0的值根据当前时间由程序自动写入。这样不同时段执行不同的赋值逻辑,而状态机本身完全不用改。
分时段逻辑用结构化文本(ST)表达更直观。下面是一段可参考的IEC 61131-3风格代码,函数名在不同品牌软件里略有差异,查一下系统时钟变量名即可:
// 读取PLC内置时钟的小时和分钟 H := HOUR_OF_DAY(系统时间变量); M := MINUTE_OF_DAY(系统时间变量); // 早高峰:7:30-9:00,南北方向为主干道 IF (H = 7 AND M >= 30) OR (H = 8) THEN D0 := 450; // 南北绿灯45秒 D1 := 250; // 东西绿灯25秒 // 晚高峰:17:00-19:00,南北依然优先 ELSIF H >= 17 AND H <= 19 THEN D0 := 400; // 南北绿灯40秒 D1 := 300; // 东西绿灯30秒 // 平峰时段:两边一样 ELSE D0 := 300; // 南北绿灯30秒 D1 := 300; // 东西绿灯30秒 END_IF;D0和D1的单位要和定时器时基对应。代码里写450,意味着预设值是450个100ms时基,正好45秒。如果PLC定时器时基是10ms,就要写4500。用D寄存器还有另一个好处:可以接触摸屏在线修改配时,现场调灯不用每次下载程序,这在工程上非常实用。
黄灯时间不建议参与分时段切换,基本固定在3秒。原因是黄灯是安全清空时间,不同时段差异很大反而会让驾驶员困惑。我见过有人把黄灯时间也做成随高峰延长的,结果通行效率没提升,追尾事故倒是变多了。
4.2 车流量感应:绿灯延长的两种实现策略
"智能"的第二个落点是感应式信号控制。当南北方向绿灯快结束时有车到达,就适当延长绿灯,让它不用等到下一个周期。这是国内感应信号系统最常用的策略,实现方式是在基础状态机上增加一个延长分支。
常见做法是"绿灯延长式":每个方向先保证一个基础绿灯时间,基础时间到了以后,如果检测器还有车,就继续延长一段时间,但设置一个最大绿灯时间兜底,防止单方向无限制占道。
延续第3章的助记符风格,下面是南北方向状态M0的延长逻辑:
// 状态M0补充:最大绿灯45秒计时器 LD M0 OUT T5 K450 // 最大绿灯45秒,100ms时基 // 延长窗口:状态M0期间持续计时5秒 LD M0 OUT T4 K50 // 延长窗口5秒 // 有车到达时重置延长窗口 LD M0 AND X3 // 南北检测器有车 RST T4 // 延长窗口清零,重新计时 // 正常切换:基础30秒到,且最近5秒内无车 LD M0 AND T0 AND T4 // 延长窗口已经走完 SET M1 RST M0 // 强制切换:最大45秒到,无条件切换 LD M0 AND T5 SET M1 RST M0这条逻辑链的运行过程是这样的:M0激活后,T0和T4同时开始计时。T4计时到50个时基即5秒钟后,触点T4变为ON并保持。但每次X3有车,RST就把T4清零重新计时,T4触点也随之恢复OFF。只有当基础30秒到、且T4也走完5秒没有被重置时,切换条件才满足。
T5是整个机制的"后悔药"。如果检测器持续输出有车信号,比如地磁被金属井盖干扰,T4会一直被清零,绿灯理论上永远亮下去。T5在45秒时强制切换,保证另一个方向不至于等到天荒地老。这个最大绿灯时间必须加,不加就是在给现场埋雷。
还有一个策略是"跳相式":次干道检测器检测到车辆等待超过某个阈值,就强制提前结束当前方向绿灯。这种策略适合车流量极度不平衡的路口,但实现复杂,需要引入等待时间计数器,普通课程设计不建议做。先把延长式玩明白,跳相式以后真遇到不对称路口再说。
4.3 特殊模式:夜间黄闪与紧急车辆优先的落地
夜间车流量极小时,红绿灯按正常周期运行反而增加无谓等待。工程上夜间模式一般切到黄闪,所有方向黄灯以1赫兹左右频率闪烁,提示驾驶员谨慎通过。代码上用一个自激振荡定时器生成脉冲,再通过模式开关X2控制输出。
// 1Hz黄闪振荡器:T10常闭驱动自身计时 LDI T10 // T10常闭触点 OUT T10 K5 // T10计时0.5秒,形成自激振荡 // 夜间模式:东西方向黄灯闪 LD T10 AND X2 // 模式开关在夜间位 OUT Y1 // 夜间模式:南北方向黄灯闪 LD T10 AND X2 OUT Y4这段代码里,LDI T10取的是T10自己的常闭触点。T10为OFF时,常闭导通,定时器得电计时;0.5秒后T10变为ON,常闭断开,定时器失电复位,T10回到OFF,然后下一个周期又得电。如此往复形成约1赫兹的振荡信号。
紧急车辆优先级别最高。通常做法是增加一个独立状态M10,当X5紧急输入为ON时,先复位所有正常状态M0到M3、复位所有定时器,然后让所有方向红灯保持3秒,再单独放行紧急车辆所在方向。退出时同样要把M10复位,重新进入M0从完整时序开始。这里必须强调复位的重要性:如果退出时不把M0到M3清干净,状态机会从随机位置继续运行,可能直接跳过黄灯,也可能两个方向同时亮。
5. 调试与避坑:交通灯控制最常翻车的5个现场
这套系统结构不复杂,但真到调试阶段,问题往往出在你想不到的地方。下面五条是模拟项目X和现场改造中反复出现的典型故障,按现象、原因、解决的顺序记录下来,调试时可以直接对着查。
5.1 红绿同亮:输出线圈重复赋值与互锁缺失
现象:在线监控表里Y2和Y5同时为ON,程序没有崩溃但输出完全错误。
原因:绝大多数情况是状态M0和M2同时被置位,M0驱动南北绿灯、M2驱动东西绿灯,互斥关系被破坏。具体写法通常是转换网络用SET过多、RST漏写,或者同一个输出线圈在多个状态网络里各写了一次OUT,后写的地方覆盖了前面的值。
解决:先查监控表里M0和M2的状态,两个同时为ON说明状态机本身有漏洞。再把每个输出线圈全程序搜索一遍,确保只出现一次OUT。最后在输出网络里补上互锁常闭点,Y5的OUT条件串M2和M3常闭,Y2串M0和M1常闭,这是程序上的最后一道闸门。
5.2 绿灯直接变红:状态转换把黄灯"短路"了
现象:绿灯30秒后直接熄灭,下一个方向绿灯接着亮,中间黄灯根本没出现过。路口出现清空时间缺失,存在安全隐患。
原因:转换条件写得过宽。常见写法是"LD M0 AND T0 OR X3"这类混合条件,把定时器到时的跳转和传感器信号并联在一起,T0一到M1被跳过直接进入M2。还有一种情况是T1定时器被其他地方误复位,M1状态只持续了一个扫描周期。
解决:转换路径严格按M0到M1到M2到M3到M0的顺序,每个状态之间只写一个转换网络。不要用OR跳过中间状态。检查T1是否被其他RST指令操作,定时器编号不能被两条指令重复占用。
5.3 仿真正常、现场灯闪:继电器输出驱动LED灯的漏电流
现象:程序监控完全正确,但接入现场LED信号灯后,应该熄灭的黄灯出现微闪或低亮度。
原因:PLC继电器输出断开时,输出端子到灯具的长线缆之间存在寄生电容和漏电流。LED灯具本身驱动电流很小,几毫安的漏电流就足以让灯珠微微发光。这个问题在纯电阻负载的调试台上测不出来,一接真实LED灯就现原形。
解决:每一路输出端子并联一个2到5千欧的电阻,把漏电流分流掉。A同学在模拟项目X里用的是220V LED灯串,并联3.3k欧电阻后微闪彻底消失。如果是直流供电的信号灯,检查电源负极是否共地,必要时在灯具端也并接电阻。
5.4 夜间模式切回自动全乱:状态寄存器没初始化
现象:夜间黄闪模式运行正常,但切回自动模式时,信号灯出现持续好几秒的全红,或者直接跳过某个状态。
原因:进入夜间模式时只切断了输出,没有把M0到M3以及T0到T5复位。切回自动时状态机从被中断的随机位置继续运行,定时器也可能停在半程,时序必然错乱。
解决:在模式切换程序里,只要检测到退出夜间模式,立即执行一组RST指令,把M0到M3、T0到T5全部复位,然后重新置位M0。更稳妥的做法是在程序入口加一个初始化网络,PLC通电或模式切换时统一走一次初始化,保证状态机永远从M0开始。
5.5 信号机"罢工":传感器误触发与最大绿灯时间缺失
现象:某个方向绿灯持续到45秒以上迟迟不放行,另一个方向排队的车越来越多。监控发现绿灯时间确实被不断延长,不是定时器故障。
原因:车检器持续输出有车信号。地磁检测器被金属物体干扰,或视频检测器把阴影误判成车辆,X3一直为ON,T4延长窗口被反复重置,绿灯进入无休止的延长循环。
解决:第一必须加T5最大绿灯时间强制切换,这是保底。第二在PLC输入侧设置滤波时间,一般10到50毫秒,滤掉检测器输出上的短脉冲抖动。第三给检测器单独接故障报警输出,检测器持续ON超过一定时间就通知维护人员到现场处理,别让故障过夜。
6. 从监控表到现场:三十分钟验证一套信号逻辑
先在编程软件里用仿真器把整套逻辑跑一遍。强制X0为ON,打开监控表观察M0到M3的循环切换和T0到T3的数值递减,同时用秒表卡绿灯持续时间,误差应该在正负1秒以内。同步检查每两个状态切换时,下一个状态输出是否在同一周期内接上。
接着做互锁破坏测试。在监控表里强制把Y2置为ON,再强制Y5置为ON,观察Y5是否被输出网络的互锁常闭点拉回OFF。如果拉不回来,说明互锁触点没加在输出网络位置,必须停下来改程序,这一项测试通不过绝不能上电试灯。
然后是离线带电调试。不接信号灯,在PLC输出端子排上接一组带指示灯的测试排,按启动后逐个验证Y0到Y5的亮灭顺序。这一步能抓出两个问题,一是输出通道和端子的对应关系接反,二是输出模块公共端接线错误。注意别直接短路输出端子来测,继电器型输出管触点,短路会烧板子。
空载验证完了再接真实LED灯。接通灯后重点看黄灯过渡是否清晰,夜间模式黄闪频率是否正常,还要用钳形表测每路输出电流,确认没有过载和漏电流问题。最后做24小时老化运行,在程序里加一个计数器累计M0的激活次数,第二天看计数是否符合预期,确认没有死机或时序漂移。
我自己养成了一个习惯:所有定时器预设值一律写成D寄存器,哪怕当前是固定配时也先用常数初始化一遍。因为现场改配时是大概率事件,早高峰延长10秒、晚高峰缩短5秒,改D值一分钟完成,改程序要重新下载还要担心停机影响。另外一个习惯是所有状态转换都走中间辅助继电器M,不用输出线圈做转换判断,程序调起来会少很多玄学问题。靠着这两个习惯,这套信号控制方案在多次现场改造里基本没翻过车,希望帮到你。
本文还有配套的精品资源,点击获取