
一、问题定义在装盘机进瓶段瓶子经传送带高速通过。倒瓶瓶身倾斜超过15°或完全倒下若未被检出并剔除将导致推瓶机构卡死触发伺服过载报警爆瓶风险增加碎玻璃污染托盘整线停机影响OEE。因此倒瓶检测算法需要满足实时性检测周期 ≤ 10ms传送带线速度0.5m/s瓶间距80ms准确性漏检率 0.1%误检率 0.05%鲁棒性抗环境光、粉尘、瓶身标签反光干扰。二、传统光电方案的缺陷典型的双光电对射方案上下两组对射传感器瓶身直立时上下同时被遮挡时间差ΔT稳定在较小范围倒瓶时上下遮挡时间差ΔT显著增大。实际测试数据某药企2ml西林瓶速度500瓶/分钟瓶型直立瓶ΔT均值(ms)倒瓶ΔT均值(ms)误判率漏判率透明西林瓶3.29.54.7%6.2%棕色口服液瓶4.112.32.1%3.5%塑料瓶带标签5.08.211.3%9.8%问题根源透明瓶透光率波动导致传感器触发电平不稳定标签反光造成误触发不同瓶型高度差异需人工重新校准传感器位置。三、改进方案单点激光测距滑动中值滤波3.1 硬件选型将两组对射改为单只激光测距传感器基恩士LR-Z系列或欧姆龙B5WC水平安装于传送带一侧高度为瓶身中位线。测量原理激光三角法输出模拟量4-20mA对应距离35-250mm。直立瓶通过时传感器测得的距离稳定在D_bottle标定值倒瓶时瓶身倾斜测量点偏移距离值跳变为D_bottle ± ΔDΔD通常 10mm。3.2 信号预处理滑动中值滤波原始AD值存在±1~2mm的白噪声。采用滑动中值滤波窗口长度N5效果优于均值滤波能保留边缘跳变。伪代码SCLtextFUNCTION MedianFilter : REAL VAR_INPUT raw : REAL; END_VAR VAR_STATIC buf : ARRAY[0..4] OF REAL; idx : INT : 0; i,j : INT; tmp : REAL; END_VAR buf[idx] : raw; idx : (idx 1) MOD 5; // 冒泡排序 FOR i : 0 TO 3 DO FOR j : i1 TO 4 DO IF buf[i] buf[j] THEN tmp : buf[i]; buf[i] : buf[j]; buf[j] : tmp; END_IF; END_FOR; END_FOR; MedianFilter : buf[2]; // 中值 END_FUNCTION3.3 状态机设计定义了三个状态S_IDLE等待瓶子、S_BOTTLE_DETECT瓶子进入检测区、S_REJECT剔除动作。状态转换逻辑textS_IDLE: IF distance threshold_near THEN start_timer(T_detect) 进入 S_BOTTLE_DETECT S_BOTTLE_DETECT: IF distance stable in [D_bottle - 2, D_bottle 2] for 10ms THEN upright_count; 回到 S_IDLE ELSE IF distance (D_bottle 8) OR distance (D_bottle - 8) THEN 进入 S_REJECT ELSE IF T_detect 50ms THEN // 超时无瓶子 回到 S_IDLE S_REJECT: // 计算剔除延时传感器到气吹口距离L / 传送带速度v - 阀门响应时间 delay_time L / v - 20ms; 延时后置位气阀持续30ms 回到 S_IDLE3.4 自适应基准学习为解决不同瓶型的适配程序中加入一键标定功能按住HMI上的“学习”按钮连续通过20个已知直立瓶系统自动计算平均距离并更新D_bottle同时设置阈值TH_H D_bottle 8TH_L D_bottle - 8。四、性能对比测试在某自动装盘机试验台上使用2ml西林瓶线速度0.5m/s分别运行光电方案与激光方案各2小时约6万瓶结果如下方案实际倒瓶数正确剔除数漏剔误剔准确率光电对射两组12798294177.2%激光测距中值滤波1311301299.2%激光方案的漏剔主要发生在瓶身倾斜临界值ΔD ≈ 6mm通过将阈值收紧到6mm并增加迟滞区间后漏剔降至0。五、向机器视觉的扩展思考对于更复杂的场景如瓶子带有反光标签、异形瓶、瓶口破损检测激光测距可能不够用。可升级为工业相机OpenCV方案相机俯拍进瓶段每帧图像用YOLOv8或传统轮廓分析判断瓶身姿态通过串口或以太网将结果传给PLCModbus TCP帧率需达到100fps以上对应600瓶/分钟即10瓶/秒每瓶至少10帧才能稳定检测。以下是一个简化的Python轮廓检测逻辑pythonimport cv2 import numpy as np def is_bottle_upright(contour): # 计算最小外接矩形 rect cv2.minAreaRect(contour) angle rect[2] # 瓶身倾斜角度超过15°视为倒瓶 return abs(angle) 15 cap cv2.VideoCapture(0) while True: ret, frame cap.read() gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) _, thresh cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) contours, _ cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) for cnt in contours: if is_bottle_upright(cnt): # 直立瓶计数 pass else: # 倒瓶触发剔除信号通过I/O或串口 pass该方案已在实验室环境验证实际产线应用需解决光照、灰尘、帧率延迟等问题。六、工程经验总结传感器选型透明瓶必须用CMOS激光传感器红外对射不可靠。安装位置传感器应安装在传送带直段距离瓶口至少30mm且避开前道灯检强光。延时计算剔除延时需精确标定误差控制在±5ms内否则会误剔或漏剔。PLC扫描周期高速场景建议使用中断或高速计数器模块不要依赖普通循环扫描。数据记录建议记录每次剔除时的距离值和瓶型信息便于质量回溯和参数调优。七、结语本文从工程角度详细介绍了自动装盘机倒瓶检测算法的演进与优化给出了光电方案的局限、激光测距方案的实现细节以及机器视觉的扩展思路。所阐述的信号处理方法和状态机设计具有普适性可供从事包装自动化、PLC编程、视觉检测的工程师参考。