ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

PLC交通灯控制系统完整设计:从梯形图到现场调试实战

PLC交通灯控制系统完整设计:从梯形图到现场调试实战 十字路口交通信号灯大概是PLC学习里被写烂的一个题目每个入行的人基本都做过大专院校的课程设计、毕业设计里更是常客。可越是这种看起来简单的项目真正接手去做的时候越容易翻车两个方向的绿灯同时亮起来、通电瞬间信号灯乱跳、断电重启以后时序对不上、输出点烧掉……我前前后后做过三四个版本的交通灯控制从三菱FX系列到西门子S7-200 SMART都试过踩过不少坑。这篇文章我不讲虚的就把这个经典项目的完整设计过程拆开给你看从控制需求怎么拆、I/O怎么分配、硬件怎么选、梯形图怎么写到现场调试会遇到什么问题全部过一遍。东西适合正在做课程设计的学生也适合刚入行准备独立接小项目的电气工程师参考。1. 控制需求拆解先想清楚信号灯到底在干什么1.1 一个60秒周期的时序设计先厘清控制需求。标准的十字路口东西方向和南北方向各有一组红黄绿灯两组灯按照时间顺序交替放行。我在这里以最常见的60秒循环为例南北方向绿灯亮25秒然后黄灯亮5秒这30秒内东西方向始终是红灯南北方向红灯亮起的同时东西方向绿灯亮25秒、黄灯亮5秒然后回到南北绿灯如此循环。做成表格就是这样的时序关系时间段南北方向东西方向对应阶段编号0s-25s绿灯亮红灯亮阶段125s-30s黄灯亮红灯亮阶段230s-55s红灯亮绿灯亮阶段355s-60s红灯亮黄灯亮阶段4这里有一个很多人忽略的点黄灯结束到下一个方向的绿灯亮中间要不要留全红时间理论上为了清空路口内还没通过的车规范做法是在黄灯结束后加1到3秒的全红时间也就是四个方向都是红灯。这个要不要加取决于路口的实际大小和车速。我后面写的方案里会把这个参数预留出来实际做的时候按路口情况调就行。在此基础上还能扩展出夜间黄闪模式、手动控制模式、紧急车辆优先等需求。这些不一定是刚需但设计系统的时候一开始就把I/O口和程序框架留出来远比后面再来改方便得多。1.2 I/O地址分配动手前先把清单列死电气项目里最忌讳的就是“边接线边想”做交通灯也一样。我在动手写程序之前一定会先把输入输出点地址表列出来而且尽量多留一两个备用点。这套系统按最低配置来算输入输出点其实很少我常用的分配方案是这样的地址信号含义信号类型备注X0启动按钮常开按一下启动运行X1停止按钮常闭按一下停止循环X2急停按钮常闭串在运行回路里X3夜间黄闪模式开关开关量闭合进入黄闪X4手动/自动切换开关量闭合为手动X5手动南北绿按钮常开手动时按下南北放行X6手动东西绿按钮常开手动时按下东西放行Y0南北绿灯输出Y1南北黄灯输出Y2南北红灯输出Y3东西绿灯输出Y4东西黄灯输出Y5东西红灯输出为什么输入里要专门加手动控制和夜间模式因为这是实际路口一定会遇到的需求。夜间车流量小继续按正常周期跑既费电又让驾驶员等得不耐烦黄灯闪烁提醒注意通行是通用做法。手动模式则是给交警用的早晚高峰或者发生事故时交警到场后需要直接控制某个方向的放行不能干等着自动程序跑完一个周期。输出侧注意一点信号灯是典型的开关量负载不需要模拟量也不需要高速脉冲所以选最普通的数字量输出PLC就能干这个活。但到底选继电器输出还是晶体管输出这里头有讲究我放到硬件那一节细说。1.3 安全联锁这是整个系统里最不能省的东西交通灯系统出什么故障都可以唯独不能出现两个方向同时绿灯那是直接奔着事故去的。实际工程里必须做几层保护层层兜底。第一层是硬件互锁。东西绿灯和南北绿灯的中间继电器线圈回路里互相串入对方继电器的一组常闭触点。什么意思呢就是南北绿灯继电器吸合的时候它的常闭触点会断开东西绿灯继电器的供电回路反过来也一样。就算PLC程序跑飞了、输出点粘死了硬件上两个方向也不可能同时得电。第二层是软件互锁。梯形图里写东西绿灯输出时串联南北绿灯的常闭触点写南北绿灯输出时串联东西绿灯的常闭触点。这层保护的作用是防止程序逻辑错乱。第三层是逻辑互锁。如果程序本身用状态转移法来写每个阶段只有一个状态位是接通的天然不存在两个绿灯同时输出的可能。这种“用结构规避风险”的方式比你写一大堆互锁触点更可靠也更容易排查。我下面写梯形图的时候核心就是用这个思路。2. 硬件选型与外设电路设计2.1 PLC选型这类项目用小型机就够但要注意输出类型交通灯控制本身就是典型的小型数字量控制系统算上备用点也就是十几个I/O选一台微型或小型PLC完全够用。三菱FX3U-16MR/ES、西门子S7-200 SMART CPU SR20都是这类项目里的常见选择。两者的共同点是体积小、性价比高、资料多学生和刚入门的工程师上手都容易。真正需要想清楚的是输出类型。三菱FX3U的16MR是继电器输出可以直接接交流或直流负载但机械触点有寿命限制动作频繁以后触点电阻会变大严重时甚至粘连。16MT是晶体管输出响应快、寿命长但只能接直流负载而且输出电流一般只有0.5A左右。我的建议是不管选哪种输出类型都别让PLC输出点直接去带信号灯输出点只驱动中间继电器线圈信号灯电源独立供电。这样PLC输出点绝大部分时间都在驱动一个很小的直流线圈负载极轻寿命和稳定性都有保障。如果项目里以后考虑接触摸屏、做远程监控那就别选太寒酸的配置。三菱FX3U系列可以加以太网扩展模块西门子S7-200 SMART自带以太网口触摸屏直接网线连上去就能通讯。S7-1200当然更好但对于一个十字路口信号灯来说性能过剩价格也高出一截不是必须。2.2 输出侧电路为什么一定要加中间继电器信号灯我习惯选DC24V的LED灯板单灯功率5W到10W一个路口六个灯总功率也就四五十瓦。看起来不大但这里边有个重要的工程思维让便宜的器件去承担故障风险保护贵重的PLC。PLC输出点的标称电流一般是2A理论上一路带十来个LED灯都没问题。但LED灯板内部有驱动电路上电瞬间会有一个冲击电流现场接线稍微有点问题或者灯板进水短路故障电流就可能超过输出点能承受的范围轻则烧输出继电器触点重则烧CPU主板。修一次PLC的时间和费用够买几十个中间继电器了。我常用的做法是每一路PLC输出接一个DC24V线圈的中间继电器比如MY2NJ这种通用型号底座式安装更换方便。中间继电器的触点再控制信号灯的正极回路信号灯负极统一接开关电源负极。输出回路里每一路串联一个1A到2A的保险管或者小型熔断器接线端子用带弹簧的直插式端子方便拆装。整体结构就是“PLC输出点——中间继电器线圈——中间继电器触点——熔断器——信号灯——直流电源负极”。这里还要提醒一句PLC的工作电源和信号灯电源尽量用两个独立的开关电源或者至少把PLC的24V传感器电源和负载电源分开。信号灯频繁通断电流波动挺大的如果和PLC共用电源容易导致PLC电压跌落重启系统就乱套了。我给PLC配一个60W左右的开关电源信号灯单独配一个100W的开关电源各自前面加一个空开互不干扰。2.3 输入侧电路按钮和急停的接法有讲究输入侧的接线相对简单按钮和选择开关的一端接PLC输入点另一端接PLC输入COM端用PLC自带的24V电源供电就行。但有两个细节值得注意。第一个是停止按钮和急停按钮要用常闭触点。这是电气安全里“失效安全”的原则正常工作时常闭触点是一直闭合的只有按下去才断开。万一线路断了、接触器坏了、触点掉了系统会自动停机不会出现“按了停止却停不下来”的情况。如果你用常开触点做停止断线了系统还照常跑那真出事了按什么都没用。第二个是手动模式和自动模式的切换逻辑。手动模式不是简单地把自动输出断开而是让手动按钮的信号优先接管输出。具体实现我在程序部分会写但硬件上要注意选择开关的挡位最好选带中间锁定位的那种避免在自动和手动之间瞬间跳变。另外手动按钮用点动式的不要用自锁式的交警在现场是按一下放行一段时间不是一直按住。3. 控制逻辑与梯形图实现3.1 用“状态转移”代替“定时器硬堆”来控制循环很多新手写交通灯程序习惯用一串定时器首尾相连地死循环T0时间到启动T1T1时间到启动T2……这样写也不是不行但调试的时候很难受你根本不知道程序当前在哪一步而且定时器复位时稍不留神就会出现一个扫描周期的输出抖动。我更推荐用状态转移的方式。把整个60秒周期拆成四个状态每个状态用一个辅助继电器表示当前状态用定时器计时时间到了就复位当前状态、置位下一个状态。程序结构清晰排障时看状态继电器的开关状态一眼就知道系统停在哪个阶段。三菱FX系列的指令表核心逻辑是这样的// 初始上电进入阶段1 LD M8002 SET M10 // 运行标志自锁回路 LD X000 OR M0 ANI X001 ANI X002 OUT M0 // 阶段1南北绿 东西红历时25秒 LD M10 AND M0 OUT Y000 OUT Y005 OUT T0 K250 // 阶段1结束切到阶段2 LD T0 SET M11 RST M10 // 阶段2南北黄 东西红历时5秒 LD M11 AND M0 OUT Y001 OUT Y005 OUT T1 K50 // 阶段2结束切到阶段3 LD T1 SET M12 RST M11 // 阶段3南北红 东西绿历时25秒 LD M12 AND M0 OUT Y002 OUT Y003 OUT T2 K250 // 阶段3结束切到阶段4 LD T2 SET M13 RST M12 // 阶段4南北红 东西黄历时5秒 LD M13 AND M0 OUT Y002 OUT Y004 OUT T3 K50 // 阶段4结束回到阶段1 LD T3 SET M10 RST M13这里用到的M10到M13四个辅助继电器含义分别是“南北绿灯阶段”“南北黄灯阶段”“东西绿灯阶段”“东西黄灯阶段”。任何时刻只有一个状态位是ON相当于程序内部先做了一层互锁两个绿灯同时输出的问题在根源上就被避免了。对应的算法状态转移关系是固定的环阶段1用定时器T0计时25秒后跳到阶段2阶段2用T1计时5秒后跳到阶段3阶段3用T2计时25秒后跳到阶段4阶段4用T3计时5秒后跳回阶段1。四个定时器各管各的时间互不干扰改配时的时候只需要改对应的K值就行。比如想加3秒全红时间就在阶段2和阶段3之间插入一个新状态把周期拉长到63秒。如果用的是西门子S7-200 SMART思路完全一样只是指令写法变成TON定时器定时器号选T37这类100ms时基的PT值填250就代表25秒S7-1200则直接用IEC定时器TONPT可以填T#25S更直观。三菱FX系列里还有步进梯形图指令STL本质也是状态转移每个状态对应一个S状态继电器程序写出来更接近流程图。我个人的习惯是教学和简单项目用辅助继电器加SET/RST复杂项目用STL但底层的控制思想是完全一样的。3.2 初始化和停止逻辑上电不乱、停机要安全程序里有一个容易被忽略但很关键的环节初始化和停止后的状态处理。先讲初始化。PLC上电的时候所有辅助继电器的状态是不确定的有的可能是之前断电前留下的状态有的可能是上电瞬间随机出来的。如果你不处理系统一上电就可能跳到任意一个阶段路口直接乱套。我一般在程序开头用M8002这个初始脉冲在PLC由STOP切到RUN的第一拍把所有状态继电器清零然后强制置位M10让系统从阶段1开始跑。这样每次上电都是固定的起始状态。再讲停止。很多人按了停止按钮就把输出全部断开灯全灭了这在路口是不允许的。信号灯全灭比错误显示更危险驾驶员根本分不清前方是什么状况。我的处理是停止时进入全红状态也就是南北红灯和东西红灯同时亮持续提示所有方向禁行。等重新启动时系统从阶段1重新开始而不是接着停止前的阶段继续跑这样时序最干净。停止逻辑具体这样写停止按钮按下复位M0运行标志同时复位M10到M13所有状态位然后置位一个“全红状态”的辅助继电器M14让它去驱动Y002和Y005两个红灯输出。重新按下启动按钮M0置位先复位M14再置位M10系统回到正常循环。3.3 黄闪模式、手动控制、绿灯闪烁的实现黄闪模式是夜间或低流量时段的标配。实现方式很多最简单有效的是用PLC自带的1秒脉冲。三菱FX系列里M8013就是一个周期1秒的脉冲继电器ON和OFF各占0.5秒。黄闪模式下南北黄灯Y001和东西黄灯Y004都通过M8013控制相当于用0.5秒的节奏交替点亮熄灭视觉效果就是标准黄闪。如果你用的PLC没有自带的秒脉冲也可以自己用两个定时器搭一个比如T4计0.5秒、T5再计0.5秒循环往复效果一样。手动模式的处理放在输出层而不是改状态转移逻辑。自动模式下输出直接跟随M10到M13状态位手动模式下X5按下时强制Y000南北绿灯和Y002南北红灯的逻辑X6按下时强制Y003东西绿灯和Y005东西红灯。注意手动操作时要保持另一方向红灯常亮且两个手动按钮之间也要互锁不能同时按下。还有一个被经常问到的需求怎么让绿灯闪烁3秒比如某些路口的左转待转区信号灯绿色箭头会先闪烁3秒再切黄灯。思路很简单在绿灯阶段最后的3秒里让绿灯输出经过一个秒脉冲调制。实现方法是增加一个状态或标志在当前绿灯阶段剩余时间小于等于3秒时绿灯输出不再直接接通而是用M8013的触点串进去控制。路口实际编程时可以用比较指令把剩余时间算出来或者干脆多分一个阶段出来比如阶段1A是南北绿灯亮22秒阶段1B是南北绿灯闪3秒两段都是东西红灯然后进入黄灯阶段。这样程序虽然多了一个状态但逻辑非常直观调试也方便。3.4 倒计时显示和车辆检测扩展倒计时数码显示是很多路口信号灯的标配但本质上是另一个独立模块。PLC在这里主要做两件事把当前阶段的剩余秒数算出来然后通过输出点以动态扫描的方式刷新数码管。剩余秒数可以从定时器当前值换算也可以用一个秒脉冲计数器每过一秒把剩余时间寄存器减一。两个方向的数码管各是两位需要8个输出点做段选再加上位选控制输出点占用会明显增加所以选型时I/O点数要提前多留一些。车辆检测扩展的思路是通过地磁感应线圈或红外传感器检测某个方向是否有排队车辆然后在这个方向的基础绿灯时间上动态增加时长。比如南北方向基础绿灯25秒检测到有车就每一辆加3秒上限60秒。程序实现不复杂用一个计数器累计检测信号再把计数结果换算成定时器的时间常数即可。真正的难点在现场干扰处理地感线圈的检测信号很弱布线稍有不慎就会误触发这些内容以后有机会单独写一篇展开说。4. 调试流程与常见问题排查4.1 先仿真后上电用仿真软件把逻辑跑顺我调试这类项目有个铁打的习惯不接任何硬件先把程序在仿真器里跑一遍。三菱GX Works2自带GX Simulator仿真器不需要真实PLC就能模拟运行软件里可以直接看到Y0到Y5各输出点的时序变化也能监控M10到M13的状态跳转。西门子S7-200 SMART用PLCSIMS7-1200用TIA Portal的仿真功能都有类似效果。仿真能帮你发现什么第一是逻辑错误比如定时器时间到之后状态有没有跳过去、跳过去之后输出有没有跟着变第二是互锁漏洞比如强制让M10和M12同时为ON看输出层有没有兜底措施第三是边界问题比如停止按钮按下去之后系统能不能稳定进入全红状态再次启动能不能从阶段1重新开始。这些如果在仿真阶段就暴露出来改起来成本很低真到了现场接好线再发现一个问题可能就要折腾半天。仿真的局限也很明显传感器信号、接线松动、电源波动这些真实世界的东西它模拟不了。所以仿真通过不等于万事大吉现场调试是绕不开的。4.2 现场最常见的几个故障和处理思路我做过这么多次交通灯项目现场最容易翻车的其实是接线和电源而不是PLC程序本身。信号灯不亮但输出点和中间继电器都正常优先检查接线端子和灯板正负极。LED灯板是带极性的接反了不会亮端子压线不实稍微一震动就接触不良用万用表通断档测一下就能确认。输出点有动作但整组灯全不亮先测开关电源输出有没有24V。信号灯的电源回路里如果有熔断器烧了、空开跳了也会出现这个现象。我遇到过一回灯板内部短路把整路熔断器烧了后来把所有灯具的接线端子都检查了一遍拆掉一个进过水的灯板才恢复。最危险的故障是两个方向同时绿灯。如果是程序逻辑错误仿真阶段就应该发现如果仿真没问题但现场出现了大概率是中间继电器触点粘连或者PLC输出点烧熔了。这时候硬件互锁就是最后的保命措施所以我前面反复强调硬件互锁绝对不能省。真出了这个故障优先断电然后逐个测量中间继电器触点是否断开找到问题器件换掉。运行一段时间后时序乱套重点查PLC有没有频繁重启。用万用表监测PLC电源电压如果发现电压跌落明显十有八九是信号灯电源和PLC电源混在一起了或者开关电源容量不够。解决办法是分开供电把开关电源容量放大一档这是最稳妥的组合。还有个常见问题定时时间不准。25秒的绿灯实际可能只有24秒左右这个和三菱100ms定时器的刷新方式有关受扫描周期影响会有几十毫秒到上百毫秒的误差对交通灯来说完全无感。但如果项目要求精确计时换用10ms定时器或者加专门的时钟指令就行。4.3 常见问题速查表故障现象可能原因排查与处理方法两个方向同时绿灯程序互锁失效、中间继电器触点粘连、PLC输出点烧熔立即断电检查硬件互锁回路更换粘连继电器修复输出点信号灯不亮但输出有动作接线松动、灯板正负极接反、熔断器烧断万用表测通断检查端子压接质量确认灯板极性整组灯全不亮开关电源断电、总熔断器跳开测量电源输出检查空开和熔丝运行一段时间时序乱套PLC电压跌落、开关电源容量不足分开PLC电源与灯电源加大电源容量停止后灯全灭停止逻辑没有设计全红状态修改程序停止时强制进入全红黄闪不闪或常亮秒脉冲继电器使用错误、定时器参数错误检查M8013或自建秒脉冲逻辑手动模式没反应模式切换开关接触不良、手动按钮接错用万用表测量X4/X5输入点是否有效闭合绿灯闪烁时间不对定时器K值设置错误核对定时器时基与K值换算关系5. 从交作业到真工程这个项目还能怎么升级5.1 自适应配时让绿灯时间跟着车流量走固定周期配时是最基础的方案但真实路口的车流量一天之内波动很大早晚高峰和深夜需要的绿灯时间完全不同。自适应配时的思路是在路口四个方向埋入地磁感应线圈或者安装视频检测器持续统计车流量然后由PLC根据排队长度动态调整绿灯时间。具体到一个单路口简单的实现是南北方向基础绿灯25秒如果检测到南北方向仍有车辆排队每个周期延长5秒最长不超过60秒东西方向同理。程序里只需要在定时器时间常数的计算逻辑上做一些修改把K值改成寄存器里的动态值。要做到更精细的优化可以用模糊控制算法输入是各个方向的排队长度输出是下一周期的绿灯分配时间PLC通过比较和运算指令就能实现。这个方向的研究在智能交通里已经非常成熟作为课程设计的提升点也很有亮点。5.2 远程监控和多路口联动如果现场有几台PLC分布在不同的路口组网就变得必要。三菱FX3U可以加FX3U-ENET以太网模块西门子S7-200 SMART直接用自带的网口通过交换机把各个路口的PLC连到一个局域网里触摸屏或者上位机组态软件就能同时监控所有路口的运行状态、故障报警和配时参数。多路口协调是更高级的玩法也就是常说的“绿波带”让一条主干道上的几个路口信号灯按照车速和路距算好相位差车辆以规定速度行驶时能一路绿灯通过。实现方法是在PLC之间通过通信指令交换当前运行阶段和剩余时间主路口定时广播自己的相位从路口根据设定的偏移量切换信号。这种联动不涉及复杂的算法核心是通信协议和时钟同步但对初学者理解工业网络很有帮助。现在也有AI辅助生成PLC代码的工具能快速搭出框架十来分钟就能生成一个可运行的交通灯程序。但我要泼一盆冷水AI生成的逻辑往往只考虑了“功能正常”对互锁、失效安全、现场调试这些工程细节考虑得很少。你可以用它拉初版但安全相关的逻辑必须自己一条一条核对甚至亲手重写。PLC程序不是跑通就完事出故障时能不能安全地停下来比正常运行时好不好用重要得多。这个项目我前前后后带过不少学生和新人做过说两句最深的体会。交通灯看起来只是几个灯轮流亮但它把PLC项目里最核心的东西全包含了I/O规划、时序逻辑、互锁安全、抗干扰、调试方法。你能把这个项目从“能亮”做到“不乱亮、不闪断、断电重启不乱套”再能根据路口的实际情况去加功能、调参数那PLC这一关就算真正过了。最后再分享一个小技巧做这类项目程序注释一定要写清楚每个中间继电器的含义比如M10就写成“南北绿灯阶段”M14写成“停止全红状态”。调试到半夜的时候你会感谢当时写注释的自己。
返回列表