☰
邮件自动分拣线PLC控制与传感器机械臂联调实战记录
2026/10/5 8:24:22 网站建设 项目流程

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%空闲点,把传感器供电单独分路,机械臂联调前先把信号定义表发给对方确认,这几点做到位,项目交付会顺畅很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询