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结果握手+超时复检+剔除回读追溯”落地,流水线高速工件分拣可把人为漏剔、错剔降到工程可控范围,而不是靠相机单点识别碰运气。





