Appearance
BGA球共面度检测
项目简介
项目背景
焊锡球的共面度不良可能导致焊接不良、短路等问题,严重影响产品的性能和寿命,将测量得到的数据进行统计分析,包括最大值、最小值和均值等,以评估焊锡球的共面度是否满足产品要求。
相机选型
LMI激光线扫相机 Gocator2520
检测要求
测量精度 ≤ 0.03mm
测量重复性 ≤ 0.02mm
测量周期 ≤ 2s
解决方案
AI-Vision采用集成工具的方法,一个工具直接计算出整体小球的共面度,在大大提升速度的同时简化了工程逻辑。
设计思路
执行效果展示
工程结果展示:
HMI结果展示:
操作流程
一、初始化
- 选择
Lua脚本语言
工具,创建待接收数据的csv文件。
- 拼接表头字符串,保存到csv文件
经验
.. 用于string类型字符串拼接
part1 = "Hello, "
part2 = "world!"
result = part1 .. part2
print(result) # 输出: Hello, world!
,
作为分隔符,分割每个数据项
lua
-- 生成用于拼接的字符串
write = ""
--判断该文件是否存在,若不存在生成该文件,若存在跳过生成
if FileExists("./BGA.csv") == false then
-- “,”表示下一列,“\n”表示换行
write = write .. "Time," .. "Degree of coexistence" .. "," .. "OK/NG" .. "\n"
end
-- 拼接入当前时间
write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 字符串写入csv文件中
-- 当无该文件时,系统会自动生成该文件,同时该工具会WARN提示系统内无该文件
PrintToFile("./BGA.csv" , write)
- 选择
加载点云
工具,获取点云。
二、预处理
位置调整
在实际项目运行过程中,工件摆放位置可能有偏差,因此可以通过查找单个点或线来调整点云3D位置,确保不同图像原点在同一位置。
使用
3D方形探针工具
,得到工件的左侧与上侧两条边。使用
3D几何交点工具
,绑定上一步算子变量输出的两条边作为输入几何,输出两直线交点。使用
3D位置调整工具
,绑定上一步算子输出输出的直线交点作为新原点调整点云XY方向位置。
平面拟合
在实际项目运行过程中,工件摆放z轴方向也就是上下位置可能会有偏差,需要确立z轴零平面作为基准面,确保点云同一平面高度(z值)相同。
选择
3D区域
工具,选取pcb板上面6块突出的柱子为拟合平面的区域。选择
3D平面
工具,绑定上一步获取的区域作为输入区域来拟合平面,并将拟合出来的平面作为零平面。
二次定位
对于该案例,客户要求的xy原点位置在点云中心位置,因此需要进行二次定位来调整基准位置。
- 选择
3D方形探针
工具,在四条边上选取区域box,执行工具找到上下左右4条边。
选择
3D几何交点
工具,分别绑定上一步找到的四条边中的两条边作为输入,获取左上左下右上右下四个顶点。选择
多点定位工具
工具,绑定上一步获取的四个顶点位置参数作为输入点,执行工具输出上下左右四个顶点的中心点,同时调整点云位置xy到中心点。
裁切出待测区域
该工程针对焊锡球共面度,为了便于直接对焊锡球进行后续测量,可以裁切出焊锡球区域。
选择
3D裁切
工具,设置区域box只包含焊锡球点云区域,输出得到只包含焊锡球区域点云到IM1,便于后续处理。
三、共面度测量
选择共面度
工具,框选出进行测量的区域,进行共面度检测。
四、数据判断及保存
选择lua语言脚本
工具,将测量的结果进行判断且显示在图像上,并将判断结果和数据保存在文件中。
绑定
共面度
工具输出变量平面度值根据平面度值进行结果判断并显示数据
- 保存判断结果到csv文件。
经验
string.format 用于格式化字符串 %.nf表示将浮点数格式化为保留 n 位小数。
pi = 3.14159 str = string.format("Pi is approximately %.3f", pi) print(str) -- 输出: Pi is approximately 3.141
lua
-- 设置全局变量
SetFloatVariable('Value',math.floor(1000*Result)/1000)
-- 进行结果判断
if Result<0.065 or Result>0.075 then
-- 数据显示
DrawText3D(0,"red",0,0,5,20,"检测结果:" .. "NG")
write = string.format("%.3f," , Result) .. "NG" .. "\n"
else
DrawText3D(0,"green",0,0,5,20,"检测结果:" .. "OK")
write = string.format("%.3f," , Result) .. "OK" .. "\n"
end
-- 将字符串写入文件中
PrintToFile("./BGA.csv" , write)