车间里那台每天来回跑的运料小车,是很多电工朋友接触三菱FX3U之后,真正想亲手写下来的第一个完整PLC程序。它不像皮带线那么简单,正反转、行程检测、装料卸料延时,一样都少不了;也不像机械臂那么复杂,整个项目核心就是一套状态切换逻辑。今天这篇就把这个题目一次讲透:主电路怎么搭、端子怎么接、梯形图里的核心控制逻辑怎么设计,以及现场调试最容易踩的坑。我会以FX3U为例,给出完整的IO分配思路和关键程序段,既适合刚入门的PLC学习者,也适合做非标设备想快速出方案的工程师参考。
这个项目的难点从来不是某个指令不会用,而是流程看起来简单,真到了现场却发现小车冲过站、接触器打架、状态乱跳。所以下面我会把思路和细节揉在一起讲,争取你读完之后,不只是会抄一段程序,而是能自己设计、自己排查、自己调试。
1. 运料小车先别急着写程序,把动作流程和方案选型想清楚
1.1 一个典型的来回运料流程是怎样的
先明确一个最常见的工艺场景,几乎所有运料小车控制都是从它演变来的:
小车默认停在装料位,左侧有一个接近开关或者行程开关,用来确认“车到位了”。按下启动按钮后,装料设备动作,比如电磁阀打开、料斗落下,开始往小车里装料,这个过程通常给一个固定的时间,比如10秒。装料时间到,小车正转启动,从装料位向卸料位前进。到了右侧卸料位,碰到位置开关,小车停下,卸料设备开始动作,也是给一个固定的延时,比如10秒。卸料完成后,小车反转返回装料位,碰到左侧位置开关后停下。然后重新进入装料状态,整个循环继续跑。
这就是一个典型的“两位置、两状态”运料流程。你要是把这个流程理顺了,后面做三位置送料、双小车避让,本质上都是在同一个状态机上多添几个状态而已。
这里有个关键设计点:小车在装料位和卸料位之间往返时,是直接工频正反转,还是用变频器调速?绝大多数车间里的运料小车,电机就是普通三相异步电机,用接触器换向完全够用。只有要求软启动、减速停车、不同段落不同速度的场合,才需要上变频器。所以本文以接触器换向为主线来讲,这也是最通用的做法。
1.2 为什么这个项目用三菱FX3U最省事
看到这里你可能会想,这么简单的逻辑,用继电器回路不也能做吗?能做,但我强烈不建议。继电器方案确实便宜,接触器加时间继电器加行程开关一套下来,几百块就能搞定。可它有三个硬伤:
第一,接线极其繁琐。正反转互锁、多个时间继电器、多个行程开关,控制柜里全是线,一个端子错了查半天。第二,改工艺非常痛苦。今天装料10秒改成12秒,你得去柜子里拧时间继电器旋钮,靠感觉校准,根本不精确。第三,故障诊断基本靠猜。小车不动作了,你拿万用表一支一支量线,量到天黑都可能没找到断点。
用PLC就不一样了。以三菱FX3U为例,选一个基本的继电器输出型号,比如FX3U-16MR/ES,点位足够,自带24V传感器电源,梯形图软件也成熟稳定。程序里改一个延时时间,就是改一个定时器常数的事,不用动一根线。而且FX3U的SET/RST指令、定时器指令非常齐全,做状态切换逻辑极其顺手。从成本角度说,一台FX3U加上外围元件,和一套像样的继电器系统差距并不大,但后期维护省下来的时间远远值回票价。
2. 硬件搭建与IO分配:接线对了,梯形图才能跑得稳
2.1 主电路与控制电路怎么搭
先看主电路。三相380V电源经过断路器QF,接到两个接触器的上口:KM1主触点直接进电机,KM2主触点也进电机但要把任意两相调换一下,这样才能实现反转。两个接触器绝对不能同时吸合,否则就是相间短路。
控制回路上,PLC的Y0输出驱动KM1线圈,Y1输出驱动KM2线圈。这里我要强调一个很多人图省事忽略的点:FX3U继电器输出的触点容量一般标称2A,直接驱动小型接触器线圈理论上是可行的,但我一般都会在PLC输出和接触器线圈之间加一级中间继电器。原因是接触器线圈吸合瞬间的冲击电流不小,频繁吸合对PLC继电器触点寿命影响明显;加了中间继电器之后,PLC触点只承担中间继电器线圈的小电流,相当于给PLC的“手指头”戴了层手套,稳妥得多。
更重要的是一条铁律:KM1和KM2线圈回路里,必须串入对方的常闭辅助触点。这就是电气互锁。意思是KM1一旦吸合,它自己的常闭触点断开,把KM2线圈回路切断,反过来也一样。这道硬互锁和后面程序里的软互锁是双重保险,缺一不可。
2.2 FX3U的IO分配表和接线禁忌
以一台运料小车为例,我给出一份很常用的IO分配表:
| 地址 | 功能 | 类型 | 说明 |
|---|---|---|---|
| X0 | 启动按钮 | 常开 | 按下时X0为ON |
| X1 | 停止按钮 | 常开 | 程序内部取反,按下时断开运行 |
| X2 | 装料位接近开关 | 常开 | 小车在左端时ON |
| X3 | 卸料位接近开关 | 常开 | 小车在右端时ON |
| X4 | 手动正转点动 | 常开 | 调试用 |
| X5 | 手动反转点动 | 常开 | 调试用 |
| X6 | 急停按钮 | 常闭 | 正常时ON,按下时OFF |
| Y0 | 正转接触器KM1 | 输出 | 小车前进 |
| Y1 | 反转接触器KM2 | 输出 | 小车返回 |
| Y2 | 装料电磁阀/指示灯 | 输出 | 装料动作 |
| Y3 | 卸料电磁阀/指示灯 | 输出 | 卸料动作 |
| Y4 | 故障报警灯 | 输出 | 超时或过冲报警 |
接线时我习惯用三菱常用的漏型输入接法,公共端S/S接24V+,按钮一端接X端子,另一端接0V。接近开关如果用NPN常开型,棕色线接24V+,蓝色线接0V,黑色信号线接X端子。实际现场很多新手把接近开关的褐色线接错,一通电就直接冒烟,这种错误我都见过好几次了,接线前一定看清楚传感器上的标识。
还有两个接线禁忌必须记牢:第一,急停按钮一定要用常闭触点接入,程序里用常开逻辑判断,这样万一急停线断了,PLC会当成急停动作处理,设备自动停机,这才是合乎安全逻辑的接法。第二,输出侧220V电压和输入侧24V直流必须分开走线,别把COM端接混,否则轻则误动作,重则烧PLC输出点。
3. 梯形图核心控制逻辑逐段拆解:状态切换是灵魂
这部分就是标题里说的核心控制逻辑。我的设计思路很明确:用SET/RST指令做状态切换,把流程拆成“装料、前进、卸料、返回”四个状态,而不是堆一堆自锁互锁网络。为什么这么干?因为自锁互锁写出来的逻辑,互相缠在一起,出了故障你得一条条捋,特别痛苦。而状态机式结构,你一看当前激活的是哪个状态,就知道小车现在该干什么、下一步等什么信号,调试一目了然。
对应软元件规划:
| 软元件 | 含义 |
|---|---|
| M0 | 自动运行允许 |
| M1 | 装料状态 |
| M2 | 前进状态 |
| M3 | 卸料状态 |
| M4 | 返回状态 |
| T0 | 装料延时 |
| T1 | 卸料延时 |
3.1 启动、停止与运行允许段
先把M0运行允许写出来,它是整个自动流程的总闸:
LD X000 OR M0 ANI X001 ANI X006 OUT M0X0启动按钮按下,M0置ON并自锁;X1按下或X6急停断开,M0变OFF。这个网络很简单,但它是整套程序的总开关。
接下来是很多新手意识不到但极其重要的一段:只要M0断开,立刻把M1到M4全部复位。
LDI M0 RST M1 RST M2 RST M3 RST M4为什么要单独写这一段?因为M1到M4是用SET指令保持住的,如果你只是让M0断电,M2可能还保持着ON,这时候Y0输出还吸合着,电机根本不会停下来。现场出过太多这种事故:急停按下去,PLC看着像停了,实际上输出状态没复位,设备还在动作。我调试这个项目的时候,第一步就是把这个复位段写进去。停止按钮不止要让M0掉电,还必须清空所有流程状态,这才是安全的停止逻辑。
3.2 装料、前进、卸料、返回四个状态的切换
这是整套梯形图最核心的部分,我直接给出等效指令表,并逐段解释。
装料状态M1:
LD M0 AND X002 ANI M2 SET M1 LD M1 OUT T0 K100M0运行允许且小车在装料位X2,而且当前不是前进状态M2,那么置位M1,进入装料。M1一ON,T0开始计时。K100代表100乘以定时器基础时间,FX3U默认T0是100ms定时器,所以K100就是10秒。这里顺便提醒一下,你如果看梯形图符号还不太熟,记住最基本三个就够了:常开触点是两条竖线,常闭触点是两条竖线中间加一条斜杠,线圈是一个括号。判断不清时把每个触点拆开看,别被一整片网络唬住。
装料完成后切到前进状态M2:
LD T0 ANI M3 SET M2 RST M1T0时间到,说明装料完成,置位M2、复位M1。小车开始正转前进。这里用RST M1而不是让M1自然消失,是为了确保状态唯一,避免M1和M2同时成立。
到达卸料位后进入卸料状态M3:
LD M2 AND X003 SET M3 RST M2小车碰到右侧卸料位接近开关X3后,M3置位,M2复位,前进输出断开,小车停住。卸料延时T1开始,同样K100等于10秒。
卸料完成进入返回状态M4:
LD M3 OUT T1 K100 LD T1 SET M4 RST M3返回状态M4接通后,反转输出Y1动作,小车向装料位返回。回到装料位后,整个循环闭环:
LD M4 AND X002 SET M1 RST M4碰到装料位X2后,M1又被置位,下一轮装料重新开始。这就是一个完整的循环状态机。你会发现整个程序从头到尾没有一个复杂的自锁网络,状态切换全靠SET和RST,哪个状态在哪一步被置位、在哪一步被复位,清清楚楚。
3.3 正反转输出互锁与手动模式
状态切换之后,输出段同样不能放松。正反转的梯形图输出这样设计:
LD M2 OR X004 ANI M4 ANI X005 OUT Y000 LD M4 OR X005 ANI M2 ANI X004 OUT Y001Y0是前进输出,来源有两个:自动状态的M2,或者手动正转点动X4;Y1是返回输出,来源也有两个:自动状态的M4,或者手动反转点动X5。关键在互锁:Y0回路里串了M4常闭和X5常闭,Y1回路里串了M2常闭和X4常闭。就算你手速极快同时按下X4和X5,程序上也只会让一个输出保持,另一个一定被切断。
有人问,接触器那边不是已经有电气互锁了吗,程序里还有必要再写互锁吗?非常有必要。电气互锁保护的是接触器本身不发生相间短路,程序互锁保护的是PLC输出状态不发生逻辑冲突。两道互锁一道都不能少,这是工控行业用无数次事故换来的规矩。
手动模式这里多说一句,X4和X5不是给人正常生产时用的,而是调试时把小车点动到指定位置用的。调试时你首先要让流程停止、状态复位,然后用点动按钮慢慢把车挪到装料位,再切自动启动。如果流程状态没复位就点动,M2和X4同时作用,输出关系会变得不可预测。
3.4 三种保护逻辑:急停、限位冗余、运行超时
前面讲了急停常闭接线,程序上X6串联在M0回路里就够了,按下急停,M0断开,M1到M4全部被复位,设备立刻停。这是第一层保护。
第二层保护是限位冗余。普通运料小车靠接近开关停车,但如果速度偏快、惯性偏大,小车可能冲过卸料位才停。我的习惯是在卸料位更前方,再装一个保护限位开关,比如接入X7。一旦X7动作,说明小车已经越过正常工作位置,程序立刻切断所有前进输出并报警。这个保护限位就是“保底保险丝”,平时用不上,但真到小车失控的时候,它是防止直接撞墙的最后一道闸。
第三层保护是运行超时。小车从装料位到卸料位,正常跑8秒钟就够了,如果卡死在中间、皮带脱落、接近开关坏掉,那该怎么办?不能让它一直开着电机干转。我用定时器做超时保护:
LD M2 OUT T2 K150 LD M4 OUT T3 K150 LD T2 OR T3 OUT Y004前进状态M2激活超过15秒还没到达卸料位,T2动作,报警输出Y4闪烁;返回状态M4激活超过15秒还没回到装料位,T3动作,同样报警。报警后现场人员第一时间知道设备出了问题,而不是等到物料堵死才发现。
保护逻辑这部分,宁可多写几层,也不要让任何一个安全隐患裸奔。这是我在现场吃过亏之后总结出来的原则。
4. 从GX Works2到现场调试:完整实操路径
4.1 建工程、写程序、离线模拟
先打开GX Works2,新建工程时PLC系列选FX3U/C,机型选FX3U对应型号,语言选梯形图。然后把上面那个状态切换逻辑一段段敲进去。敲完后按F4执行变换,这一步特别容易被忽略,很多人写完程序不变换就直接下载,结果下载到PLC里的还是旧程序,然后折腾半天查不出原因。
程序写完后可以先用GX Works2自带的离线模拟器跑一遍逻辑。模拟器虽然不会替你判断真实接线的对错,但验证状态切换顺序是否合理非常有效。你把M0置ON,模拟X2碰到,看M1有没有置位;把T0强制完成,看M2有没有置位。在电脑上把状态跳变理顺了,再去现场才心里有底。
4.2 上电接线检查与空载测试
到现场之后先别急着上电。打开控制柜,用万用表蜂鸣档把关键回路量一遍:急停按钮常闭点是否导通,停止按钮是否接线正确,接近开关的棕色线和蓝色线之间是否有24V。这一步花十分钟,能省下后面十倍的排查时间。
上电后先看PLC的输入指示灯,手按启动按钮,X0灯亮;拿一块金属铁片靠近装料位接近开关,X2灯亮。输入确认没毛病之后,再做空载测试:把电机主回路断路器断开,强制Y0输出,听接触器KM1有没有干净利落的吸合声;再强制Y1,看KM2动作是否正常。还要测一下硬互锁是否生效:Y0吸合状态下,程序里强制Y1置ON,看KM2会不会被KM1的常闭触点挡住,如果这时候KM2还能吸合,那说明电气互锁没接,必须停查,这个项目绝对不允许带着这种隐患载入生产。
空载测试通过后,接回电机。第一次带载调试,我强烈建议只跑单循环,不要一上去就连环跑。让小车从装料位出发,跑一个完整流程,观察它在每个状态切换处是不是干脆利落,然后再决定要不要连续循环。
4.3 在线监控与状态跟踪技巧
调试时最常用的功能就是在线监视。GX Works2连接好PLC后,在软元件批量监视窗口里把M0到M4、T0、T1、Y0、Y1全放成一屏。启动设备后,你会看到状态号按照M1、M2、M3、M4、M1的顺序跳动,每条线跳一次,小车就完成一个循环。哪个状态卡住不动,问题就锁定在哪个环节:卡在M1,可能是装料位信号丢失或者T0没动作;卡在M2,可能是卸料位接近开关没感应到;卡在M4,可能是装料位信号被什么东西挡了。这种按状态排查的方式,远比一条一条捋自锁网络快得多。
在线监视还有个强制功能,调试特别有用。比如小车需要先到卸料位,但你想快速验证返回逻辑,可以强制X3为ON模拟到位信号。但用强制功能有一条红线:强制完必须记得释放,否则你人为覆盖掉了现场真实信号,设备可能在一个虚假状态下运行,这是很危险的。
5. 现场常见问题排查与避坑实录
5.1 小车冲过站不停止,多半是检测信号有问题
这是运料小车调试里我遇到最多的问题。小车开得快,到了卸料位没停住,直接冲过去顶到挡块。排查第一步不是改程序,而是看卸料位接近开关的指示灯。很多情况下是接近开关被金属屑或者油污糊住,感应距离变短甚至误触发,导致PLC根本没收到到位信号。把传感器擦干净,重新调整安装位置,让小车实际停下时刚好在感应范围内,问题就解决了。
还有一种情况是程序里把X3的触点类型搞反了。梯形图上常开常闭一不留神就看错,该用常开用了常闭,相当于小车一到卸料位反而把信号条件断开了。遇到这种问题,直接在监视窗口看X3在什么位置变成ON,马上就能发现。
5.2 正反转切换瞬间接触器打架
空开跳闸、接触器冒烟,这种问题一出就是大事。原因基本就两个:接触器电气互锁没做到位,或者程序输出互锁有漏洞。第一个问题回控制柜查KM1线圈回路有没有串KM2常闭触点;第二个问题检查输出段是否像我上面写的那样,把对方状态的常闭触点串了进来。
还有一个现场不容易注意到的点:接触器释放需要时间,机械触点一般几十毫秒,如果在断开正转的瞬间立刻吸合反转,哪怕程序逻辑保证不重叠,接触器本身也可能因为电弧还没熄灭就重新闭合,造成瞬间短路。稳妥做法是在换向切换时加一个短暂的过渡延时,一般0.3秒左右就够,让接触器充分释放后再允许对方吸合。这个细节在频繁往返的运料小车项目里尤其重要。
5.3 接近开关信号抖动导致状态乱跳
我碰到过一次,小车到了装料位之后,M1和M4来回跳动,装料电磁阀跟着反复动作,现场看着就像程序抽风了。后来查出来是装料位接近开关检测到了小车边缘,信号在ON和OFF之间抖动,PLC扫描周期又短,状态还没稳住就被干扰信号拉走了。
解决方法是在程序里对位置信号做个防抖确认。一个简单的做法是当X3检测到之后,用定时器延时50毫秒再确认状态有效:
LD X003 OUT T5 K1 LD T5 SET M3别小看这50毫秒,它能把接触抖动、电磁干扰带来的误触发生生滤掉。另外,接近开关的屏蔽电缆要单独走线,不要和电机动力线捆在同一个线槽里,不然变频器或者接触器吸合时的高频干扰会一路窜进PLC输入点。
5.4 掉电再上电小车不在装料位,流程直接乱掉
这个场景我做项目时几乎每次都会遇到。车间突然停电,或者有人误按了紧急断电,再来电的时候,小车停的位置根本不在装料位。而程序里M0到M4都是普通保持继电器,掉电全部清零,重新上电后整个流程一片空白,你按启动按钮,M0能置上,但小车不在装料位,X2没信号,M1根本不会置位,流程就僵在那里。
遇到这种情况,正确操作是先把设备转到手动模式,用点动按钮把小车开回装料位,然后再切自动启动。程序上如果想做得更顺手,可以在上电初始脉冲M8002这里做一次状态清零:
LD M8002 RST M1 RST M2 RST M3 RST M4这样保证PLC一上电,流程状态一定是干净的,不会因为断电前的残留状态造成意外启动。虽然麻烦一点,但安全永远值得。
5.5 问题排查速查表
最后整理一张我实际调试中反复用到的排查表,可以直接打印出来贴在控制柜门上:
| 现象 | 可能原因 | 处理办法 |
|---|---|---|
| 按启动没反应 | 急停回路断开、PLC没RUN、X0没信号 | 查X6输入灯、查RUN开关、量启动按钮 |
| 装料一直不停 | T0没启动、K值太大、M1没置位 | 监视T0当前值、查X2信号 |
| 小车冲过站不停 | 接近开关脏污、感应距离不当、触点类型错 | 清洁传感器、重调位置、查程序常开常闭 |
| 换向时跳闸冒烟 | 接触器互锁缺失、程序互锁缺失、换向太快 | 补加互锁触点、加0.3秒换向延时 |
| 状态来回跳 | 接近开关信号抖动、电源受干扰 | 加防抖延时、屏蔽电缆独立走线 |
| 掉电后流程乱 | 上电状态残留、小车不在装料位 | 加M8002初始复位、手动回装料位 |
| 报警灯常亮 | 前进或返回超时、机械卡死 | 查X2/X3信号、查机械传动部分 |
调试到现在,整套运料小车的控制逻辑已经完整落地了。最后说点我自己操作过程中的体会:这种项目梯形图本身并不难,真正难的是对手里的设备有没有敬畏心。急停用常闭、接触器双重互锁、停止后清空全部状态,这些不是书上为了凑字数写的,全是现场用教训换来的。我现在的习惯是程序里宁可多写一层保护,也不让任何隐患裸奔。
这个项目后续想扩展也很容易,比如给小车加多站点送料,本质就是在M1到M4这套状态机上再加几个状态;想上变频器做平滑启停,也只需要把Y0/Y1输出从接触器换成变频器端子控制。骨架不变,往里面添状态就行。希望这篇对你调试运料小车有帮助。