当前位置:首页 > 工业控制 > 工业控制
[导读]高速分拣零差错不是相机准就行,而是“触发位置准、结果回来快、PLC按工件ID匹配、剔除有确认、异常可重检”。架构用PLC做主控:光电/编码器硬触发相机,视觉工控机推理后通过Modbus TCP/PROFINET/MC回传OK/NG/类别/坐标,PLC用队列把检测点与物理工件绑定,到分拣位再动作。


高速分拣零差错不是相机准就行,而是“触发位置准、结果回来快、PLC按工件ID匹配、剔除有确认、异常可重检”。架构用PLC做主控:光电/编码器硬触发相机,视觉工控机推理后通过Modbus TCP/PROFINET/MC回传OK/NG/类别/坐标,PLC用队列把检测点与物理工件绑定,到分拣位再动作。

一、硬触发与位置队列

传送带用编码器计长,光电只做来料初判;PLC锁存触发位置并给视觉发拍指令,避免软触发网络抖动。视觉作Modbus从站,结果区示例:

40010 触发命令,1=拍照

40020 运行状态,0待机/1运行/2完成

40030 结果,0待/1OK/2NG

40031 分类编号,1A/2B/3C

40032~40033 置信度,0~1000

40034 错误码

PLC侧用环形队列存“触发序号+锁存位置+类别+置信度”,工件随线移动时按编码器脉冲推算当前位置。

TYPE StPart : STRUCT

 seq      : UDINT;

 trigPos  : DINT;   // 触发时编码器位置

 cls      : INT;    // 分类

 score    : INT;    // 置信度*10

 result   : INT;    // 0/1/2

 handled  : BOOL;

END_STRUCT; END_TYPE


FUNCTION_BLOCK FB_VisionSort

VAR_INPUT encNow:DINT; beltMmPerPulse:REAL; photo:BOOL;

 visResult:INT; visCls:INT; visScore:INT; visReady:BOOL;

 ack:BOOL; toutResult:TIME:=T#300MS; toutReject:TIME:=T#500MS; END_VAR

VAR_OUTPUT trig:BOOL; reject:BOOL; alarm:BOOL; recheck:BOOL; END_VAR

VAR q:ARRAY[0..63] OF StPart; qin,qout,qc:INT;

 tmon:TON; lastPhoto:BOOL; seq:UDINT; END_VAR


IF photo AND NOT lastPhoto THEN

 q[qin].seq:=seq; seq:=seq+1;

 q[qin].trigPos:=encNow; q[qin].result:=0;

 trig:=TRUE; tmon(IN:=TRUE,PT:=toutResult); qin:=(qin+1) MOD 64; qc:=qc+1;

END_IF;

lastPhoto:=photo;


IF visReady AND visResult<>0 THEN

 // 按先入先出匹配最近未处理任务,工程可改seq精确匹配

 FOR qout:=0 TO 63 DO

   IF q[qout].result=0 THEN

     q[qout].result:=visResult; q[qout].cls:=visCls; q[qout].score:=visScore;

     tmon(IN:=FALSE); EXIT;

   END_IF;

 END_FOR;

END_IF;


IF tmon.Q THEN   // 超时无结果:不默认放行,进复检/隔离

 recheck:=TRUE; alarm:=TRUE;

 FOR qout:=0 TO 63 DO IF q[qout].result=0 THEN q[qout].result:=3; END_IF; END_FOR;

END_IF;


// 到剔除位:位置差小于一个工件容差则动作

FOR qout:=0 TO 63 DO

 IF NOT q[qout].handled THEN

   IF ABS(encNow - q[qout].trigPos)*beltMmPerPulse >= rejectPosMM THEN

     IF q[qout].result=2 OR q[qout].result=3 THEN

       IF q[qout].score<scoreMin THEN recheck:=TRUE; ELSE reject:=TRUE; END_IF;

     END_IF;

     q[qout].handled:=TRUE;

   END_IF;

 END_IF;

END_FOR;

rejectPosMM由“相机到分拣机构距离/脉冲当量”算出;多分类把cls映射到不同气缸/伺服坐标,机器人分拣直接把visX/visY/visAngle下发给运动FB。

二、防漏检四条硬规则

触发用硬IO或编码器比较输出,不用网络软触发;高速飞拍配频闪,曝光短、光源恒流,减少运动模糊。

结果超时、通信中断、置信度低于阈值一律按“不确定”处理,送复检位或隔离,不默认OK。

连件/重叠用光电去抖+编码器最小间距判断,同一触发窗多目标要拆分,防止一拍多件漏剔。

剔除后回读气缸磁开/伺服到位/落料计数,未确认再触发二次剔除并报警,形成“检测—执行—反馈”闭环。

三、追溯与验收

每个工件写seq、触发时间、视觉类别、置信度、触发位置、剔除结果、复检原因到本地SQL/CSV,再按批次上MES。验收按最坏节拍跑:最高线速、连件、反光样、临界缺陷样、通信断网重连,统计漏检率、误剔率、复检率;临界样单独建库,不拿平均准确率糊弄。 按“硬触发锁存+队列位置补偿+Modbus结果握手+超时复检+剔除回读追溯”落地,流水线高速工件分拣可把人为漏剔、错剔降到工程可控范围,而不是靠相机单点识别碰运气。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭