
2020年底接了个邮件自动分拣的单子一条小型分拣线要求把不同地址的邮件按批次分流到对应集包口。核心控制系统我用的是三菱FX3U人机界面配MCGS触摸屏中间还有一套供应商配套的小型三轴龙门机械臂负责抓取。刚开始我确实觉得这项目不算复杂——传感器触发PLC输出机械臂动作逻辑上不就三件事吗。真进场调试才发现传感器信号处理、机械臂联调、触摸屏通讯每一步都藏着很多经验问题。这篇就从头到尾记录一下这套系统的搭建过程重点写传感器信号处理和机械臂联调这两块给准备做自动分拣或者类似小型自动化线的朋友做个参考。1. 邮件分拣线方案定型从工艺拆解到FX3U选型1.1 一个包裹在分拣线上要闯几道关开始动手之前先把工艺流程拆清楚。这套系统的基本链路是人工或上一工位供包把邮件放到进料皮带皮带往前送经过入口检测光电再走到抓取工位的到位传感器机械臂识别到位信号后吸起包裹放到对应滑槽滑槽末端有满料检测。全程的启停控制、信号判定、故障报警全部由PLC负责触摸屏做监控和参数设置。你可能觉得这不就是个顺序控制吗难点在于邮件包裹不像标准工业零部件形状、软硬、表面材质都不固定薄的信封、鼓起来的快递袋、带反光胶带的纸箱都会让传感器误判。另外分拣节拍也要先算明白否则机械臂抓不过来。我按传送带速度0.4m/s、供包距离约1.2m计算包裹从入口到抓取工位大约需要3s机械臂抓取加放料周期约1.2s理论节拍约3s每小时1200件左右。这个水平对小型分拣线够用了但前提是传感器信号必须干净、稳定不能有抖动和漏检。1.2 为什么是FX3U配MCGS而不是其他组合选型的时候甲方没有硬性指定品牌只是说用你们熟的那套就行。我最后定了三菱FX3U-32MT理由其实挺实在的。FX3U虽然是小型机但指令执行速度快内置高速计数器和高速脉冲输出以后要是想直接用PLC控制步进或伺服做推料、摆臂也不用换控制器。再加上三菱的扩展模块丰富加个模拟量模块读气压、加个串口通讯模块接扫码枪都方便售后也好找电工维护。MCGS触摸屏这边的逻辑更简单国产组态屏里它的性价比确实能打组态软件免费中文环境友好支持脚本而且能直接通过编程口协议连接三菱FX系列不需要额外加通讯模块。当然它也有让人头疼的地方比如通讯驱动的细节文档不全有些参数得自己试出来这个后面细说。选这套组合还有一个原因是项目预算有限如果用FX5U加三菱GOT光屏和PLC的成本就多不少甲方不一定批。1.3 I/O分配表与控制柜接线画错一根线现场多熬一晚这个项目我已经不是第一次做了所以第一件事不是写程序而是先把I/O分配表列出来。PLC点位计划得好后面接线、写程序、查故障都能省一大半时间。这套系统的I/O规划大致是这样地址功能信号类型备注X0入口光电NPN三线检测来包做计数X1抓取位到位传感器NPN三线触发机械臂抓取X2机械臂完成反馈NPN来自机械臂控制器X3真空压力开关NPN检测吸盘负压是否到位X4气压低报警常闭触点气源压力低于阈值断开X5集包口满料检测对射光电满料挡停Y0传送带运行继电器输出接变频器启动端子Y1挡停气缸电磁阀继电器输出需要中间继电器过渡Y2允许抓取继电器输出给机械臂控制器的取件信号Y3声光报警继电器输出故障时驱动蜂鸣器接线方面有几个经验供参考。FX3U的输入端子支持漏型/源型切换关键是公共端S/S的接法S/S接24V就是漏型输入匹配NPN传感器S/S接0V就是源型输入匹配PNP传感器。我在项目里统一按NPN规划采购传感器时特别备注了输出NPN常开。还有一点必须提醒控制柜里电磁阀和传感器不要共用一路24V。电磁阀动作瞬间电流变化大会把传感器供电电压拖垮导致信号闪断。我在柜内用了两个开关电源一个专门给PLC和传感器供电一个给中间继电器和电磁阀供电两路0V分开走问题少很多。2. 传感器信号处理实测误检、漏检和抖动的根子在哪2.1 选型先分清检测目标和NPN/PNP接线邮件分拣的传感器选型比一般零件检测要更讲究。我的经验是入料检测和到位检测优先选对射型光电实在装不下就用回归反射型尽量避免漫反射型。漫反射型靠物体反射红外光触发深色包裹、黑色信封吸光严重经常测不到反过来浅色包裹带反光标签又会提前触发。项目里第一个版本用了漫反射传感器结果黑色快递袋直接漏检换了回归反射型之后才稳定。这里还牵扯到NPN和PNP的接线细节。FX3U输入接NPN传感器时传感器棕色线接24V蓝色线接0V黑色信号线接PLC输入端子X。很多初次接触的人容易忽略一个细节传感器的0V必须和PLC的公共0V是同一电位。如果传感器用一路隔离电源供电电源0V没有和PLC的0V连起来信号线拉到PLC输入点后构不成回路输入灯要么不亮要么闪。现场曾经遇到过这种信号台乱跳的情况最后查半天才发现是两个电源的0V之间飘了几伏电压。2.2 一个抖动信号的完整排查链路整个项目里最折腾人的就是抓取位到位传感器的信号抖动。现象是这样的机械臂偶尔不动作监控画面上到位信号闪了一下就消失入口计数也会多计或少计。单包测试很多次都没问题连续供包半小时后故障就会出现属于典型的偶发性故障。排查思路分享给大家这套链路对类似问题都适用。第一步先用万用表直流电压档并联在传感器信号线和0V之间连续观测输出。如果电压在0V和24V之间波动说明传感器输出不稳定如果电压稳定但是PLC输入没翻转说明问题在PLC输入回路。实测结果是信号线电压确实会瞬间跌落说明抖动源头在传感器或线缆。第二步用示波器看波形确认跌落是毛刺还是电平缓慢变化毛刺多半是电磁干扰或者供电波动缓慢变化多半是传感器灵敏度边界问题。第三步检查机械安装。这才发现支架安装在皮带机侧板的一个薄铁板上皮带运行时侧板有轻微共振带动传感器支架抖动检测距离在临界点附近来回晃。把支架换成L型加厚角铁、锁定在骨架横梁上之后抖动频率立刻下降很多。第四步程序里做防抖处理。如果单纯加TON定时器会把真实信号也延时几十毫秒密集来包时容易错过。我采用连续采样滤波的思路对原始信号每个扫描周期采样连续N次为ON才认定为有效信号N按实际情况取20扫描周期大约3ms相当于60ms确认时间比单点采样稳定很多。示例程序用ST写大概是这样的IF bSensorRaw THEN iFilterCnt : iFilterCnt 1; ELSE iFilterCnt : 0; END_IF; bSensorFiltered : (iFilterCnt 20);这个逻辑看起来简单但实际效果很好。滤波之后机械臂漏动作的问题基本消失了。2.3 供电与接地电磁阀一动就乱的真相排查抖动过程中还发现一个隐藏问题电磁阀动作的瞬间传感器供电电压会出现一个明显的跌落尖峰。原因很简单两个电磁阀同时工作时的冲击电流接近3A而传感器供电电源只有60W余量不足。电源容量计算不能只看稳态功耗要看峰值。后来我把传感器和PLC供电电源换成了100W并在电磁阀线圈两端并联续流二极管尖峰才彻底压住。接地问题同样值得重视。控制柜里PLC的接地端子、开关电源的0V、屏蔽层接地各有各的规矩不能图省事一股脑接到一起。我的习惯是单独拉一根接地排PLC的SG端直接接地排模拟量屏蔽层单端接地变频器接地端子单独接柜体大地。如果动力线和信号线不得已要走同一个线槽中间要用金属隔板分开这个细节后面第五章还会提到一次实战教训。3. 机械臂联调把两套控制器拧成一台机器3.1 定义握手信号别让完成信号一直悬着这套分拣系统里机械臂是供应商配好的三轴龙门机械臂自带一个运动控制器PLC和它之间不走总线只通过IO点握手。很多做自动化的人习惯直接说你给我一个信号我给你一个信号但具体到信号格式、时序关系、电平持续时间如果不提前写清楚联调阶段一定会吵架。我的做法是把握手信号定义成一张表发给机械臂供应商确认信号方向信号名称有效电平说明PLC → 机械臂允许抓取高电平包裹已到位可以取件机械臂 → PLC抓取完成高电平脉冲包裹已离开抓取位机械臂 → PLC故障复位高电平机械臂报警已复位PLC → 机械臂联锁急停低电平急停按下机械臂停这里最重要的是约定好信号是电平型还是脉冲型。机械臂那边如果一直保持抓取完成高电平PLC又用这个信号做下一个抓取循环的触发条件就会出现重复计数、甚至连续抓两次的情况。所以我们在程序里统一用上升沿触发并且PLC侧完成信号必须在机械臂收到允许抓取撤销之后才允许再次生效。3.2 抓取动作状态机从到位到放料的时序设计机械臂联调的核心在PLC程序的状态机设计。我按照动作顺序划分了几个步骤用STL步进指令来实现比单纯用M线圈串逻辑清晰很多。整体流程是传送带运行→入口检测到来包→到位传感器触发→传送带停止→挡停气缸伸出→PLC发出允许抓取→机械臂取包→机械臂回位→PLC收到抓取完成→清除允许抓取、挡停气缸缩回、传送带重新启动。这段逻辑用ST写一个简化的状态示意是这样CASE iStep OF 0: // 待机等待来包 IF bEntrySensor THEN iStep : 10; END_IF; 10: // 等待到位 IF bPositionSensor THEN bConveyor : FALSE; // 停皮带 bStopper : TRUE; // 挡停气缸伸出 iStep : 20; END_IF; 20: // 发允许抓取 bPickAllow : TRUE; iStep : 30; 30: // 等机械臂完成 IF bPickDone THEN bPickAllow : FALSE; bStopper : FALSE; bConveyor : TRUE; iStep : 0; END_IF; END_CASE;状态机看着不复杂但有两个细节是必须做的。第一所有步骤都要配超时保护比如允许抓取发出后8秒内机械臂没给完成信号立即报警停机防止机械臂卡住后传送带还在继续送包造成堆料。第二手动和自动两个模式的状态必须在切换时全部清零否则切到自动瞬间某个气缸突然动作非常危险。3.3 联调中偶发漏抓的追查过程联调阶段最典型的故障就是漏抓而且是不定时偶发。一开始机械臂供应商说是PLC信号不稳定我坚持说是他们程序判断条件太苛刻。两边都觉得自己没问题于是我让他们把机械臂侧的程序截图发过来一边现场盯着PLC监控变量。排查过程是这样的我先在PLC里加了几个中间变量记录到位信号滤波后的状态允许抓取输出抓取完成输入的时间顺序发现一个问题——允许抓取信号曾经发生过一次极短的中断从PLC监控画面上看就是变成OFF又马上ON时间小于一个扫描周期。虽然程序里输出一直保持SET状态但由于机械臂控制器读IO也很快它捕捉到了这个瞬间变化判定条件不满足直接放弃本次抓取回头就给我们报了取件失败。根因还是回到传感器抖动上。皮带的轻微共振导致到位信号在滤波确认之后又短暂丢失虽然PLC对外输出锁存了但机械臂读到的物理信号还是出现了毛刺。最终方案有三层一是机械上固定好支架解决物理抖动这是根本二是传感器信号滤波窗口加大三是和机械臂供应商约定PLC输出的允许抓取信号一旦置位至少保持2秒机械臂侧做连续200ms的有效电平判断不允许用单个扫描沿触发。三层堵下来漏抓问题彻底解决。这里顺带提一个建议机械臂吸盘一定要加真空压力开关并且接入PLC。现场曾经有个包裹吸起来又掉下去但机械臂控制器认为动作已经完成如果不是真空开关及时报警那件包就莫名其妙漏掉了。真空开关比单纯依靠定时器可靠得多。4. MCGS触摸屏通讯与画面数据管理组态是最后一道坎4.1 把MCGS和FX3U拉通的通讯配置MCGS触摸屏和FX3U通讯最常用的方式是用一根FX编程口电缆连接触摸屏的COM口和PLC的编程口组态软件里选三菱FX系列编程口驱动。第一步先别急着加点先把通讯参数搞好。触摸屏端要设置串口号、波特率、数据位、校验位、停止位PLC侧要保持一致。FX3U的编程口默认协议就是编程口协议不需要额外写通讯程序但要注意部分定制参数需要通过D8120确认。项目里的坑主要在两个方面。一是线序问题网上很多所谓FX编程口电缆线序不确定插上去通讯时好时坏后来我直接用三菱原装型号的电缆稳定很多。二是MCGS设备窗口里的轮询周期默认值可能很短变量一多通讯压力大触摸屏会随机报设备通讯超时。我把普通变量的采集周期设在500ms以上只有需要快速刷新的启停状态和当前计数才放快速采集列表之后再没出现过超时报警。有一点要特别提醒做跨网段通讯的人MCGS如果用网口连接FX3U或者西门子S7-1200/1500这类PLC时IP地址、子网掩码、网关设置错了也会连不上。触摸屏和PLC不在同一个网段时光改PLC侧IP不行还要检查触摸屏的网关设置和实际网络路由别以为插上网线就万事大吉。4.2 画面、参数下发和历史数据的小心思MCGS画面设计上我习惯分成四页主监控画面、参数设置画面、手动操作画面、报警记录画面。主监控画面上放传送带启停、当前分拣数、总计数、模式指示参数设置画面放抓取延时、传送带速度设定值、堵料判定时间手动操作画面一般要加权限保护防止操作员误碰气缸按钮。参数下发有个容易忽略的问题MCGS数值输入控件写PLC的D寄存器时数据类型选错会把数值显示成乱码。比如16位无符号和32位有符号不匹配画面数字就完全不对。我一般把所有参数都指定为16位无符号整数范围限制在合理区间再在下发脚本里做一次上下限判断防止操作员把延时设成负数。防误触方面有个小技巧分拣计数清零按钮用脚本判断按下并保持3秒才清零比直接触发靠谱得多现场操作员在手套状态下容易误触这个细节很多新手没想到。4.3 工程备份、固件版本和FTP运维侧的功课调试完并不意味着结束运维侧的功课同样重要。MCGS触摸屏内部工程要及时备份用U盘可以把屏内工程文件拷出来。三菱FX3U的程序通过GX Works2上传后也要另存版本不要现场改完就忘了归档。我就是吃了这方面的亏有一版程序放参数试了很久结果正式固件跟客户的备份对不上返工了一下午。固件版本这块多说一句FX3U本体很少需要刷固件如果有人说要下载三菱FX3U固件包升级先确认是不是真有需求比如新指令支持、扩展模块识别不出来这类问题而且升级包只能从官方渠道获取来路不明的文件不要碰。MCGS触摸屏的固件程序同理官方升级包通过U盘放到屏里更新即可操作之前一定要先备份。MCGS的FTP功能在这种项目里很实用。我把触摸屏的历史记录通过FTP定时上传到办公室服务器每天的分拣量、报警记录都能远程查看。配置FTP时注意服务器IP、账号、端口、上传路径测试阶段先在触摸屏上ping通服务器再正式启用。如果服务器和触摸屏分属不同网段要确保中间路由是通的否则FTP失败一句话都不报排查起来很吃力。5. 连续运行调试复盘从单机跑通到整线稳定5.1 编码器和高速计数器包裹长度与触发位置的计算项目做到后半程甲方追加了一个需求统计不同长度包裹的数量并在抓取位之前根据长度做一次预分流。于是我在皮带上加了一组编码器用FX3U的高速计数器来读取。具体计算很简单编码器装在从动辊轴端辊筒直径60mm编码器每转600脉冲周长约188.5mm每脉冲对应的皮带位移就是188.5除以600约0.314mm。如果包裹从入口传感器到抓取位要走1.2m那对应的脉冲数大约是3818个脉冲。程序里把高速计数器当前值和设定区间做比较落在哪个区间就预先给某个集包口做标记等包裹到位后再按标记分流。这里有两个坑必须注意一是编码器轮如果靠包裹摩擦驱动包裹打滑会导致长度计算漂移抖动多了还会丢脉冲所以编码器要装在皮带从动辊端靠传动带或链条带动二是高速计数器配置要核对型号对应的输入点FX3U的高速计数器输入点有专门分配不是随便一个X点都能用接错线计数器一动不动的。5.2 一次变频器干扰的实战排除整线联调阶段遇到过一回触摸屏不定时报通讯失败、机械臂偶发乱动的问题当时真的头疼。排查的起点是看变频器——传送带电机由变频器驱动功率不大但载波频率很高。到现场一看变频器输出侧的动力电缆和传感器信号线居然走同一个线槽而且距离超过2米干扰源基本就锁定了。处理措施分三步。第一步动力线和信号线分开走线槽中间加金属隔板这两类线不可能完全避开时让它们交差而不是平行走线。第二步变频器载波频率从4kHz调低到2kHz虽然噪音大了一点但是对外辐射明显降低。第三步所有信号线换成双绞屏蔽线屏蔽层在PLC这一端单端接地。改完之后通讯超时的报警频率显著下降连续跑了一整天没再报。这次排障最大的体会是遇到信号乱、通讯中断这类问题不要第一反应就去改程序先在现场看线怎么走的、柜子接地没有、电源有没有分路硬件问题解决了程序才谈得上稳定。5.3 状态机切换与堵料、计数校验最后谈一下连续运行稳定性的三个设计。第一个是手动自动切换。我的做法是模式切换动作必须在一个中性状态完成先按急停复位再关断所有输出执行机构最后把状态机步号清零。如果省掉这一步自动运行中直接切手动气缸和皮带可能维持原状态乱动操作员再去碰设备很容易出事。第二个是堵料检测。到位传感器保持ON超过设定时间比如5秒就判断为堵料立即停传送带并报警。这个逻辑对邮件分拣很重要软包卡在挡停位置很常见没有堵料保护机械臂还在努力抓空气后面积压的一串包裹全部堆在一起。第三个是三路计数校验。入口光电计一次数抓取成功计一次数集包口复核光电再计一次数三路数据同时显示在MCGS画面上如果前后两路的累计数差超过设定值系统自动提示可能漏包。邮件分拣场景里数量对不上比个别包裹延迟更让客户介意这个校验功能能让你睡个安稳觉。最后提个实践经验交付前我连续跑了一下午加一晚上先拿空纸箱跑300次再拿真邮件跑600件统计漏抓率、误检率和计数一致率。只要这一轮没出现偶发问题后续量产稳定性基本就有底了。我个人的体会是自动分拣这种项目看着是PLC加触摸屏加传感器的简单组合真正值钱的细节全在信号处理、时序握手和现场走线这些不太起眼的地方。你在画I/O表的时候多留20%空闲点把传感器供电单独分路机械臂联调前先把信号定义表发给对方确认这几点做到位项目交付会顺畅很多。