不用把分拣系统想得多神秘,说穿了它就是“眼睛看到、脑子判断、手执行”这三件事。但真正把它做成一条稳定跑起来的产线,里面的门道远比教科书上那几段梯形图多。我最近刚完成一套基于PLC的大小球分拣控制项目,从传感器选型到组态画面优化全程自己折腾了一遍。这篇文章就把整套系统的设计思路、硬件选型、程序逻辑、组态优化以及调试中踩过的坑完整梳理出来,给正在做类似物料分拣项目、或者准备入门PLC工程应用的朋友一个可直接参考的复盘。
这个系统的应用场景很典型:一条模拟装配产线的前置分选工位,需要对混合来料中的大球和小球进行自动判别、分拣、计数,并要求在生产过程中能实时监控设备状态、记录产量数据。整条线只用了两台普通电机、三个气缸、几组传感器,外加一台紧凑型PLC和一套组态软件。开发过程中最难的并不是某个单独的功能,而是如何让检测、执行、监控三个环节完美配合,实现稳定、高效的分拣节拍。
- 项目需求拆解与整体方案选型
1.1 为什么选“大小球分拣”作为切入点
很多人觉得大小球分拣只是个教学实验,实际产线上谁会分这个。但真正做过工业项目就会发现,这套系统的底层逻辑和很多实际产线一模一样:来料检测、位置跟踪、分拣执行、计数统计、异常报警,这套流程放到包装行业的缺件检测、食品行业的重量分选、医药行业的外观剔除里,本质上是完全相通的东西。
区别只在于检测手段不同、执行机构不同、节拍要求不同,但控制框架是通用的。所以我把大小球分拣当作一个“麻雀虽小五脏俱全”的样本,把整个项目拆开揉碎来做,为的是沉淀出一套可复用的控制方案。这个项目完整覆盖了PLC控制系统设计中最核心的几个环节:传感器信号采集、逻辑判别、多工位位置跟踪、气缸顺序控制、人机交互界面以及数据统计报表。
从工程角度讲,这个系统还有一个突出的优点——成本低、调试方便。整套硬件投入可控,现场只需要单相电源和气源就能跑起来,非常适合作为自动化方案验证的试验平台。不管是刚入职的电气工程师拿来练手,还是老工程师做方案验证,都能在这套系统上快速实现并验证自己的想法。
1.2 分拣工艺流程与控制需求定义
工艺流程设计是整个项目的第一步,流程图不画出来,后面写程序就是无头苍蝇。这套系统的工艺流程可以分成六个环节:上料、检测、判别、运送、分拣、复位。
来料通过振动料仓或人工放入进料口,沿斜槽滑落到传送带上。传送带以恒定速度运转,工件经过检测区时,由垂直方向安装的两组对射光电传感器完成尺寸判别。判别完成后,工件继续随传送带前进,到达分拣工位时,对应的推料气缸动作,将大小球分别推入各自料箱。工件推落之后,气缸缩回复位,等待下一个周期。整个流程听起来简单,但实际需要考虑的细节非常多:工件在传送带上的间距如何保证,多球同时在传送带上时怎么准确跟踪,气缸动作太早或太晚会把球打到什么位置,计数信号如何防止重复或漏计。
控制需求分解下来主要有这几块:系统必须具备手动和自动两种运行模式,手动模式用于单机调试和检修,自动模式用于正常生产;检测系统需要可靠区分大小球,并在传送带连续运行的条件下准确跟踪每个工件;分拣执行需要与传送带速度匹配,保证动作位置的准确性;系统还需具备完整的报警体系,包括气源压力不足、电机过载、气缸卡阻等;最后产量数据要按大小球分别统计,断电后数据不丢失。
1.3 方案选型背后的逻辑
方案选型阶段,我对比过几套做法。用视觉检测是能解决问题,一套工业相机加光源再加视觉软件,成本直接翻好几倍,而且对现场光线环境敏感,后期维护要求也高。用称重传感器判别看起来简单,但需要工件逐个通过称重台,节拍上很吃亏,传送带连续运转模式下很难实现。最终选择了双光电对射高度检测方案,核心逻辑很朴素:小球经过时只能遮挡下方传感器,大球经过时会同时遮挡上下两个传感器。靠这个差异就能稳定判别。
为什么这个方案最合适?因为光电传感器响应时间在毫秒级,对运动中的工件检测几乎没有延迟,而且对光式检测不受工件颜色、表面反光影响,现场稳定性最好。执行机构方面,推料采用双作用气缸加电磁阀,响应快、推力足、成本低,完全满足这个场景的需求。这套组合下来,整个系统的硬件成本可以压得很低,但功能和可靠性一点不打折扣。选型时还有一条经验:别把所有I/O点全部用满,留出百分之十五到二十的余量,后期加功能、加报警信号时你就知道多庆幸当初这个决定。
- 硬件配置与关键参数计算
2.1 PLC选型与I/O点估算
PLC选型直接决定了系统的扩展能力和运行稳定性。做这套系统时,我选择了一款市面上最常见的紧凑型PLC,CPU集成数字量输入输出,带以太网接口,既能满足当前控制需求,也为后续组态通信预留了接口。为什么选紧凑型而不是更小的一体机?因为一体机虽然便宜,但扩展性太差,后面想加模拟量或者通信模块就麻烦了。紧凑型PLC体积不大,性能足够,性价比均衡。
I/O点估算是个基本功,我按输入输出分别做了清单。输入信号包括:启动按钮、停止按钮、急停按钮、手动/自动切换开关、复位按钮、小球检测传感器、大球检测传感器、气源压力开关、传送带电机热继电器信号、气缸到位传感器(分拣工位前后共两组)。输出信号包括:传送带接触器、小球分拣电磁阀、大球分拣电磁阀、三色灯塔绿灯、三色灯塔黄灯、三色灯塔红灯、蜂鸣器。算下来输入约需十二点,输出约需七点,再加上余量,选CPU本身集成的二十点输入、十六点输出完全够用,甚至还能富余出来接备用信号。
这里想多说一句关于输出类型的细节。如果PLC输出点是继电器型,控制气缸电磁阀和接触器没问题,但继电器响应速度相对慢,高频动作下寿命也会缩短。方案里我选择的是晶体管输出型PLC,虽然带负载能力不如继电器,但通过外接中间继电器转接,既能获得毫秒级响应速度,又能保护PLC输出点不被感性负载冲击损坏。这种“晶体管输出加中间继电器”的组合,在自动化项目里是兼顾性能和可靠性的经典做法。
2.2 大小球检测装置的安装与尺寸关系
双光电检测方案成败的关键在于安装尺寸。系统做的工件规格是:小球直径三十毫米,大球直径五十毫米,传送带工作面宽度两百毫米。两组对射光电在检测区垂直布置,下方传感器中心距离传送带工作面设为一百八十毫米,上方传感器中心距离传送带工作面设为二百二十毫米,上下两组传感器垂直间距四十毫米。
为什么这么定?要解释清楚这个逻辑。小球直径三十毫米,当其最高点经过下方传感器光线时,因为自身直径原因,无法触达上方传感器光轴高度,只会遮挡下方一路信号。大球直径五十毫米,通过时会同时遮挡上下两路。垂直间距四十毫米,恰好大于小球直径三十毫米、小于大球直径五十毫米,这就形成了“小球挡下不挡上、大球上下都挡”的稳定判别条件。安装时传感器支架要调水平,光轴对准传送带中心线,安装完成后用两种球各跑十遍验证检测可靠性。现场调整时还有个注意点:如果传感器灵敏度旋钮调得太高,会误触发;太低又会漏触发,需要边调边观察PLC输入指示灯状态。
2.3 执行机构选型与气路设计
分拣执行机构采用双作用气缸,缸径十六毫米,行程五十毫米,工作压力设定在零点五兆帕。为什么用双作用气缸?因为单作用气缸靠弹簧复位,响应慢且复位力不稳定,分拣这种需要快速往复的场合不适合。双作用气缸通过电磁阀控制进出气,推出和缩回都是主动动作,速度快、位置准确。
气缸理论推力可以简单估算一下:十六毫米缸径的气缸在零点五兆帕下,理论推力大约等于压强乘以活塞面积,也就是零点五兆帕乘以π乘以半径的平方,算下来约一百牛。大小球工件重量都很轻,加上传送带上的滑动摩擦力也不大,一百牛推力完全足够,还有很大的余量。气路设计上,每个气缸配一个二位五通单电控电磁阀,电磁阀得电气缸推出、失电气缸缩回。这种单电控方案在断电时气缸自动复位,安全性上比双电控更有优势。气源处理方面,过滤减压阀必须装,把气源里的水分和杂质滤掉,否则电磁阀阀芯很容易卡死,这是现场调试中非常常见的一个故障源。
传送带驱动选了一台三相异步电机加蜗轮蜗杆减速机,配合变频器调速,把线速度调到每秒二百五十毫米左右。这个速度不算快,但足够稳定,而且给传感器检测和气缸动作留了足够的响应时间。
- 控制程序设计与位置跟踪算法
3.1 程序整体框架:模块化组织
程序架构我采用了模块化思路,没有把所有逻辑堆在一个主程序里。整个程序划分为初始化模块、检测判别模块、位置跟踪模块、分拣执行模块、计数统计模块、手动控制模块、报警处理模块。每个模块独立成块,用统一的接口变量连接。这样做的直接好处是调试时能快速定位问题在哪一段逻辑,哪个模块单独测试都可以。
PLC程序运行时,主程序按扫描周期循环调用各个功能块。扫描周期本身很短,但程序里所有涉及时间的逻辑,比如延时确认、脉冲输出,都用定时器来处理,不依赖扫描计数,避免CPU负载变化影响时间精度。这里想强调一个工程习惯:每个功能块里只操作它自己的接口变量,不直接改全局变量。这个习惯在项目规模变大以后尤其重要,不然改一处逻辑带崩一片。
3.2 大小球判别逻辑
检测判别是整套系统的大脑。程序对两组光电传感器信号进行采集后,按照组合状态输出判别结果。下方传感器信号为真、上方传感器为假时,判定为小球;上下两个传感器都为真时,判定为大球。但实际应用中传感器的通断不是理想状态,工件刚进入光轴和离开光轴时,信号会有短暂的抖动。
如果直接拿原始信号做判断,会出现同一个球被触发多次、计数乱跳的情况。解决办法是在程序里加滤波:传感器信号持续为真超过五十毫秒才确认有效。五十毫秒的延时对每秒二百五十毫米的传送带来说,意味着工件多走了十二点五毫米,完全不影响分拣准确性,但信号稳定性大幅提升。这个“软件去抖”的思路在工业现场非常实用,不管是光电传感器还是接近开关、机械限位,只要有触点抖动或信号毛刺,都可以用类似方法处理。
3.3 多工件位置跟踪队列
这是整套程序里含金量最高的部分。传送带是连续运行的,检测区和分拣区之间有一段距离,检测完成之后到分拣动作开始,中间存在时间差。如果传送带上同时只有一件球,那用固定延时就能解决,等到时间了推气缸就行。但如果来料速度快、传送带上同时有三四个工件,固定延时必然出错——前一个球还没分拣完,后一个球已经到分拣区了。
我用移位寄存器思想实现了一个工件位置跟踪队列。程序内建立一个长度为八的数组,每个元素对应传送带上的一个位置槽位。检测区每检测到一个工件,就把它的类型编码写入队列头部,小球写一,大球写二,空位为零。然后每个程序扫描周期对队列进行移位操作,让数据按照传送带运行方向逐步向分拣口移动。当某一位移动到分拣口对应的槽位时,根据该位数据确定是触发小球气缸还是大球气缸。整个过程不依赖固定时间,而是按位移推进,传送带速度变化时也能自动适应,这比固定延时方案高了一个维度。
// 工件跟踪队列处理逻辑(SCL风格伪代码) // Queue: 长度为8的整数数组,承载工件类型编号 // ShiftClock: 移位时钟,每100ms触发一次位移 IF ShiftClock THEN // 队列依次向分拣口方向移动 FOR i := 8 TO 2 BY -1 DO Queue[i] := Queue[i-1]; END_FOR; // 将新检测到的工件类型放入队首 IF NewPartDetected THEN Queue[1] := PartTypeCode; ELSE Queue[1] := 0; END_IF; END_IF; // 分拣口判断(队列第4位对应分拣工位) CASE Queue[4] OF 1: 小球气缸 := TRUE; 2: 大球气缸 := TRUE; 0: 气缸 := FALSE; END_CASE;这里有一个关键的参数设计,就是移位时钟周期和队列槽位长度的匹配关系。传送带线速度是每秒二百五十毫米,检测区到分拣区距离约六百毫米,那么工件从检测到分拣口大约需要二点四秒。队列有八个槽位、移位周期一百毫秒,即队列覆盖长度为八百毫米,刚好覆盖这段距离,还留了二百毫米的余量。为什么要留余量?因为传送带启动或停止的瞬间,实际速度会有波动,队列覆盖长度大于物理距离才能保证任何速度波动都不丢位置。这个参数在调试阶段计算调整好后,整个系统的分拣准确性就很稳定了。
3.4 手动模式与安全联锁
自动模式之外,手动模式也是必不可少的一部分。手动模式下,操作员通过组态画面或现场按钮逐个控制传送带启停、气缸推出缩回,用于设备检修、位置调整和单步调试。但手动模式有一个铁律:两个分拣气缸在任何时候都不能同时推出,否则会把工件挤在传送带上,甚至损坏机械结构。程序里做了互锁判断,大球气缸动作时小球气缸输出被强制复位,反之亦然。这个互锁逻辑不仅在程序里做了,我还在电气回路里用中间继电器的常闭触点做了硬件互锁,双重保险。
安全联锁方面,急停按钮接入PLC的专用中断输入,触发后立即切断所有输出,同时组态画面弹出报警提示。气源压力开关信号接入程序,压力低于零点三兆帕时自动暂停分拣动作并报警,防止气缸推力不足造成分拣位置偏移。电机热继电器动作则切断传送带输出并报警。另外,所有计数器数据都存储在掉电保持区,断电重启后产量数据不丢失,这个需求在做数据统计时非常关键。
- 组态画面设计与优化实践
4.1 画面架构与交互设计
组态软件选了一款常见的国产组态平台,通过以太网与PLC通信。画面设计上我没有做一个大而全的界面堆砌所有信息,而是按功能拆分成了四个画面:主监控画面、运行参数画面、报警记录画面、数据报表画面。
主监控画面是操作员最常面对的界面,也是组态设计的核心。画面中央绘制传送带、检测区、分拣工位和料箱的俯视示意图。传送带用动画效果表现运行方向,检测区用两个光轴连线表示传感器,分拣气缸用矩形块表示推出和缩回状态。系统各个设备的运行状态用颜色区分:运行是绿色、停止是灰色、故障是红色。每一个状态点都和PLC变量实时绑定,信号变化后画面刷新时间控制在毫秒级,操作员看到的设备状态就是现场真实状态。
运行参数画面集中展示关键参数:传送带当前速度、总产量、小球产量、大球产量、气源压力、设备运行时长。这些数据以数值和仪表盘两种形式呈现,方便操作员快速读取。报警记录画面按时间顺序显示报警信息,每条报警包含发生时间、报警内容、确认状态。数据报表画面则提供按班次、按天查询产量的功能,并可以导出数据。
4.2 数据绑定与通信优化
组态画面和PLC之间的数据交换是通过变量绑定实现的。做通信变量绑定表时,我把PLC里所有需要监控的变量地址集中维护在一个表格里,包括输入输出映像区、数据块变量、定时器状态、计数器当前值,统一映射到组态平台。这种做法让画面开发阶段和后期维护阶段都特别清爽,不用一个变量一个变量去翻程序。
通信方式上,以太网通信比传统串口通信在速度上优势明显。实测下来,五十个左右的变量以一百毫秒的采集周期刷新,画面动画流畅、数值无滞后感。这里想提醒一个问题:很多组态软件默认的数据采集周期是一秒,如果画面动画看起来一顿一顿的,先把采集周期调到两百毫秒以下再找别的原因。另外通信故障处理也要做,组态软件里设置看门狗,通信中断时画面自动弹出提示并切换指示颜色,防止操作员对着一个“假数据”画面误操作。
4.3 画面响应与报警分级的优化实战
组态画面优化过程中,我做了三个方向的调整。第一个是画面刷新效率。原版画面把所有动画全部实时刷新,CPU占用率偏高,操作时偶尔出现卡顿。优化策略是区分实时数据和状态数据:传感器状态、气缸状态这些需要即时反馈的变量用短周期采集;产量统计、累计运行时间等缓慢变化的变量用长周期采集。这样既保证了关键动画的流畅度,又降低了整个系统的通信负载。
第二个是报警分级管理。最初把所有异常都放在同一报警列表里,现场一报警,操作员分不清轻重。优化后把报警分成两级:一级报警是急停触发、气源失压、电机过载这些需要立即处理并停机的问题,采用红色闪烁并触发蜂鸣器提醒;二级报警是气缸到位超时、计数异常这类不影响设备安全但需要关注的问题,仅用黄色提示不打断生产。分级之后操作员的反应速度和准确率都明显提高。
第三个是数据趋势。组态自带的趋势曲线控件能记录产量变化,但默认保存时间短,且重启后数据丢失。优化方案是让组态软件周期性地把产量数据写入本地数据库,同时提供按时间范围查询。这样管理者可以看到每小时甚至每班次的产量波动曲线,对产能分析和设备效率评估很有价值。这个功能做完之后,整个系统的价值已经不只是实现分拣,而是变成了一套小型生产管理系统。
- 调试排障实录与节拍优化
5.1 真实调试中遇到的问题和解决过程
调试过程不是一帆风顺的,记录几个有代表性的问题,给大家排障时做参考。
第一个问题是传感器误判别。系统刚通上电调试时,小球经常被判定成大球。逐一排查发现,问题出在传感器安装支架的稳定性上。传送带运行时产生的振动让上方传感器支架发生微小晃动,光轴轻微下移,导致小球通过时偶尔也能遮挡上方传感器。解决方法是更换更粗的支架型材并加装减振垫,同时重新校准光轴高度。这次经历让我明白,传感器安装结构的刚性,直接影响检测可靠性。很多时候现场故障的根本原因不是电气逻辑问题,而是机械安装细节。
第二个问题是气缸动作时的工件位置偏移。自动运行中偶尔出现大球被打到料箱边缘的情况。分析发现是气缸推出速度过快,球被击中后发生弹跳偏转。处理办法是调节气缸进气侧节流阀,适当降低推出速度,同时把分拣口导流板的角度加大。经过调整后,球被推落时能稳定落入料箱中心区域。气缸不是越快越好,速度匹配实际工艺才是最优解。
第三个问题是计数重复。产量数据比实际分拣数量偏多,排查时发现传感器信号在工件通过时有多次抖动,导致同一个工件被计数两次。这个问题的根源就是我前面提到的信号抖动,程序里加了五十毫秒的延时确认后彻底解决。软件滤波的尺度把握有个经验值:确认时间设置得过短滤波无效,过长则影响节拍和响应。一般根据传送带速度和工件尺寸,让滤波期间工件位移不超过十到二十毫米比较合适。
5.2 排障速查表
调试过程中整理了一个故障速查表,这里分享给大家,可以直接作为现场排障的参考。
| 故障现象 | 可能原因 | 排查与处理办法 |
|---|---|---|
| 小球误判为大球 | 上方传感器支架松动、光轴高度偏移 | 紧固支架,重新校准光轴高度,加装减振 |
| 大球漏检 | 光电传感器灵敏度偏低、灰尘遮挡光轴 | 清洁镜面,微调灵敏度旋钮,观察PLC输入信号 |
| 气缸推出但球位置偏移 | 推出速度过快、导流板角度不对 | 调节节流阀降低气缸速度,调整导流板位置 |
| 计数重复或混乱 | 传感器信号抖动、队列移位周期不匹配 | 程序增加延时确认,核对移位时钟与传送带速度 |
| 组态画面无数据 | 网线松动、IP地址配置错误、采集周期过大 | 检查通信状态指示灯,Ping测试,确认变量地址 |
| 断电后产量丢失 | 计数器不在掉电保持区 | 将计数变量分配到保持区,或加断电保持设置 |
5.3 节拍提升的实测数据
整个系统调试完成后,我做了一组节拍实测。以每次投料间隔作为变量,从最初的每三秒一件开始逐步压紧。传送带速度恒定每秒二百五十毫米,短时间内以每一点五秒一件的节奏连续投料,系统运行稳定,判别准确率百分之百,分拣动作准确率百分之九十九以上,折合每小时约两千四百件。极限状态下压到每一点二秒一件时,偶尔出现两个工件相距太近、检测区信号尚未完全退出下一个球就进入的情况,导致判别有误差。
根据这个结果,最终把生产节拍设定为每一点五秒一件,保留了足够的安全余量,让产线能够长时间稳定运行而不需要频繁干预。边际效应在这个项目里体现很明显:盲目提高节拍带来的不是产量提升,而是故障率上升和调试成本增加。找到一个让系统稳定运行的平衡点,比极限压榨设备潜力更划算。
5.4 抗干扰处理的经验
现场调试中还遇到过一些让人头疼的干扰问题,值得单独拿出来说。传送带电机启动瞬间,PLC输入指示灯偶尔会出现闪烁,个别传感器信号被误触发。排查后发现,电机的动力电缆和传感器信号电缆在同一个线槽里并行走线,电机启动时的大电流在信号线上感应出干扰电压。解决办法是把动力线和信号线分槽走,信号线改用屏蔽电缆,并将屏蔽层单端接地。处理之后干扰现象基本绝迹。这个教训告诉我们,电气柜内的布线规范是系统可靠性的隐形基础,不能只关注程序写得对不对,现场的物理布局同样重要。
我个人在实际项目中还有一个习惯:所有传感器和电磁阀的接线端子都做清晰标记,线号管套必须打到位。前期觉得麻烦省了一点时间,后面调试每节省一分钟都是在加倍回报。这套大小球分拣项目做完之后,最大的收获不是那套程序代码,而是建立起了一条完整的调试思维:从机械结构到传感器信号,再到PLC逻辑和组态监控,每一层都可能成为问题的根源,排查时要按信号流方向逐级定位,而不是凭感觉瞎猜。
如果你正在规划类似的分拣项目,我建议你先花时间把工艺需求和I/O点清单吃透,再动手画程序框架,最后才是写代码和做画面。硬件选型上,给未来的扩展留一点余地;程序架构上,为后期的维护留一点空间;组态画面上,为操作员的使用习惯留一点温度。把这些想清楚了,剩下的就是把方案执行落地而已。这套控制系统后续还可以继续扩展,比如加上RFID读写做批次追踪,或者接入上位机管理系统,但骨架和思路已经完全打通了。