搞过自动化项目的人都明白,一条产线上最磨人的往往不是梯形图本身,而是把机械、传感器、气动和上位机串联起来的整套逻辑。今天要聊的这套基于S7-200 PLC和组态王的分拣系统,就是一个非常典型的多属性复合项目:振动盘不断把大小球送到传送带上,经过颜色、大小、材质三组检测,再由PLC判断后指挥气缸把不同属性的球分别推入对应料槽,组态王在电脑上实时显示运行状态和计数。别小看这套东西,它几乎涵盖了非标自动化小产线的所有核心环节。
这套系统适合谁?刚做PLC毕业设计的学生、准备电工或自动化技能竞赛的选手、想入非标自动化门的现场工程师,甚至是在工厂里琢磨怎么替代人工分拣的工艺人员。它不算复杂,但信息量很足:开关量逻辑、频率量采集、PPI通信、组态动画、传感器抗干扰、气缸时序,全都凑齐了。下面我按实际项目的推进顺序,把整个设计思路和踩坑过程捋一遍,希望能给你省掉几周的弯路。
1. 项目到底在解决什么问题:一条传送带上的“三属性”分流逻辑
1.1 分拣系统的整体流程设计
先说机械布局。最常见也是最稳的方案是:料斗或振动盘出料,球体逐个落到一条水平传送带上,传送带把球依次带到三个检测工位。第一个工位测大小,第二个工位测颜色,第三个工位测材质。三个传感器把检测结果交给PLC,PLC根据组合结果决定球到达末端分流区时,哪一个推料气缸动作,把球推进哪个料槽。
这里有个关键取舍:是每个检测工位后面立刻分一次,还是检测完所有属性后在末端统一分流?我推荐后者。原因很简单,如果每检测一个属性就推一次,机械结构上需要多级传送带或中间料道,气缸数量翻倍,程序里还要处理“换线”、“排队”的麻烦。而“一次检测、末端分流”只需要一条主传送带和一组推料气缸,传感器集中安装,调试起来非常方便。
实际操作中,末端分流区一般设计成多路并列的料槽,每路对应一个推料气缸。球到了某个料槽入口,如果它的属性组合匹配这个料槽,气缸就伸出把它推进去,然后气缸缩回,等下一个球。如果匹配不上,球继续往前走到下一个料槽入口,直到找到归属或进入“未识别”回收箱。这个“边走边判断”的逻辑,正好是S7-200这种小型PLC最擅长干的活。
1.2 为什么选S7-200 PLC + 组态王的组合
现在市面上PLC选择很多,S7-200本身也停产多年,但它在教学、竞赛和存量设备改造里的地位一直没被动摇。原因很现实:一是指令简单,梯形图生态极其成熟,网上随便一搜就是案例;二是它自带两个PPI通讯口,和组态王做上位机联调非常顺畅;三是二手设备和配件便宜,实验室、实训室里的存货也大。用S7-200做一个需要通信、需要动画监控的项目,综合成本和学习门槛都低。
组态王更是国内中小型监控项目的“老熟人”。它做画面组态速度快,变量绑定直观,对西门子S7-200的PPI协议支持得非常完善,基本就是“选好驱动、填好COM口、设好站号”三步的事情。相比直接用WinCC或博途,组态王不用折腾复杂的授权体系,也不需要装一堆组件,非常适合一个人快速搞定一套可视化监控界面。当然,如果是工业现场长期运行,我更建议考虑昆仑通态或组态王商业授权版本,稳定性更有保障;但作为项目学习和功能验证,这个组合完全够用。
1.3 系统硬件清单与选型理由
| 硬件 | 推荐型号/规格 | 选型理由 |
|---|---|---|
| PLC | S7-200 CPU226 DC/DC/DC | 24点输入、16点输出,自带2个PPI口,点数富余,扩展简单 |
| 扩展模块 | EM221/EM222(按需) | 输入输出点不够时补,CPU226本身点数多半够用 |
| 传送带 | 小型皮带线,带减速电机 | 速度控制在0.1~0.3m/s,便于传感器检测和气缸推料 |
| 大小检测 | 对射式光电开关一对 | 抗干扰强,球体遮光信号干净,适合区分直径差异 |
| 颜色检测 | 工业色标传感器(或TCS230模块) | 响应快,输出开关量/频率量,可直接进PLC |
| 材质检测 | 电感式接近开关 + 电容式接近开关 | 电感测金属,电容测非金属,组合可区分材质二元属性 |
| 执行机构 | 双作用气缸 + 单线圈电磁阀 | 动作简单可靠,配节流阀调节推出速度 |
| 供电 | 24V开关电源,外加一路隔离电源 | PLC和传感器供电分离,避免电磁阀干扰 |
| 上位机 | 普通电脑 + USB-PPI电缆 + 组态王 | 通信方便,驱动成熟,适合学习和演示 |
很多新手会忽略一个问题:传感器的输出类型。S7-200的数字量输入只认“通断”,所以颜色传感器如果输出模拟量或频率量,就得多配一块模拟量模块或者用高速计数器采集。为了控制成本和复杂度,我一般建议颜色传感器选用输出开关量的工业色标传感器,一个颜色对应一路输出,直接接PLC输入点。如果手头只有TCS230这种模块,那就走高速计数器通道,后面我会单独展开说。
2. 传感器选型与检测原理:怎么让PLC“看”出大小、颜色和材质
2.1 大小检测:光电传感器的高度法安装技巧
区分大球和球,在固定规格的工件场景下,最省事的方法就是“高度法”。把一组对射式光电开关安装在传送带一定高度的支架上,发射端和接收端跨过传送带,让球正好能从它们中间通过。假设大球直径50mm,小球直径30mm,那就把光路高度设在40mm左右。小球通过时光路不遮挡,输出不变;大球通过时明显遮光,输出翻转。这样PLC拿到一个干干净净的开关量信号,比用相机、激光测距简单可靠得多。
这里有几个细节要提醒:第一,对射式光电的发射端和接收端要严格同轴,传送带两侧支架不能存在左右偏移,否则球稍一跑偏就出现漏检或误检;第二,传送带导向挡板一定要做好,让球在传送带上横向位置固定,不然球贴着左边缘和贴着右边缘,遮光情况会完全不同;第三,光电玻璃表面要定期清洁,灰尘是光学传感器最大的隐形杀手。如果球体直径会波动,就改用“遮光时间法”:让球通过一对光电,记录遮光时间,配合S7-200的定时中断,也能比较准确地分出大小档位。
2.2 颜色检测:标定、遮光和抗反光
颜色检测是这套系统里最容易翻车的一环。工业色标传感器的原理是发射红绿蓝三色光,然后根据目标反射光的比例来判断色标。选型时优先买能输出多路开关量的型号,例如红色输出一路、绿色输出一路、蓝色输出一路,调试时直接看PLC输入点就很直观。
如果你手头只有TCS230这类颜色识别模块,也完全能用。TCS230输出的是频率信号,红绿蓝三种通道的频率比例反映颜色。S7-200用高速计数器(例如HSCO)读取频率,把结果存到VW区,然后在程序里做归一化比较。具体做法是:先用白色参考板标定三通道比例,再把目标球的RGB读数换算成0~255的标定值,最后与预设阈值比较。注意,球体表面如果有反光,传感器不要正对球体,建议倾斜15到30度安装,减少镜面反射带来的读数漂移。
我调试时踩过最大的坑是环境光干扰。荧光灯、窗边自然光都会让颜色传感器读数缓慢漂移,有时明明是红色球,下午却识别成橙色。解决办法很粗暴但有效:在颜色传感器外侧加一个半封闭遮光罩,只留一个让球通过的缺口,内部用白色LED环形补光。这样球经过时受光条件恒定,颜色重复性立刻好了很多。另外,颜色判定不要只看一次采样,最好连续采样3次后再做决定,滤掉偶发噪声。
2.3 材质检测:电感式与电容式接近开关的分工
材质检测要看你到底分几种材质。如果只分金属和非金属,一只电感式接近开关就够了——金属球靠近时输出,塑料球、陶瓷球、玻璃球没反应。但如果你要区分铁、铝、铜这种不同金属,单靠电感式开关做不到,需要上涡流传感器或者多个传感器配合,成本和复杂度都会上去。对绝大多数课程设计和小型分拣项目来说,“金属/非金属”二元分类已经能满足题目要求了,再配合颜色和大小,足够组成一套完整的三维属性分拣逻辑。
电容式接近开关可以检测金属也能检测非金属,但它有个缺点:检测距离近,而且受湿度、灰尘甚至塑料材质配方的影响都很大,现场标定特别费劲。稳妥的做法是:先用一个电感式接近开关判断“是不是金属”,如果电感没反应,再用一个电容式接近开关确认“是不是有明显介电常数的非金属”,两个信号加起来,PLC里就得到一个材质属性变量。安装时一定注意传感器检测面要和球体正对的中心线齐平,安装距离按传感器铭牌上的标称值来,别一味追求“越近越灵”,太近容易误触发,太远又检测不到。
3. PLC程序设计:I/O分配、梯形图思路与核心逻辑
3.1 I/O地址分配表
动手写程序前,先把I/O表排清楚。下面是我实际用过的一份分配表,你可以直接参考:
| 地址 | 信号名称 | 说明 |
|---|---|---|
| I0.0 | 启动按钮 | 常开触点 |
| I0.1 | 停止按钮 | 常闭触点 |
| I0.2 | 急停按钮 | 常闭触点,串在安全回路 |
| I0.3 | 大小检测光电 | 大球遮光时为1 |
| I0.4 | 颜色检测-红色 | 红色球为1 |
| I0.5 | 颜色检测-绿色 | 绿色球为1 |
| I0.6 | 颜色检测-蓝色 | 蓝色球为1 |
| I0.7 | 电感式接近开关 | 金属球为1 |
| I1.0 | 电容式接近开关 | 非金属球为1 |
| I1.1 | 推料气缸1原位 | 磁簧开关 |
| I1.2 | 推料气缸2原位 | 磁簧开关 |
| I1.3 | 推料气缸3原位 | 磁簧开关 |
| Q0.0 | 传送带电机接触器 | 启动传送带 |
| Q0.1 | 振动盘给料机 | 控制出料 |
| Q0.2 | 推料气缸1电磁阀 | 对应料槽1 |
| Q0.3 | 推料气缸2电磁阀 | 对应料槽2 |
| Q0.4 | 推料气缸3电磁阀 | 对应料槽3 |
| Q0.5 | 推料气缸4电磁阀 | 对应料槽4 |
| Q0.6 | 报警灯 | 故障提示 |
| Q0.7 | 蜂鸣器 | 故障报警 |
这里没有把气缸4、5、6的原位全列进去,实际接线时按同样格式补在I1.4后面就行。输入输出分配原则很简单:所有传感器信号只占输入点,所有电磁阀、指示灯只占输出点,中间运算靠M区和V区。另外一定要留几个备用输入输出点,调试时你会回来感谢我这句话的。
3.2 传送带启停与送料节拍控制
启停逻辑看起来简单,但要把“顺序停机”做好才算是老手。我的实现思路是:按下启动按钮,先启动传送带,等传送带运行稳定了2秒,再启动振动盘开始出料。按下停止按钮时反过来,先停振动盘,让已经落在传送带上的球继续走完,等待一段固定延时(比如传送带长3米、速度0.2m/s,就延时15秒),确认线上没有遗留球后再停传送带。这样既不会让球堆积在出料口,也不会在停机后传送带上还剩一堆半路球。
用S7-200写的话,可以这样组织梯形图:SM0.1在首次扫描时复位所有Q输出和M中间继电器;启动按钮置位一个M0.0“运行模式”;Q0.0传送带输出由M0.0控制;T37定时2秒后置位M0.1“送料允许”;Q0.1振动盘输出由M0.1控制。停止时复位M0.0,传送带保持运行,同时启动一个长延时,延时结束后复位传送带。急停I0.2是常闭点,直接串在传送带输出回路里,做硬件级切断。
3.3 分拣决策与推料动作:移位寄存器是正解
这是整个程序的核心。检测工位在传送带前段,推料工位在传送带后段,球从检测点走到推料点需要时间,PLC不能检测到信号就立刻推,必须让信号“跟着球一起走”。
最笨的办法是固定延时:比如检测点离末端推料区0.8米,传送带速度0.2m/s,就延时4秒再推。这个方法在演示时能用,但传送带一旦打滑、负载变化,球的实际位置就会偏,推料十有八九错位。我强烈建议改用移位寄存器方案:把传送带从上料到推料区之间均匀切成若干格,每一格对应一个二进制位。某个球通过检测点时,把它的颜色、大小、材质属性分别写入三条移位寄存器队列的最低位;每过固定时间(或者从动轮编码器每发一个脉冲),队列整体移动一位;当那一位移动到推料气缸位置时,PLC取出对应的属性值,判断要不要推。
在S7-200里,移位寄存器可以不用循环指令那么麻烦,直接用字节右移指令SLB就能实现。比如用VB100保存整条线上每个位置当前有无球的标记,用VB101保存颜色标记,用VB102保存大小标记,用VB103保存材质标记。每次移位脉冲到来时,把新检测结果写进最低位,同时读最高位,最高位就代表此刻位于最后一个位置格的球的属性。这种写法代码短、扫描周期快,而且非常好排查——在组态王里把VB100用“按位显示”拉出来,你能直观看到小球一点一点往前挪。
3.4 梯形图实现的关键细节:延时、互锁与复位
推料气缸动作不能一直通电,否则会把球压在料槽口。我习惯用TON定时器生成一个0.3到0.5秒的“推料脉冲”:检测到球到位且属性匹配时,置位一个中间M标志,M标志带动气缸输出,同时启动T40定时0.4秒,T40到时复位气缸输出并复位M标志。这样每个球只会被推一次,不会出现“推完又缩回又再推”的连击现象。
互锁逻辑同样重要。一行里多个推料气缸如果同时动作,两个气缸会把球夹在中间,轻则卡球,重则顶坏机械结构。我的做法是在每个气缸输出前串联“上一气缸动作中”的反逻辑触点,例如Q0.2动作时,Q0.3的输出回路里就串一个Q0.2的常闭点。这属于最传统的电气互锁,但也最可靠。另外,程序里要统一处理“无法识别的球”:如果球走到最后一个料槽还不匹配任何条件,就让它在末端自然落进回收箱,别傻傻地等一个不存在的气缸动作。
4. 组态王监控画面:从通信配置到画面组态
4.1 PPI通信配置与组态王设备连接
组态王连S7-200,本质上是走PPI协议。先把USB-PPI编程电缆插到电脑上,安装好驱动,在设备管理器里确认COM口号,比如COM3。然后打开组态王,新建一个设备,驱动类型选择“西门子S7-200系列(PPI)”,设置通信参数:波特率默认9600,数据位8、停止位1、偶校验,PLC站号填写2(S7-200的默认站号就是2)。填完后点“设备测试”,如果读到PLC的型号和固件信息,说明通信链路已经通了。
很多人会遇到“创建协议组件失败”这个报错。我排查下来,十有八九是驱动安装时被杀毒软件拦截,或者安装组态王时没有用管理员权限。解决办法简单:退出杀毒软件,右键“以管理员身份运行”重新安装PPI驱动;如果还不行,检查一下系统是否缺少VC运行库,装上之后基本就好了。另外还要小心COM口被别的软件占用,比如串口调试助手或PLC编程软件没关闭,组态王是抢不到这个口的使用权的。
4.2 画面对象与变量绑定
组态王的核心操作是数据词典和动画连接。先在数据词典里把PLC变量全部定义成I/O变量,例如“I0.3大小检测”、“Q0.2气缸1”、“VB100队列位”等。变量的数据类型要对齐:开关量用Bit或离散类型,计数、时间用整数类型,属性队列如果用字节显示,就定义成BYTE类型,然后在画面里按位显示。
主监控画面我建议画成“侧视图”:左边是料斗,中间是传送带,右边是一排料槽。传送带上的球可以用一个圆形图元,它的水平位置连接“VB100位移变量”,随着移位脉冲往右移动。颜色传感器的检测结果可以用三个指示灯显示,金属材质用一个指示灯。每个推料气缸画成一个矩形条,输出为1时矩形向右平移一段距离,看起来就像气缸把球推进料槽。这样做的好处是,现场操作员一眼就能看出球在传送带上的位置、传感器有没有误报、哪个气缸正在动作,比盯着原始输入输出点的红绿变化直观得多。
4.3 报警与数据记录配置
组态王的报警功能我建议至少配两级:设备通信报警和工艺状态报警。设备通信报警由组态王自带的“设备状态”变量提供,一旦PLC通信断开,画面弹出红色提示。工艺状态报警可以在数据词典里定义内存离散变量,比如“气缸1超时未到位”,PLC里用一个标志位在超时后置1,组态王读取后触发报警窗口并联动蜂鸣器。
产量统计也是这类项目必做的。最简单的方法是PLC里用VW200保存总数、VW202保存红色球数、VW204保存金属球数,组态王读出来显示在画面上。如果想做班报、日报,就用组态王的SQL访问管理器:先在系统ODBC里创建一个数据库数据源,然后在组态王的SQL模块里定义记录体和表格模板,PLC变量变化时插入一条记录。这样每天都有历史产量数据,哪怕PLC断电也不会丢。
5. 调试实录:从“不动作”到“错分”的排查方法
5.1 传感器信号抖动导致的误判
第一次联调,你会发现最头疼的不是程序,而是传感器乱跳。颜色传感器可能在同一颗红色球通过时输出一会儿红一会儿紫;接近开关在气缸动作的瞬间误触发一下。我当时的处理步骤是这样的:先用万用表测传感器供电电压,确认是不是低于DC24V;然后把PLC输入端的公共端和传感器电源接到同一个开关电源上,但电磁阀的供电要换独立电源。做完这两步,大部分抖动都能压下去。
如果还抖,就在程序里加防抖。S7-200的梯形图实现防抖很直接:检测信号到来后,不立刻置位,而是等待10ms,再读一次同一个输入点,两次都为1才算有效。这样能滤掉大部分触点抖动和电磁干扰。颜色传感器如果还是偶尔误判,就要考虑加屏蔽线,并且把屏蔽层单端接地,别让它绕电磁阀线束走线。
5.2 气缸推料与传送带速度的同步问题
推料错位是第二大类问题,典型表现是:球还没到位气缸就推了,或者球已经过去了气缸才动。用固定延时的方案最容易出这个问题,因为传送带带速受负载影响会漂,多带上几个球速度就慢一点点,误差积累起来球就偏了。
我的建议是双管齐下:一是在程序里改用移位寄存器,不要用固定延时;二是在每个推料口前面加一个“到位光电”,只有球真实挡住到位光电,PLC才允许对应气缸动作。这两个措施叠加后,错位率几乎降到了零。如果你还想让速度更稳,给传送带电机加一台小变频器,恒定在0.2m/s,效果会更好。
5.3 组态王变量不刷新或通讯超时问题
组态王里最典型的故障是“通讯失败”或者变量显示不刷新。我的排查顺序很固定:
第一步,看设备管理器里USB-PPI驱动是否正常,COM口号有没有变。有些USB转串口线每次插拔后COM口号会变,组态王里就不会自动更新。第二步,打开组态王的设备测试,点击连接,如果能读到PLC信息,说明通信层正常;如果读不到,检查波特率、校验位、PLC站号。第三步,确认PLC编程软件Micro/WIN没有占用同一个COM口,两个软件抢口位会互相踢。第四步,如果通信参数全对还是连不上,大概率是USB-PPI线兼容性不好,换一条原装电缆试试。
5.4 常见问题速查表
| 故障现象 | 可能原因 | 解决办法 |
|---|---|---|
| PLC不运行 | 模式开关在STOP,程序没下载 | 拨到RUN,重新下载程序 |
| 输入指示灯不亮 | 传感器电源断,信号线接错 | 查24V供电,查公共端接线 |
| 输出指示灯亮但执行器不动 | 输出点驱动能力不足或电磁阀坏 | 换继电器中间转换,查电磁阀线圈 |
| 组态王创建协议组件失败 | 驱动被拦截,运行库缺失 | 管理员权限重装驱动,装VC运行库 |
| 组态王通讯失败 | COM口号变、波特率错、PLC站号错 | 按设备测试逐项排除 |
| 颜色误判 | 环境光干扰、表面反光 | 加遮光罩,倾斜安装,重新标定 |
| 推料错位 | 速度波动、固定延时不准 | 改移位寄存器,加到位光电 |
| 材质检测不到 | 安装距离过远、检测面不垂直 | 调整距离至标称范围,对准中心线 |
6. 这个项目还能怎么升级
6.1 从固定分拣到柔性分拣:触摸屏配方
这套系统做完后,如果还想继续往后做,第一个值得加的就是触摸屏。用昆仑通态或其他品牌的触摸屏跟S7-200走PPI通信,把分拣规则做成配方:比如“当前分红色金属大球”和“当前分绿色塑料小球”一键切换。PLC的参数区集中在V区,触摸屏直接读写V区,不需要改梯形图。S7-200的V区有断电保持功能,设好保持范围后,就算关机再开,配方参数也还在。这个升级对毕业设计和竞赛答辩来说非常加分,因为它体现了“人机交互”和“柔性生产”的思想,而不只是简单的启保停。
6.2 与上位机数据库对接
组态王本身支持ODBC和SQL访问管理器,把产量数据写到Access、SQL Server都很方便。我做过一次对接SQL Server:先在Windows的ODBC数据源管理器中创建一个系统DSN,指向数据库;然后在组态王的SQL模块里新建记录体,把VW200、VW202这些PLC变量映射到表字段;最后用“插入记录”函数,在PLC的产量值发生变化时写一条记录。这样车间主管打开数据库报表就能看到每个班次的红球数量、金属球数量、总产量,比纯靠组态王画面截图要专业得多。
6.3 成本与成效复盘
最后算一笔账。CPU226二手大概600到1000元,光电开关一对100到300元,工业色标传感器国产1500到3000元,电感接近开关和电容接近开关各100元左右,气缸加电磁阀加节流阀一套三四百元,传送带如果自制改造500到1000元,USB-PPI线几十到两百元,组态王看授权方式,学习版或演示版几百元能搞定,整套下来不含人工大约5000到8000元。这样一条线如果真放在工厂里替代一个人工分拣工位,按三班倒计算,几个月就能收回设备成本,后面全是节省下来的人工费。
真正做完这套系统,我的体会是:PLC程序和组态王画面反而不是最难的,最难的是机械安装和传感器调试。你会为了把一组对射光电对得笔直蹲一下午,会为了躲开日光灯干扰反反复复试颜色传感器的安装角度,也会因为气缸推料慢了一拍而蹲在料槽前面观察一整天。但这些“脏活累活”,恰恰是自动化工程师最值钱的功夫。如果条件允许,建议在这个小系统后面再接一台机械臂或者直角坐标机器人,让PLC把分拣结果直接发给机器人抓取,那就不止是个分拣系统了,已经是一个完整的智能产线雏形。