尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
玻璃盘CCD影像筛选机:五工位视觉检测与上位机控制实战解析
三年前有个做精密五金件的客户找到我们难度不高但很烦一款微型螺丝靠六个人在放大镜下挑外观不良一天十小时挑不到一万颗还漏。漏出去的不良品到了客户产线上一次投诉索赔就够买半台设备。后来我们交付的就是标题里这套玻璃盘CCD影像筛选机——玻璃盘载着零件高速绕圈五个工位共五套CCD视觉系统各拍各的上位机把五路结果汇总判定经过IO板转换成OK/NG信号吹气嘴把不良品吹进废料盒。整个过程一秒钟过几十颗料稳定、快、不眨眼。这篇文章我就拿这个项目把整条链路讲透。重点放在别人很少讲清楚的几个地方五个工位为什么这么分、每路相机的视野和光源怎么定、上位机程序到底怎么跟硬件握手、OK/NG信号为什么不能想发就发以及调试期真正让人头疼的三个坑。如果你正在做视觉筛选机、上位机视觉检测或者类似的自动化项目这篇文章应该能帮你少走不少弯路。1. 玻璃盘筛选机的整体工作逻辑零件在一圈内如何完成五次检测1.1 玻璃盘怎么把零件“排队送检”玻璃盘筛选机的核心是一个圆形、平整、高精度的玻璃载盘由伺服电机或变频电机带动旋转。零件通过振动盘排料后进入玻璃盘靠近外圈的位置在离心力和导向板的共同作用下沿着盘面方向排列成单列并落入均布在盘面上的载料孔或者标准治具槽里。每个载料位置都相对固定零件与零件之间保持间距这就给后续拍照检测提供了“标准化定位”的基础。这里用玻璃而不是铝盘或钢盘关键原因是玻璃透明。底部相机可以透过玻璃从下往上拍背光源可以从上往下打直接拍出零件的剪影轮廓这对尺寸检测精度来说价值极大。同时玻璃硬度高、热膨胀系数小表面平整度能保证零部件在高速旋转中不会因为盘面颠簸发生跳动。有同行过来问“为什么不用黑色亚克力盘”答案很简单不透光背光剪影做不了且耐磨性差、容易刮花影响检测。1.2 五个工位的检测项拆分一台螺丝的体检清单五套CCD不是均匀围着盘子转圈就行每一个工位都要有一个明确的检测目标。我们那个项目检测的是微型精密螺丝算是这类设备最典型的工件之一。我把五个工位做了如下分工工位相机朝向检测区域主要检测项1号位顶部俯视螺丝头部头部成型、裂角、毛刺、头部外径2号位底部仰视尾部端面尾部变形、端面毛刺、十字槽/一字槽深度3号位侧方平视螺纹段缺牙、烂牙、崩牙4号位侧方背光整体轮廓总长、杆部直径、头部厚度5号位顶部俯视方向/字符区混料、方向标记、批号字符1号位看正面外观2号位看背面和端面3号位抓螺纹质量4号位做高精度尺寸测量5号位做方向识别和混料筛选。五个工位的检测顺序就是零件在玻璃盘上走过的物理顺序。零件转一圈相当于做了一整套从表面到轮廓、从尺寸到字符的全身体检。1.3 为什么是五套CCD而不是一套或八套“五”这个数字一方面来自客户要求的检测项数量另一方面是成本和稳定性的平衡。如果只用一套CCD一个视野要同时覆盖正面、侧面、尾部意味着视野做得很大零件在画面里占比小分辩率不够打光也顾此失彼。想要靠旋转玻璃盘用同一台相机拍多个角度也不是不行但节拍会翻倍而且光源角度很难兼顾所有特征。反过来做八套甚至十套精度是够了但设备和程序复杂度大增。盘上物理空间有限相机、光源、支架、走线全挤在外面换型时调光路能把人调崩溃。我们后来的经验是常规五金小件的视觉筛选四到六个工位是最合理的区间五套正好是多数场景的平衡点。2. 五路相机与光源的选型逻辑先拆检测项再定分辨率2.1 像素当量怎么算检测精度决定视野和分辨率相机选型最大的误区是上来就问“用多少万像素的相机”正确顺序是——先明确这个工位要检测的最小特征尺寸然后反推视野和分辨率。以1号位测头部外径为例。客户图纸要求头部外径公差正负0.02mm如果要稳定测到这个精度一个像素对应到物方的尺寸至少得是公差的四分之一也就是约0.005mm。假设视野做到10mm宽来覆盖整个头部和周边那相机水平方向至少需要10÷0.0052000个像素。500万像素工业相机的水平分辨率是2448像素刚好满足再留点余量方便后续移动ROI。所以1号位果断用500万像素。计算公式统一整理成一句话像素当量mm/pixel视场宽度mm÷相机水平分辨率pixel然后把“公差÷像素当量”作为精度富裕系数工程上我一般要求这个系数在3到5之间。系数太小图像噪声、边缘抖动、零件定位偏差都会直接吃掉你的测量稳定性。2.2 相机、镜头、光源的搭配选择这台设备里相机统一用全局快门工业相机。虽然项目名叫CCD影像筛选机但新做的机型里用的基本都是全局快门CMOS传感器灵敏度更好、帧率更高行业沟通中大家还是习惯叫“CCD筛选机”不用纠结。镜头这块4号位因为要做高精度轮廓测量配的是远心镜头加背光源。远心镜头的好处是物方大小不会因为零件的远近变化而变化螺丝在盘上如果有一点高度方向的跳动普通镜头拍出来尺寸会跟着变远心镜头则很稳定。其他工位用普通工业定焦镜头或微距镜头就够把景深和光圈调好。光源的搭配要按检测类型来工位光源类型为什么这么选1号位同轴光或高角度环形光将头部金属反光均匀化突出裂角和毛刺的差异2号位低角度环形光让端面槽型产生阴影便于判断槽深和变形3号位条形光侧打在螺纹牙型上形成明暗条纹缺牙烂牙位置会破坏纹理连续性4号位背光源形成黑白剪影边缘锐利最适合亚像素尺寸测量5号位低角度环形光保证字符和方向标识有足够对比度这里有个容易被忽略的点金属零件对光源角度极其敏感。同一个螺丝光源角度差十度拍出来的缺陷对比度可能差一倍。所以光源支架一定要选可微调的装配时反复调角度调完锁死固化到换型基准里。2.3 触发链路与曝光时间高速过检的关键玻璃盘高速旋转时零件在相机视野里是“飞过去”的。如果靠软件里不停地抓帧很容易漏拍、重拍。所以这套系统的拍照全部是硬触发玻璃盘转轴位置安装编码器每转过一个设定的角度就发一个脉冲脉冲进入IO板后由IO板分发给对应工位的相机触发口。相机硬件收到触发信号后立刻曝光上位机只负责接收已经拍好的图像。触发链路的顺序是IO板接收编码器脉冲 → 按盘面角度映射到工位 → 输出触发信号给相机 → 相机曝光 → 图像进入上位机处理硬触发比软触发稳定的原因是它不依赖上位机线程调度。上位机哪怕有一瞬间卡顿相机该拍还是有硬件信号触发不会因为软件卡了造成整个节拍的丢失。这是自动化检测设备必须遵守的一条铁律关键的时序动作不要放在应用程序的线程里裸跑。3. 上位机程序的两个核心维度多工位取流与结果判定管线3.1 线程与队列五路相机同时干活结果怎么不乱上位机程序如果写成拍一张、处理一张、再拍一张那五路相机等于串行工作节拍一定跟不上。我搭的是一个主线程加五个取流线程的结构每个相机对应一个线程。相机的图像通过回调函数主动上报取流线程只负责把图像塞进该工位的待处理队列然后立刻回到等待状态处理逻辑由独立的处理线程去拿。这里最关键的是“零件ID”的同步。IO板触发相机时同时会给上位机一个触发序号这个序号就是零件在盘上的槽号。图像回调时把这个序号绑定在图像消息上处理完再带着同一个序号返回结果。实现时用一个字典结构键是零件ID值是该零件的各工位判定结果。伪代码大概长这样private ConcurrentDictionaryint, PartResult partDict new(); void OnImageReceived(int partId, int stationId, Image img) { bool ok ProcessImage(stationId, img); partDict.AddOrUpdate(partId, id new PartResult(id, stationId, ok), (id, existing) { existing.SetStationResult(stationId, ok); return existing; }); }partId从哪来IO板每触发一路相机会在通信缓冲里写一个“当前圈号槽号”的计数上位机取图像时同时读取。只要这个ID不重复五个工位的线程怎么并发处理都不会乱套。这个做法帮我避开了一个大坑多线程同时写同一个零件的判定结果如果没有原子保护统计的良率数据会错得离谱。3.2 图像处理管线与判据设计每个工位内部的图像处理流程本质上是固定的几步图像降噪 → 模板定位找到零件 → 提取ROI → 特征提取 → 尺寸测量/缺陷判断 → 输出布尔结果以1号位为例。因为玻璃盘高速运动零件在画面中的位置不是绝对固定的会有几个像素到十几个像素的偏移。如果直接把ROI框固定在图像坐标上很容易把玻璃盘上的灰尘划痕或旁边的零件框进来。所以第一步一定是模板定位拿一颗标准件预先存好模板每帧图像先做模板匹配找到零件中心然后基于中心坐标再偏移出检测ROI。定位之后做缺陷检测用传统的图像处理手段就够不需要一上来就上深度学习。毛刺、裂角这类特征在合适的光源下会表现为灰度突变区域做形态学处理和blob分析就能很稳定地抓到。尺寸测量则用边缘检测后在边缘附近做亚像素插值取边缘亚像素坐标相减得到尺寸值。判定逻辑不复杂bool result true; double headOD MeasureHeadDiameter(); if (headOD spec.HeadODMin || headOD spec.HeadODMax) result false; int crackArea CountBlobPixels(crackRoi); if (crackArea spec.MaxCrackArea) result false;这里要说一个特重要的经验判据里的阈值不要直接放在公差边界上要在软件里单独设“警告带”和“判定带”。具体做法我会在第五章展开。3.3 配方管理与换型同一个客户往往有几十种规格的螺丝要检测每种产品的视野位置、ROI坐标、光源亮度、曝光时间、公差范围都不一样。所以上位机必须做“产品配方”。配方文件里保存该产品的全部参数包括五个工位的ROI、判据、像素当量、触发延时、剔除角度差。换型时的操作流程是选择配方 → 一键载入 → 放标准件跑一遍标定 → 确认各工位亮度和尺寸读数在基准范围内 → 开始量产。以前没有配方管理的时候换一次产品要调半小时现在五分钟就能完成。对客户来说这比检测速度快更值钱。4. IO板通讯与剔除时序OK/NG信号为什么不能想发就发4.1 IO点表规划输入输出都要想清楚很多第一次做这类项目的人IO板的输入输出点只规划了“OK信号”和“NG信号”调试到后面才发现完全不够用。实际项目里IO点表至少要规划这几类方向信号名称用途输入运行/停止外部按钮和PLC联动控制启停输入复位故障或计数清零后复位输入来料检测进料口有料信号控制盘速自动运行输入安全门状态门打开时禁止运行保护操作人员输出OK脉冲判定良品时输出给分料机构计数输出NG脉冲判定不良品时输出触发吹气或拨杆输出剔除触发针对延时剔除给电磁阀一个宽度足够的信号输出运行准备就绪告诉PLC上位机系统和各相机已准备好输出故障报警相机断线、光源异常、通信错误时报警IO板选型上我坚持用带光电隔离的PCIe或USB数字IO板通道数至少要留百分之三十的余量。现场环境里有电机、电磁阀、变频器干扰特别多没有隔离的IO板很容易误触发——一颗良品被莫名吹进废料盒客户会疯掉的。4.2 时序计算从检测完成到剔除吹气差多少毫秒这是本文最核心的一个公式。玻璃盘转速是固定的假设某工位完成判定时不良品零件还需要转动一个角度才会到达剔除点的吹气嘴。那么从“结果产生”到“吹气动作”之间需要延时时间这个时间必须精确计算。公式如下t(ms) Δθ × 1000 / (6 × N)其中Δθ是检测工位到剔除点的角度差N是玻璃盘每分钟转速。举个例子。玻璃盘转速N90转/分钟4号位检测完成后零件还要转60度才到剔除点t 60 × 1000 / (6 × 90) 111.1ms也就是说上位机从拍完图到判定出结果并通知IO板必须在111ms内完成否则吹气就会晚把下一颗料给误吹了。这里有一个实操中的关键设计真正的延时输出由IO板硬件实现而不是上位机软件里设一个延时再输出。上位机在判定结果产生的那一刻只做一件事——把结果写入IO板的输出锁存寄存器之后IO板自行根据已经配置好的延时值在指定时间触发输出。这样即使上位机后一秒卡了、线程被阻塞了IO板硬件仍然能把NG信号准确发出去。标题里说的“上位机工控电脑采用IO板转换通讯输出OK/NG”完整含义就是这套“软件判定硬件输出”的配合逻辑。4.3 输出信号宽度与握手设计IO输出的脉冲宽度不能太短。PLC或者电磁阀的响应时间一般有几毫秒到几十毫秒你输出一个2ms的脉冲过去对方还没反应过来信号就没了。我习惯将OK和NG脉冲宽度设定在50ms左右既能保证可靠识别又不会因为太宽占用下一个节拍的判定周期。如果需要PLC参与分拣或记录还要做信号握手。上位机输出NG信号后不要立即复位要等PLC回一个“已收到NG信号”的输入信号后才允许将这路输出复位。否则就会出现PLC还没读到NG电平、上位机已经把信号撤了的情况。这种握手逻辑虽小但在客户现场能省掉许多玄学的“偶发漏判”问题。5. 调试期反复周旋的三个坑运动模糊、打光漂移、临界误判5.1 转速一上去图像就糊了项目初期玻璃盘转速提上去之后拍出来的图像整个是花的螺纹牙型拖影严重根本没法判断。原因很直接运动模糊。算一下就知道怎么回事。玻璃盘直径600mm零件在靠近外圈半径280mm处转速90转/分钟线速度大约是v 2π × 280 × 90 / 60 ≈ 2637mm/s如果曝光时间是1ms那零件在曝光期间移动了约2.64mm——大部分零件的直径都没这么大图像自然是糊的。要获得清晰的图像运动模糊位移至少要控制在0.02mm量级反推曝光时间t 0.02 / 2637 ≈ 7.6μs这种级别的曝光时间靠常规常亮LED光源根本不够。解决方案是上频闪光源相机曝光的同时光源控制器给出一个极短的超高亮光脉冲把瞬间亮度拉到常亮的几十倍甚至上百倍。于是画面里只有那个极短的瞬间被照亮运动被“冻结”了。这套方案的关键是光源控制器必须支持外触发模式由相机曝光信号同步触发闪光。调试期我踩过另一个连带坑频闪光源的瞬间电流很大所有光源控制器接到同一个电源上时电压跌落导致五路光源亮度不一致。后来把每路光源单独用一路带隔离的供电问题才消失。5.2 打光一致性漂移早上判OK晚上判NG的元凶设备上线第一周我们接到客户投诉同一批零件早上检测良率百分之九十八到了下午良率掉到百分之九十而且被误判NG的零件肉眼看着明明就是好的。排查后发现问题不在算法而在光路一致性漂移。LED光源会随着使用时间发热导致亮度衰减而且车间光线从早到晚也在变化玻璃盘表面还会不断积累灰尘。同一颗零件早上拍出来的对比度和下午拍出来的对比度会有明显差异原先设定好的灰度阈值就失效了。解决思路分三块物理上给检测区域加遮光罩把环境光的影响挡到最低软件里每个工位ROI内统计灰度均值和对比度如果偏差超出设定范围上位机直接弹警示“光源状态异常”管理上要求客户每班开班前用一块标准件跑一遍标定程序软件自动比较当前亮度和基准亮度的差异超出范围就锁定设备不允许启动。这三块叠加后光源漂移导致的误判基本消掉了。5.3 临界品误判漏判比误判严重得多判据必须偏向NG所谓临界品就是尺寸或缺陷刚好卡在公差边界一带的零件。图像算法受噪声、边缘像素、零件微小抖动影响同一颗临界品可能这次测出来超差下次测出来合格。这种波动在高速检测中非常常见。和客户沟通后我意识到筛选机这个场景里客户对“漏判”的容忍度远低于“误判”。一颗不良品漏出去流到客户终端可能导致整个批次被退货而一颗良品被误判NG不过就是多废一颗料成本可控。所以判据设计必须主动偏向NG。具体做法是将判定线从规格边界向内收紧判定NG的尺寸上限 规格上限 - 缓冲值判定NG的尺寸下限 规格下限 缓冲值缓冲值一般取该尺寸测量波动的三倍标准差。比如测头部外径标准差的统计结果在0.003mm左右缓冲值就设为0.01mm。落进缓冲带的零件软件按NG处理不犹豫。这个方法牺牲了一部分误判率但换来了可观的漏判率下降在客户那里是值钱的。又因为NG本身是合理的我还会在软件里做一个“可疑品复检”的算法路由如果检测结果落在警告带而不是判定带上位机把该零件标记为可疑到剔除点时不直接吹掉而是送入一个独立缓存盒待人工复检。这样既保住了漏判底线又不会浪费太多良品。6. 验收时客户最在意的三个数字漏判率、误判率与UPH6.1 三项指标的现场计算口径项目验收时客户盯着的就三个数字漏判率、误判率、UPH。漏判率的实测方法是提前准备一批已知缺陷样件涵盖裂角、缺牙、毛刺、尺寸超差等类别每类做二十到五十颗混进正常批次里让设备在满速状态下反复跑十轮统计有多少颗缺陷品被判成OK。漏判率就是被判成OK的缺陷品数除以缺陷品总数。误判率的实测方法更容易理解拿一批百分百确认过是良品的零件跑完整流程统计被吹进废料盒的数量占比。UPH的计算则是一个理论值和实测值结合的过程UPH ≈ 盘速圈/分钟× 盘面有效载料位 × 60 × 有效送料系数例如90转/分钟、120个载料位送料机构不可能做到百分之百满有效送料系数一般取0.85左右那么UPH≈90×120×60×0.85550800颗/小时。不同行业的验收标准差异很大。普通五金件通常漏判控制到0.1%以下、误判0.5%以下就算合格用在汽车关键安全件上漏判率要求收敛到几十ppm级别那就需要在剔除位后增加几套复检机位。6.2 数据统计与NG图像追溯工程上最怕的是“知道有不良但说不清不良出在哪一步、长什么样”。所以上位机必须做三件事实时统计、NG图像存档、批次报表导出。每颗NG料被判定时软件自动把触发序号、工位号、NG原因、时间戳以及该工位的原图一起存入本地数据库。对客户来说每天早上上班打开软件就能看到昨天的直方图和缺陷分布质量部门拿去跟来料批次做复盘非常方便。这里分享一个细节NG图保存格式不要存原始大图全部压缩成JPEG按零件ID命名。曾经有个客户一天生产五十万颗不良率百分之三也就是一万五千张图如果存原始BMP图一天能吃掉几GB硬盘一个月磁盘就满了。6.3 最后聊两句维护上的体会验收结束后我在机台控制柜门上贴了一张标签内容很简单“每班开班前用标准件跑一遍标定每周用酒精清洁玻璃盘和光源透镜光源控制器参数改动后必须重新跑全工位标定。”这张标签背后全是调试期换来的教训。玻璃盘CCD筛选机这种设备硬件选型、软件算法、时序配合各占三分剩下的一分全在日常维护管理的细节里。设备再稳定玻璃盘脏了、光源老化、标准件被磕碰检测精度一样会悄悄掉下去。把这些规则固化到SOP里比买再贵的相机都管用。
RELATED

相关推荐

JavaScript三元运算符从执行机制到实战避坑:优先级、嵌套与可读性全解析

JavaScript三元运算符从执行机制到实战避坑:优先级、嵌套与可读性全解析

JavaScript里的三元运算符,说实话是个看着简单、用起来却特别容易翻车的语法。 condition ? a : b 这么一行,新手觉得是if-else的偷懒写法,老手却知道它藏在优先级、类型转换、可读性里头的门道多得是。我见过不少项目里为了追求“代码短”…

📅 2026/10/21 18:37:33
连锁驾校服务系统设计:SSM+Vue实现跨校区约课与转校流程

连锁驾校服务系统设计:SSM+Vue实现跨校区约课与转校流程

1. 先说清楚:连锁驾校服务设计到底在“设计”什么 做毕业设计这些年,我见过太多以“驾校管理系统”为名的项目,最后做出来就是一个非常简单的报名加约课 CRUD。这不怪学生,因为单校区驾校的业务确实就那几条线:学员报名…

📅 2026/10/21 18:37:33
USB供电充电电路图及原理介绍:从5V到4.2V的完整链路与设计要点

USB供电充电电路图及原理介绍:从5V到4.2V的完整链路与设计要点

简介:这份PDF资料聚焦USB供电的充电电路图及原理,面向电子工程、硬件设计与嵌入式开发方向的初学者及工程师,帮助读者理解USB总线供电规范、电池充电电路设计思路及常见实现方案。资源共1个文件,为PDF格式,压缩包约684…

📅 2026/10/21 18:37:33
MORE NEWS

更多资讯

📰

嵌入式C与标准C的差异:内存、运行时与编译器行为解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

UWB定位锚点三合一实测:中继、定位、信标如何兼顾部署效率

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

PLC工程师实战错题本:90条现场踩坑经验与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

从零理解电机旋转电压矢量:Clarke/Park变换与SVPWM仿真实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

从零搭建步兵机器人:硬件选型、供电与通信全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

读懂HCU控制模块说明书:状态机、标定与故障码排查

简介:《HCU控制模块使用说明书》是一份中文PDF版技术手册,面向MD880和HE系列变频器的调试与维护人员,系统讲解HCU控制模块的选型、安装、接线及扩展方法。文档按基本整流(HCU-20)、回馈整流(HCU-30&#xf…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬