多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

三菱FX系列PLC交通灯带流量控制程序设计与调试详解

三菱FX系列PLC交通灯带流量控制程序设计与调试详解 做交通灯项目这么多年有一个体会特别深程序写得好不好往往不是看你会多少指令而是看你能不能把“时序”和“现场”这两件事理顺。这套用三菱FX系列PLC做的带流量控制的交通灯程序是我在实际项目中沉淀下来的一套方案核心是解决固定时序交通灯“高峰堵、平峰空放”的问题。整套程序包含完整的IO分配表和PLC原理图设计思路基准工作周期60秒通过双方向压车检测信号动态调整绿灯配时。项目本身不算复杂但里面的设计逻辑、时序处理思路、现场调试方法放在任何小型顺序控制项目里都能复用。不管你是刚入门的PLC学习者还是需要做实际路口或厂区交通控制的工程师这篇文章值得你从头到尾看一遍。1. 需求分析与程序架构设计1.1 为什么交通灯要“带流量控制”普通交通灯程序大多是固定配时南北绿灯30秒、黄灯3秒、东西绿灯24秒、黄灯3秒循环往复。听起来没毛病但一到现场就露馅。早晚高峰的时候东西方向明明排队排了一百多米绿灯却只有24秒一个周期只能放过去十几台车到了平峰期南北方向绿灯30秒里可能只有两三台车通过后面大把时间都在空放。这种“固定时序”带来的问题用一句话说就是时间没有花在刀刃上。带流量控制之后程序会根据实际压车情况调整配时。哪个方向排队车辆多就适当多给几秒绿灯哪个方向空着就提前结束绿灯把时间匀给需要的方向。本质上是把一个“死板”的顺序控制器变成了一个“有判断能力”的智能时序控制器。这里的流量检测不需要精确到“每分钟通过多少辆车”用压车检测信号就足够了——检测位置有一定长度的排队车辆就判定为“该方向需要更多绿灯时间”。1.2 程序运行逻辑从固定时序到动态分配整套程序的核心运行逻辑可以概括成一句话基准周期60秒不变方向之间“截长补短”。什么是“截长补短”我设计这套程序的思路是正常情况下南北绿灯30秒、南北黄灯3秒、东西绿灯24秒、东西黄灯3秒四步走完正好60秒回到起点。当程序检测到东西方向压车严重时下一轮的东西绿灯时间自动从24秒延长到30秒左右但同时南北绿灯时间从30秒压缩到24秒左右。总周期还是60秒上下浮动不会出现一个方向无限加时、另一个方向等得崩溃的情况。这样设计有一个实际考虑交通灯不是孤立的一个路口的周期时间如果动不动就从60秒飘到90秒跟相邻路口的协调就会乱套整条路的通行效率反而下降。所以我的方案是“总量基本恒定、方向动态倾斜”既解决了流量不均的问题又不会破坏整个区域的协调节奏。1.3 控制方案选型步进指令(STL)还是基本指令这是我在写这类顺序控制程序时第一个要决定的问题。交通灯本质是一个“四步循环”的顺序控制南北绿灯→南北黄灯→东西绿灯→东西黄灯→再回到南北绿灯。最原始的写法是用自锁、互锁电路加一堆定时器去硬凑但程序一旦涉及“根据条件跳转配时”基本指令写起来就会非常痛苦线圈互相缠绕调试的时候改一个触点要翻半篇程序。这个项目我推荐用**步进梯形图指令STLStep Ladder Instruction**或者SFCSequential Function Chart语言。STL最大的优势是把复杂的顺序控制拆成一个一个独立的状态块每个状态块只管自己的输出和转移条件状态和状态之间界限清晰。类比一下基本指令就像你手动一条条串珠子串错了整串都要拆STL就像用隔板把珠子一格一格分好哪一格出问题动哪一格就行。三菱FX系列对STL指令的支持非常成熟FX3U、FX3G都原生支持STL指令配合SET/RST操作状态转移逻辑一目了然现场调试时也能用GX Works2的监视画面直接看到当前停在哪个状态。2. IO分配表与硬件选型2.1 输入信号规划IO分配是整个项目的地基很多新手上来就写程序写完才发现输入输出口不够用或者信号类型不对只能推倒重来。我在分配IO之前先把每一个现场信号是什么类型、接到哪个端子、怎么接线都想清楚。这套程序的输入信号分成操作信号和检测信号两类。操作信号就是启动和停止。启动按钮用的是常开触点接到X0按下时X0为ON程序从初始状态开始运行停止按钮用常闭触点接到X1正常运行时X1为ON按下停止按钮时X1断开程序回到初始状态所有输出复位。用常闭触点接停止按钮是电气控制的老规矩这样即使按钮接线断了系统也会自动进入停止状态符合安全原则。检测信号就是流量检测。这里我用两个光电接近开关分别检测南北方向和东西方向的压车情况X2接南北方向检测点X3接东西方向检测点。选型上推荐NPN常开型三线制光电开关检测距离根据路口宽度选2米到5米的漫反射型或者对射型都可以。信号类型是24V直流跟FX3U的漏型输入完全匹配。需要注意的是安装位置要离停止线有一定距离太近的话正常排队的车辆就会误判为“压车”太远的话检测不到排队长度一般在停止线后20米到30米比较合适。2.2 输出信号规划输出信号只有六个就是南北和东西两个方向的红、黄、绿三色灯组。Y0接南北红灯、Y1接南北黄灯、Y2接南北绿灯Y3接东西红灯、Y4接东西黄灯、Y5接东西绿灯。这里要特别注意输出类型的问题。三菱FX3U有继电器输出和晶体管输出两种型号驱动交通灯这种220V交流灯组必须选继电器输出型型号后缀带MR的就是继电器输出比如FX3U-32MR/ES。如果用晶体管输出输出点只能带直流负载而且晶体管过流能力弱直接炸管也是有可能的。如果手头只有晶体管输出的PLC那就必须加中间继电器进行转换让PLC输出点只驱动中间继电器线圈再由继电器触点去控制灯组这个方案后面原理图部分细说。2.3 完整IO分配表我把整张IO分配表整理成下面这张表照着这张表接线基本不会出错IO地址信号名称信号类型连接对象备注X0启动按钮NPN常开启动按钮按下启动程序X1停止按钮NPN常闭停止按钮按下复位程序X2南北压车检测NPN常开光电开关检测南北向排队车辆X3东西压车检测NPN常开光电开关检测东西向排队车辆X4手动/自动切换旋钮开关选择开关预留调试用Y0南北红灯220V AC红灯灯组带中间继电器Y1南北黄灯220V AC黄灯灯组带中间继电器Y2南北绿灯220V AC绿灯灯组带中间继电器Y3东西红灯220V AC红灯灯组带中间继电器Y4东西黄灯220V AC黄灯灯组带中间继电器Y5东西绿灯220V AC绿灯灯组带中间继电器多预留了一个手动/自动切换的X4输入现场调试的时候非常有用。自动模式下程序按照时序运行切到手动模式之后可以直接用GX Works2的“强制输出”功能逐一点亮各个方向的灯组检查接线和灯泡不用干等一个周期走完才看到某个灯是否正常省的时间不是一点点。3. PLC原理图与电气接线要点3.1 PLC外部接线设计PLC的原理图我按“电源回路—控制回路—输出驱动回路”三条线来讲实际画图的时候也是这个思路。电源回路AC220V进来先过断路器QF1建议选C型2P额定电流10A就够然后接到开关电源的L和N端开关电源输出DC24V给PLC供电。FX3U的电源端子有两个电源L和N是AC220V主电源提供PLC内部电路和输入公共端的电源另外还有一个24V和0V端子是PLC自带的24V直流电源可以用来给光电开关这类传感器供电但要注意这个24V电源输出电流有限FX3U-32MR大概是400mA左右传感器多的时候建议外置一个24V开关电源不要用PLC自带电源硬扛。输入回路FX3U输入端采用漏型接法时输入公共端S/S接24VX端子接传感器或按钮的另一端。以NPN常开型光电开关为例棕色线接24V蓝色线接0V黑色线接X2或X3。按钮也是同理按钮一端进X端子另一端接S/S。这里最容易被忽略的是传感器和PLC必须共地否则传感器输出信号飘忽不定程序动不动就误触发。输出驱动回路FX3U继电器输出型的输出公共端是COM1和COM2Y0到Y7共用COM1。因为负载灯组是220V交流所以即使在PLC内部的继电器触点之后也必须走外围驱动。我这里通用的做法是PLC输出点Y0连接到中间继电器KA1的线圈一端线圈另一端接COM1的0V中间继电器KA1的常开触点再串到220V灯组回路里。这样PLC输出点只负责驱动低电压小电流的继电器线圈真正的大功率负载由中间继电器触点承受PLC的触点寿命和安全系数都高很多。3.2 中间继电器与灯组驱动细节中间继电器的选型线圈电压用DC24V触点容量选5A以上品牌不挑正泰、施耐德、欧姆龙都行关键是线圈两端一定要反向并联一个续流二极管。直流继电器线圈在断电瞬间会产生很高的反向感应电动势没有续流二极管的话这个反电动势有可能直接击穿PLC输出点的内部晶体管或继电器触点。续流二极管选1N4007就够注意方向二极管的负极接线圈的正极端正极接线圈的负极端别焊反了。灯组接线还有一个细节交通灯灯组如果是LED灯单个灯珠功率不大但LED灯内部有驱动电路感性负载特性不明显如果是传统白炽灯或卤素灯冷态启动电流能达到额定电流的七八倍。所以中间继电器的触点容量我一般按灯组额定电流的2倍以上选择别刚好卡在额定值上否则用不了两个月触点就烧黑了。3.3 信号采集与抗干扰处理现场调试这个项目时遇到最多的坑就是传感器信号被干扰。三相电机启动、接触器吸合、甚至大车经过时的震动都可能导致光电开关输出抖动。我的处理办法有三个第一传感器信号线用屏蔽双绞线屏蔽层单端接地信号线单独穿管不要和220V动力线走同一根线槽。这个走线的时候多花十分钟后面省一个月。第二在PLC程序里做数字滤波。检测信号不是一检测到“ON”就立刻认为是压车而是要求这个信号持续保持一定时间比如2秒才算有效。这个等一下在程序章节里展开说具体怎么实现。第三PLC的电源前端加一个EMC滤波器或者至少在开关电源输入端并一个压敏电阻。如果现场电磁环境特别恶劣可以给开关电源的输出端再加一个LC滤波电路进一步降低纹波。关于整个系统的原理图因为这里没法直接贴图我把关键端子接线整理成一张速查表对着这张表画电气原理图基本不会漏回路起点终点线径备注主电源断路器QF1输出开关电源L、N1.5mm²220V ACPLC供电开关电源24VPLC L、N注意是直流输入型还是交流输入型1.0mm²按实际型号传感器供电开关电源24V光电开关棕线0.5mm²屏蔽线传感器信号光电开关黑线X2/X30.5mm²双绞屏蔽输出驱动Y0Y5中间继电器线圈0.75mm²24V DC灯组回路中间继电器触点交通灯灯组1.5mm²220V AC4. 核心程序实现与逻辑详解4.1 初始化与状态定义程序框架用STL指令实现在三菱GX Works2里新建工程时选择PLC系列为FX3U程序语言选梯形图STL指令在梯形图里可以直接写。程序第一步是初始化。PLC上电后特殊辅助继电器M8002会产生一个扫描周期的脉冲利用这个脉冲执行初始化程序ZRST复位所有输出ZRST是批量复位指令可以一次性复位连续的软元件FNC 40ZRST把Y0到Y5全部清零字元件部分把T0到T4的当前值清零。接着SET S0把程序拉到初始状态等待启动信号。状态分配如下状态含义输出定时器S0初始状态全部关断无S20南北通行Y2南绿、Y3东红T030秒基准S21南北黄灯Y1南黄、Y3东红T13秒S22东西通行Y0南红、Y5东绿T224秒基准S23东西黄灯Y0南红、Y4东黄T33秒S24全红过渡Y0南红、Y3东红T44秒这里需要特意解释一下S24“全红过渡”。很多初学者不理解为什么黄灯灭掉后不直接切换成另一个方向绿灯还要加一个全红状态。实际场景里黄灯结束时往往还有车辆滞留在路口中央左转待转、直行没走完的如果另外一个方向立刻变绿灯就会和清空路口的车辆发生冲突。全红过渡的4秒就是留给路口清空的时间安全靠这4秒兜底。4.2 60秒基准周期分配逻辑在没有流量介入的基准模式下时序是这样的S20状态南北绿灯亮30秒T0用OUT指令设定值K30单位是秒注意FX3U的定时器寄存器单位是100ms所以K300才是30秒K30是3秒K300→30秒K30→3秒这个坑我见过太多人踩了。T0计时到达后它的常开触点接通SET S21同时RST S20程序进入黄灯状态。S21黄灯亮3秒T1设定值K30。到达后转移至S22东西绿灯亮24秒。T2设定值K240。这个过程中南北方向始终亮红灯Y0。S23东西黄灯3秒后进入S24全红过渡4秒T4到达后循环回S20。这段基准时序合起来是303243464秒不对这里我做了修正实际基准应该是30324360秒。全红过渡时间从黄灯的计时里匀出来还是从周期里加这里为了严格实现60秒基准周期把S21黄灯改为2秒、S23黄灯改为2秒、S24全红4秒加起来就是302242462秒。再调整南北绿28秒、东西绿22秒282222458秒。我需要重新设计一个能严格对齐60秒的时序还要兼顾流量调整。最终方案定为南北绿灯26秒、南北黄灯3秒、东西绿灯24秒、东西黄灯3秒、全红过渡4秒合计60秒。流量介入时南北绿灯可压到20秒东西绿灯最多延长到30秒总周期在54秒到66秒之间浮动工程上完全可以接受。我把这个时间基准整理成一个表状态基准时间流量介入后S20 南北绿灯26秒最小时长20秒S21 南北黄灯3秒固定3秒S22 东西绿灯24秒最大时长30秒S23 东西黄灯3秒固定3秒S24 全红过渡4秒固定4秒4.3 流量控制修正逻辑实现这是整套程序最核心的部分。流量控制不是简单“检测到车就给时间”要做到“有判断、有延迟、有修正”不然早晚高峰会变成一个方向无限霸占绿灯。流量检测滤波在S20状态里当T0计时到达10秒后启动一个2秒的滤波监视窗口。程序这样写LD X3AND T0T0当前值大于100也就是10秒OUT T10K20。T10的触点再串X3置位M10。理解这个逻辑T10本身就是一个2秒延时只有X3在T10计时期间持续保持ON超过2秒T10触点才会导通M10才会被置位。X3只抖动几百毫秒是不会触发M10的。这个“2秒持续ON才算压车”的滤波逻辑比直接读X3触点可靠得多。压车标志的用途M10置位后程序进入S22时对T2的设定值做选择。这里用到三菱的比较触点指令LD M10OUT T2K300LD M10的反向ANlOUT T2K240。也就是如果M10为ONT2按30秒计时对应K300如果M10为OFF则T2按24秒计时K240。M10置位后S20被RST下一轮重新进入S20时用RST M10把压车标志清零再重新检测。这就实现了“东西方向上一轮压车本轮东西绿灯自动延长”的动态调整。南北方向的对称逻辑在S22状态里同样对X2做滤波检测S22运行10秒后启动T11滤2秒波持续压车则置位M11。M11触发后在下一轮S20里把T0的设定值从26秒压到20秒。为什么“加时间”和“压时间”不对称因为南北是主干道默认配时就比东西长当东西方向流量上来时优先压缩南北时间补给东西这个优先级顺序在程序设计里就体现出来了。两个方向同时压车怎么办上面这组逻辑自然处理了先置位的先调整两边都压车时南北压到20秒、东西加到30秒总周期50秒我算一下南北26→20东西24→30加上33440203033460刚好还是60秒。这个“总量守恒”设计在极端双压车情况下也能把周期拉回60秒算是一个非常漂亮的结果。全红过渡的另一个作用S24全红4秒不仅安全清场也是“本轮配时确认”的窗口。在S24里不做任何流量检测避免绿灯切换瞬间的信号扰动干扰判断。步进梯形图最后每个状态结束后RET指令不能漏。STL指令必须用RET结束整个步进段否则程序会报错或者运行异常。这是新手写STL最常见的低级错误。5. 现场调试经验与常见问题5.1 调试工具与调试方法项目调试阶段除了GX Works2软件我强烈建议带一个万用表和一把小一字螺丝刀。GX Works2里最常用的调试功能是“监视模式”和“强制输出”。监视模式可以直接看当前状态是S20还是S22T0的当前值走到多少秒X2X3传感器的实时通断情况强制输出则可以在手动模式下直接控制某个灯组点亮。这两个功能的组合使用能把调试时间压缩一半以上。调试第一步先别急着跑自动流程。切到手动模式依次强制Y0到Y5为ON确认每一个输出的灯组都正常点亮对应方向和颜色没有接错线。这一步做完自动时序的运行才有基础。第二步跑空载流程。不接传感器或者把传感器信号临时屏蔽跑基准60秒周期用秒表核对每个状态的时长。重点核对两个位置S20到S21的转移时间、S22到S23的转移时间这两个位置如果定时器单位搞错K30到底是30秒还是3秒现场一眼就能发现。第三步接入传感器信号做压车模拟。用一个金属挡板在传感器前晃动观察M10/M11是否正常置位T2的时间选择是否正确切换。这里我踩过的坑是传感器安装角度不对导致车辆经过时漏报程序逻辑没问题信号源压根没触发。所以调试传感器时一定要模拟真实车辆的高度和反射面拿手晃一晃容易误判。5.2 程序异常与逻辑冲突排查排查程序问题有一个经验法则先查现场信号再查中间变量最后查输出。很多“程序不对”的现场最后发现是传感器没信号或者输出触点烧了程序逻辑本身干干净净。常见故障场景之一绿灯不切换。按启动后南北绿灯一直亮着超过26秒也不转黄灯。用监视模式看S20状态是否仍然为ONT0当前值是否已经到K260还没有跳变。多数情况下不是程序坏了而是T0触点没有正确驱动SET S21原因是T0设定值和触点地址写错比如该用T0却写成了T1。三菱FX3U的定时器数量很多但每个定时器的编号是唯一的两个地方用了同一个T号后程序编译时不报错运行时后一个时序就乱套。我自己写程序强制要求一张纸上先列出所有T号分配表T0-T4每个固定给一个用途坚决不重复。常见故障场景之二压车信号一直误触发。X2在监视画面里一直闪烁跳动M10偶尔自己置位。这基本就是传感器干扰或者安装不稳定。先看传感器安装支架是否紧固再看信号线是否跟动力线平行走线最后回到程序排查滤波时间是否够长。如果X3抖动样本确实频繁把T10的滤波时间从2秒加到3秒。常见故障场景之三按下停止按钮后程序还在跑。检查X1接的是不是常闭触点按下后X1是否为OFF。注意PLC输入指示灯按下停止按钮时X1指示灯应该灭掉如果一直亮说明按钮接线有问题。如果X1正确变OFF但程序还在跑看看是不是停止逻辑只复位了输出没复位状态。设计停止逻辑时必须用ZRST把S20到S24全部复位同时RST M10、M11最后SET S0回到初始状态任何一个状态漏了复位都会导致再启动时状态混乱。5.3 程序可靠性设计中的几个细节第一个细节是看门狗定时器WDT。FX3U默认看门狗是200ms程序扫描周期如果异常延长比如死循环触发看门狗错误PLC马上停机。交通灯这种不能停的设备必须设置一个“程序运行监视”逻辑每隔一个固定周期比如每10秒就用一个特殊辅助继电器M80131秒脉冲翻转一个中间位程序异常卡死时这个位不再翻转用触摸屏或上位机就能及时发现。这个功能在小型PLC上不一定标配但作为程序设计者在时序逻辑里加入“心跳信号”的意识一定要有。第二个细节是初始状态的完整性。S0阶段除了等待启动还应该把所有灯全灭掉。配电房突然停电再来电如果交通灯直接全亮或者跳到一个奇怪状态路口直接乱套。所以我做初始状态ZRST Y0 Y5所有灯全灭等启动按钮按下才开始第一轮。上电瞬间M8002脉冲配合ZRST就能保证这一点。第三个细节是四个轮次的灯色互锁。实际接线时很多工程师会在PLC程序之外再加一套硬件互锁比如南北绿灯和东西绿灯用接触器机械互锁因为绿灯同亮就是严重事故程序上的输出逻辑虽然能保证同一时刻只有一个方向绿灯ON但万一PLC程序跑飞掉进死循环所有输出状态就会失控。硬件互锁是第一道保险不能省。这也是为什么我不建议直接把Y2和Y5接灯组一定要经过中间继电器继电器触点本身就能做一个电气互锁的结构。真实调试中的几点体会这套程序和配套接线方案在几个路口做过实际运行最后有几点个人体会供你参考。第一流量检测的安装位置真的决定整个系统的成败。装太近一个普通的红绿灯前排车就误报压车装太远等压车信号触发的时候排队长度已经超过出口调整来不及。我在项目中反复试下来检测点装在停止线后20米左右最合适小路口15米大路口25米试运行时最好拿一台车实际跑几次看看触发的时机。第二调试时别急着追求“完全智能”。一套新逻辑上线像这种流量控制最好先在固定时序模式下跑一个星期确认时序底子完全稳定了再打开流量修正功能。双重因素叠加出问题的时候你至少知道是哪一边引入了变量。这个“守正出奇”策略我后来用在很多项目里都很好用。第三程序注释一定要写。我在每个状态、每个定时器旁边都会写清楚用途和基准值比如“T0南北绿灯计时当前值10010秒”。很多程序运行半年后需要改参数操作的人不是当时的开发者没有注释的程序就像没有指路标的迷宫。这个习惯不值钱但关键时刻救自己一命也救别人一命。交通灯控制是个老掉牙的顺序控制题目但真的做扎实了反而比那些花哨的运动控制项目更能考验一个工程师的“全局思维”信号采集、时序规划、条件判断、安全保护、现场调试每一个环节都是基本功的体现。希望这份拆解对你手头的项目有实在的帮助。
返回列表