
上个月我刚好完成一条物料运输线控制系统的改造现场三段皮带输送机两台光电传感器一组分拣气缸原来的继电器控制柜用了快十年线路像意大利面启动时接触器噼里啪啦响一出故障能查半天。客户只提了一个要求“换PLC别出乱子。”项目做完后调试还算顺利但中间也踩了几个不算深但很典型的坑。这篇文章我不打算写教科书式的方案而是把这次设计从需求梳理、硬件选型、电气设计到PLC程序、变频器控制、组态仿真和现场调试的完整过程摊开来讲希望能给正在做PLC毕业设计、自动化竞赛或者从电工转工程师的朋友一个能直接参考的样板。物料运输线控制系统这个题目很常见但真正做得顺手的人往往不是会写梯形图而是能先把物料怎么流、故障怎么断、停止怎么停想清楚。1. 物料运输线的控制需求先搞清楚线体怎么动再谈写程序1.1 从一段典型的运输线说起一条标准的物料运输线通常由进料段、主输送段、分拣段和出料段组成。我这次项目里的配置是M1是第一段皮带负责把上游来料往前送M2是中间主输送带速度稳定承载大部分物料M3是出料皮带物料最终从这里进入分拣工位。每段皮带由独立的三相异步电机驱动皮带上安装光电传感器用于检测物料是否到位分拣处有电磁阀控制的气缸把不合格品推到侧边流道。实际运行看起来很简单就是启动、送料、分拣、停止但如果控制逻辑处理不好会出现几个很实在的问题启动时如果所有皮带同时转后段还没跑起来前段已经送料物料就会滞留在交接处堆成一堆停止时如果先停后段皮带上残留的料又会堆在尾部。所以客户一开口说“自动跑就行”我一般都会追问一句“启停顺序要不要按工艺走”这种项目真正的难点就在这里时序。1.2 工艺对控制的硬性要求物料运输线的控制需求通常可以归纳成五条我建议拿到任何类似项目都先按这五条去核对一遍比急着写程序高效得多。顺序启动启动时先启动出料方向最后一段M3间隔2秒再启动M2再间隔2秒启动M1。目的是让后级皮带先转起来前级再给料物料到了皮带交接处马上被带走不会堆积。逆序停止停止时先停M1间隔2秒停M2再间隔2秒停M3。目的是把皮带上的余料往出料口方向排清下次再启动时皮带上没有积压。联锁保护任意一台电机过载、变频器报警、急停被按下系统必须立即切断给料段并让相关皮带停止或按安全策略停车。故障报警和锁存故障发生后不能因为传感器信号瞬间恢复正常就自动复位必须要有锁存和人工确认复位的环节。手动/自动切换调试和检修时要能单台启停每段电机运行时要能一键自动联动。这些需求听着基础但每一项都直接影响硬件设计和程序结构。比如“逆序停止”如果不提很多新手会把三台电机放在一个M区并联输出按停止直接全断皮带上的物料就全堆在出口了。1.3 为什么这种项目选PLC而不是继电器或单片机我遇到过客户拿着单片机方案来问能不能做运输线控制也有老师傅觉得继电器“简单粗暴”没必要上PLC。我的看法很明确这种多段输送、带联锁和报警、可能还要接变频器和触摸屏的项目PLC是最均衡的选择。从可靠性和抗干扰看继电器控制的逻辑一旦固化在接线里修改联锁关系就要改线工厂环境里接触器线圈通断产生的电弧和电磁干扰很容易让中间继电器误动作。单片机做逻辑控制没问题但需要设计外围电路处理输入滤波、输出驱动、电源隔离开发周期长现场电气维护人员也难上手修改。PLC的核心优势是逻辑和接线分离。改程序不用改线梯形图和时序逻辑接近电工语感自带的数字量滤波和隔离又天然适合工业环境。另外S7-1200、三菱FX5U这一档的小型PLC自带以太网口后面想加触摸屏、接变频器通信、连上位机硬件上都不用大改。价格上一台中小型PLC和一堆继电器相比不一定更贵但后期维护节省的工时远远值回差价。2. 硬件选型与电气设计I/O点数不一次算准后面全是返工2.1 PLC选型与I/O点数估算这次项目我选了西门子S7-1200 CPU 1214C DC/DC/DC。选它的原因有三条一是客户现场以太网环境成熟后续要接产线管理系统二是STEP 7 (TIA Portal)里做组态和仿真比较方便三是CPU自带14点数字量输入和10点数字量输出这个项目点数刚好够还能留余量。选型之前最重要的一步是先把I/O点数算清楚。我建议做一张表把每个输入信号和输出对象列出来再统计总数。下面是这个项目的I/O分配表可以当作模板套用。类别信号名称地址分配说明输入启动按钮I0.0常开自动模式启动输入停止按钮I0.1常开自动模式停止程序取常动断逻辑输入急停按钮I0.2常闭触点接入安全回路输入M1过载继电器I0.3热继电器动断触点输入M2过载继电器I0.4热继电器动断触点输入M3过载继电器I0.5热继电器动断触点输入进料光电传感器I0.6检测来料输入分拣位光电传感器I0.7检测物料是否到位输入气缸缩回到位I1.0磁性开关输入气缸伸出到位I1.1磁性开关输入手动/自动切换I1.2拨动开关输出M1接触器/变频器启动Q0.0通过中间继电器输出M2接触器/变频器启动Q0.1通过中间继电器输出M3接触器/变频器启动Q0.2通过中间继电器输出电磁阀控制Q0.3分拣气缸伸出输出故障指示灯Q0.4红色声光报警器输出运行指示灯Q0.5绿色指示灯这个表里输入13点、输出6点加起来19点CPU自带的24点已经足够。我还是在机架上预留了一个SM 1223数字量混合模块的位置万一后面客户要加几个物位传感器不需要换PLC插模块改程序就行。选型时留15%到20%的I/O余量是控制柜设计的基本习惯不要卡着点数买。2.2 主电路与安全回路的搭建主电路涉及电机的直接启动或变频器驱动。M2如果要求平滑调速就要走变频器M1和M3如果只是启停可以用接触器直接启停但为了统一保护也可以都从变频器输出侧取电。这决定了主回路的画法总断路器下来分成三路一路给变频器供主电源另外两路给接触器KM1、KM3供主电源。安全回路的搭建比主回路更容易被忽视。急停按钮的常闭点不要只进PLC输入等程序去处理应该把急停触点串联在接触器线圈供电回路里。也就是说急停一按不管PLC程序里是什么状态直接切断接触器线圈的220V或24V控制电源电机立刻失电。这是硬件级的安全措施不允许通过软件去代替。同时急停触点也接一个输入点进PLC让程序感知到急停信号用来复位运行状态和报警。还有一点提醒PLC的数字量输出点一般不建议直接驱动接触器线圈或电磁阀感性负载拉弧会损伤输出继电器触点。我在每路输出到负载之间都加了中间继电器PLC输出回路驱动中间继电器线圈中间继电器触点再去驱动接触器和电磁阀这样既隔离又延长PLC输出使用寿命。2.3 传感器与接线中容易踩的坑物料运输线上用得最多的是光电开关和接近开关。买传感器之前先确认PLC输入模块是源型输入还是漏型输入不然NPN和PNP选错信号死活不进PLC。S7-1200的DC输入默认是源型输入sourcing一般配PNP传感器棕色线接24V蓝色线接0V黑色线是信号输出高电平有效。三菱FX系列大多数是漏型输入sinking配NPN传感器黑色线输出低电平有效。项目里如果用西门子PLC却买了NPN的漫反射光电不是不能用要改接法或者外接中间继电器转换但第一现场很容易把货退了重新买。电磁阀控制回路里线圈断电瞬间会产生很高的反向感应电动势如果PLC输出直接驱动容易把输出点打坏。所以电磁阀正极并联续流二极管或者像我前面说的用中间继电器做隔离后再驱动。气缸上的磁性开关是两线制的接线简单但要注意它分NPN和PNP两种类型PLC输入公共端要对应。3. PLC程序设计的核心顺序、联锁、故障锁存与复位3.1 把工艺“翻译”成程序状态程序不只是让电机转而是要把上一节说的工艺要求变成具体的状态切换。我在设计程序时先写了一段“人话”描述不急着翻梯形图自动循环启动时系统进入启动序列Q0.2M3先得电延时2秒后Q0.1M2得电再延时2秒后Q0.0M1得电。三条皮带都运行且无故障系统进入正常运行状态。停止时按下停止按钮Q0.0先断电延时2秒后Q0.1断电再延时2秒后Q0.2断电系统回到待机。如果任何电机过载或急停触发故障锁存位置位所有输出按安全策略断开故障灯亮起。此时必须排除故障后按下复位按钮才能解除故障锁存。我习惯把流程文字写在电气图纸旁边厂家审核时方便沟通调试时也能对着它检查程序。这比一上来就拖梯形图块高效得多。3.2 起保停与顺序启动的关键写法顺序启动最忌讳的方式是把三台电机输出位互相独立写三个互不相干的起保停回路。这样启动可能同时动作停止也毫无顺序。正确的做法是把“前级皮带启动”的允许条件串入“后级皮带已经运行”的状态。以S7-1200的SCL片段为例体现顺序启动的联锁逻辑VAR runEnable : BOOL; delayM2 : TON; // M1启动后延时控制M2 delayM1 : TON; // M2启动后延时控制M1 faultLatch : BOOL; END_VAR runEnable : autoMode AND startBtn AND NOT stopBtn AND NOT faultLatch AND NOT eStop; // M3出料段最先启动 Q3 : (runEnable OR (Q3 AND NOT stopBtn AND NOT faultLatch AND NOT eStop)); // M2在Q3运行2秒后允许启动 delayM2(IN : Q3, PT : T#2S); Q2 : ((Q3 AND delayM2.Q AND runEnable) OR (Q2 AND NOT stopBtn AND NOT faultLatch AND NOT eStop)); // M1在Q2运行2秒后允许启动 delayM1(IN : Q2, PT : T#2S); Q1 : ((Q2 AND delayM1.Q AND runEnable) OR (Q1 AND NOT stopBtn AND NOT faultLatch AND NOT eStop));这段程序里Q3是最后一段Q2的启动条件必须包含Q3的常开状态和2秒延时输出Q1的启动条件必须包含Q2的常开状态。换句话说前级永远不可能比后级先跑起来。停止顺序的写法是另一种思路。我在这里用文字说明因为改成SCL后变量会多一些Q1在接收到停止信号时立即断开Q2的保持回路上串联一个“Q1停止后延时2秒”的定时器触点Q3的保持回路上串联一个“Q2停止后延时2秒”的定时器触点。这样停止时自动按照M1→M2→M3的顺序排料不会堆料。3.3 故障锁存、复位与报警逻辑故障锁存是物料运输线安全运行里很关键的一段。热继电器的动断触点串在PLC输入里时设备过载后热继电器动作输入信号消失。如果程序只做成临时停止热继电器冷却后自动复位触点闭合设备会突然再次启动这是很危险的。所以程序里要做一个锁存位。SCL片的思路如下// 故障锁存 IF NOT I0.3 OR NOT I0.4 OR NOT I0.5 OR NOT I0.2 THEN faultLatch : TRUE; END_IF; // 复位 IF resetBtn AND I0.3 AND I0.4 AND I0.5 AND I0.2 THEN faultLatch : FALSE; END_IF;注意I0.2是急停按钮的常闭触点正常时I0.2为TRUE急停按下后变FALSE锁存故障。复位按钮要等所有故障源都恢复正常之后才有效防止故障没有排除就强行复位。报警灯在故障锁存位为TRUE时持续亮同时蜂鸣器响。我还会加一个“消音”输入点允许现场人员暂时关闭蜂鸣器但保留灯光这也算人性化设计。这些逻辑用梯形图写也不复杂关键在于有没有把“锁存”这个概念做进去。4. 变频器与PLC控制的实现启停、调速与通信4.1 PLC数字量输出控制变频器启动和普通开关量控制变频器一样吗很多刚接触PLC的同行会问PLC数字量输出点控制变频器和直接用开关量控制变频器是不是一回事从电气原理上说PLC输出的本质就是开关量要么闭合导通要么断开所以“PLC数字量输出点控制变频器启停”确实就是“开关量控制变频器”。但实际工程上要关心一点PLC输出点能不能直接接变频器的数字输入端子。我的习惯是无论PLC输出点是继电器型还是晶体管型统一通过中间继电器转接再用继电器触点接变频器的数字输入端子。比如三菱/汇川变频器的STF、STR端子内部是光耦输入公共端SD接0V。PLC控制中间继电器KA的线圈KA的触点一端接24V正极另一端接STF当KA吸合时STF得到高电平信号正转启动。这样PLC的晶体管输出只带中间继电器线圈电流很小不会因为变频器端子的输入特性产生匹配问题。有一点必须提醒控制变频器启动的开关量信号和变频器内部的“启停逻辑模式”不是一回事。变频器启动方式可以设成端子控制、面板控制、通信控制只有设成端子控制时外部开关量才能启停。这个参数如果没设对PLC输出点动作了但电机不转很多人第一反应是PLC坏了其实只是变频器参数的问题。4.2 模拟量调速与总线调速的方案取舍物料运输线如果需要按工艺调节皮带速度最简单的方案是用PLC的模拟量输出模块给变频器输出0-10V或4-20mA信号。端子接线是模拟量输出AI1和GND接到变频器模拟量输入端子变频器频率源设成“模拟量给定”。这种方案直接、可靠但有一个缺点速度值是多少没有反馈触摸屏上虽然能显示设定频率但变频器实际输出频率需要另外通过模拟量输入或通信读取。另一种方案是走通信调速比如西门子S7-1200和变频器之间用Modbus RTU或者汇川、台达变频器用RS485。接线只有两根线加屏蔽层却能同时下发频率给定、启停指令还能实时读回输出频率、输出电流、母线电压、报警代码。我这条运输线最后就是用的Modbus RTU因为M2变频器和PLC控制柜距离不到20米走RS485加终端电阻完全能保证通信质量。通信参数要两端一致。下面是我在汇川变频器上设置的一组常用参数可以当作参考功能码参数值含义F0-022频率源设定为通信给定F0-011运行命令通道为端子控制或通信控制按需要Fd-001从站地址1Fd-013通信波特率9600bpsFd-020数据格式8-N-1Fd-030无奇偶校验PLC侧用Modbus通信指令比如西门子的MB_MASTER每隔200ms读一次变频器的运行状态和输出频率保证触摸屏数据刷新够快又不会因为通信太频繁占用PLC扫描周期。4.3 用数字量组合实现多段速的替代思路并不是所有现场都支持加模拟量模块或者通信线。如果PLC本身数字量输出点有富余还可以用多个数字量端子控制变频器的多段速功能。比如变频器有X1、X2、X3三个数字输入端子通过通断组合可以切换7种预设频率。这种方式适合速度档位固定的场合比如运输线分为慢速进料、快速输送、中速分拣三个档位用两个PLC输出点就能控制三档切换成本最低但缺点是无法连续调速而且多段速的参数需要在变频器里一个个设。我的建议是如果后期可能要改速度方案优先选通信方式因为只需要改参数和程序不用改接线如果项目工期紧、现场不熟悉通信就用模拟量如果速度档位已经固定以后也不会变多段速确实省事。没有一种方案是绝对的关键是按现场条件取舍。5. 触摸屏组态与离线仿真调试把程序跑起来之前先在监视图上找问题5.1 组态画面怎么设计才实用物料运输线控制系统的触摸屏画面不用做得花哨但要把运行状态和操作入口放在最顺手的位置。我在组态时的主画面放了三个皮带电机分别用灰色代表停止、绿色代表运行、红色代表故障画面中间画一条带箭头的传送线光电传感器检测到物料的瞬间会有一个小方块在传送线上移动分拣气缸动作时也有动画反馈。操作区域放自动启动、自动停止、故障复位三个按钮再单独放一组手动调试画面可以在手动模式下单独启停M1/M2/M3和测试电磁阀。最上方是报警信息栏故障触发时显示“M1过载”“急停按下”之类的文本并闪烁提示。组态变量必须和PLC程序的变量名一一对应这个环节最怕一盘散沙。我一般在PLC里建一个全局数据块把所有HMI需要读写的变量都放进去触摸屏只访问这个数据块不直接分散访问I/O地址这样排查通讯问题也方便。5.2 使用仿真软件和强制表提前验证逻辑TIA Portal自带S7-PLCSIM仿真就算手上没有实物PLC也能把程序跑起来。我建工程时会把程序模块、变量表、组态画面一起建好然后启动PLCSIM把程序下载到虚拟PLC里再打开强制作表强制I0.0I1观察启动顺序和时间是否按2秒一步一步跑。强制表的作用就是模拟现场信号。比如想验证M2过载时Q1、Q2、Q3是否按预案停车直接强制I0.4为FALSE看故障锁存位是否为TRUE故障灯是否输出。这一步能把90%的逻辑问题在办公室提前发现等到了现场再到柜子里去改程序是很浪费时间的。仿真还有一个好处是可以在触屏模拟器里同步监控画面。TIA WinCC和PLCSIM联动画面上的按钮能被“按下”电机状态也会跟着变化。我在做这个项目时就通过模拟发现停止时序里M3和M1同时断电了原因是我把停止定时器写在了同一个网络里程序里看起来一句话实际上逻辑执行顺序不对。这种问题很难靠眼睛看梯形图找到仿真一跑就露馅。5.3 虚拟机环境连接PLC的网络模式问题现在很多笔记本上跑的是虚拟机里的TIA连接实物PLC时经常出现搜索不到设备或者下载失败的情况。我踩过几次坑之后统一的做法是VMware里把虚拟机的网络连接模式改成桥接模式让虚拟机里的IP和PLC的IP在同一个物理网段内不要用NAT。NAT模式下虚拟机发出的通信包会被地址转换PROFINET和S7协议很容易超时搜索工具扫半天都找不到PLC。操作上还要检查Windows防火墙放行TIA相关的端口和程序必要时临时关闭防火墙测试。物理机的有线网卡如果被设置成节能关闭也会导致虚拟机网卡断流。把这些检查完基本就能解决90%的“连不上PLC”问题。顺带多说一句如果只是在虚拟机里做纯仿真不接实物PLC那模式和IP都不重要PLCSIM走的是内部接口不需要物理网卡。6. 联机调试踩坑与进阶扩展6.1 一次运输线调试排故的完整过程这个项目真正到现场第一次通电调试时出过一个问题M1不动作但PLC程序仿真完全正常。排查的过程分享出来也许能帮你少走弯路。我的排查链路是这样的在触摸屏上手动启动M1观察PLC的Q0.0输出指示灯。指示灯亮了说明程序逻辑是对的输出点已经得电。用万用表量PLC输出端子到中间继电器线圈之间的电压测得24V正常但继电器不吸合。怀疑中间继电器线圈坏换一只新的依旧不吸合。检查公共端发现中间继电器线圈的负极和PLC输出的公共0V没有接到同一个回路上。柜子里接线时安装工把中间继电器的负极单独并到了电源上PLC输出公共端和电源负极之间又没有导通结果输出点带电却没有电流回路。这个问题其实是典型的接线回路问题不是PLC问题。排查的时候不要一上来就怀疑程序先按“程序输出有没有动作→输出端子有没有电压→负载回路是否形成”三步走能省很多时间。6.2 变频器干扰导致的输入信号误动作运输线运行了几天后现场反馈光电传感器偶尔会闪一下就恢复但分拣气缸有时会误动作。我过去查了半天最后确认是变频器干扰问题。变频器的输出线缆和传感器的信号线在同一个线槽里走了将近5米变频器IGBT开关产生的脉冲干扰耦合到了光电传感器信号线上导致PLC输入信号被短暂拉高。处理办法有三个信号线和动力线分开走管不要鼓在一个线槽里变频器输出侧加磁环或者使用屏蔽电缆屏蔽层单端接地光电传感器的供电不要从变频器附近取从PLC侧隔离电源取。给PLC输入信号设置数字量滤波也是有效手段。S7-1200的输入点可以在硬件组态里设置滤波时间和输入延迟把脉冲干扰滤掉。但这个滤波时间不能设置太长否则真实传感器信号也会被延迟需要根据现场频率试验调。我最后把滤波时间设在0.1ms加上物理上分离布管再试了几天误动作彻底消失。6.3 从单线体到多线体联动和数字化物料运输线控制系统做完之后还可以往两个方向延伸。一是多线体联锁几条运输线之间有交接关系时用Profinet或Modbus TCP把每条线的PLC连接起来某条线停机时自动通知上游线停止供料避免物料堆积。二是往数字化方向走PLC把运行状态、故障信息、物料计数通过OPC UA或Modbus TCP上传到产线管理系统实现实时监控和报表统计。这些进阶功能对硬件的要求并不高S7-1200这一级PLC已经具备很好的通信能力关键还是先把基础的单线逻辑做好。我见过不少项目基础程序还没稳定就急着加通信最后现场问题全堆在一起通信协议和逻辑故障互相干扰反而更难排查。循序渐进才是最快的路。做这种项目久了我个人最深的体会是PLC系统设计更像“先想清楚边界、再写程序”的工程而不是单纯写代码。I/O表算准、安全回路做硬、顺序联锁想透、故障锁存做好、仿真提前跑现场调试就只是验证和微调。希望这篇物料运输线控制系统的设计与实现过程能帮你少踩几个我踩过的坑。