Appearance
焊点缺陷检测
工程背景
测量背景
随着电子产品集成度提高,焊点质量直接影响产品性能与可靠性。为确保产品质量,需精准测量焊点尺寸、形态及电气性能,及时发现缺陷,优化生产工艺,提升产品竞争力。
相机选型
盛相ST081043
测量项
焊点的体积、高度、截面积
检测要求
测量精度 ≤ 0.05mm 测量重复性 ≤ 0.05mm 测量周期 ≤ 3s
解决方案
使用AI-Vision软件,使用焊点检测集成工具,一键测量焊点信息。运行速度快,精度高,同时流程简单,模块化,方便搭建。
设计思路
执行效果展示
工程结果展示
项目流程
一、初始化
[00] 使用Lua脚本工具
,生成保存数据的csv文件“Test”。
lua
-- 生成保存检测数据的csv文件
-- 生成用于拼接字符串的表头
write = ""
-- 字符串写入csv文件中
-- 当无该文件时,系统会自动生成该文件,同时该工具会WARN提示系统内无该文件
if FileSize("./Test.csv") <= 0 then
write = write .. "Time,"
for i =1,3,1 do
write = write .. "Circularity" .. i ..",Circumference" .. i ..",Area" .. i ..",FeretX" .. i ..",FeretY" .. i ..",MaxHeight" .. i ..",SurfaceArea" .. i ..",Volume" .. i ..","
end
write = write .. "\n"
end
write = write .. os.date("%Y_%m_%d %H:%M:%S") .. ","
-- 字符串写入文件中
fprint("./Test.csv", write)
[01] 使用加载点云工具
,加载点云。
二、初定位
[02-05] 使用3D方形探针工具
与3D几何交点工具
输出焊板左下侧顶点坐标并推送至寄存器中;同时使用3D位置调整工具
,以该点作为新原点,调整X轴Y轴的位置。
[06-07] 使用3D区域工具
与3D平面工具
选择区域并拟合零平面,同时调整Z轴位置。
三、焊点测量
[08-10] 使用焊点检测工具
,测量焊点体积、高度、截面积等信息。
[11] 使用Lua脚本工具
,保存测量的数据。
lua
-- 读取测量数据并转换为表格模式
R1 = GetVariable("Result_1")
r1 = ConvertJsonToTable(R1)
R2 = GetVariable("Result_2")
r2 = ConvertJsonToTable(R2)
R3 = GetVariable("Result_3")
r3 = ConvertJsonToTable(R3)
write = ""
-- 读取数据并拼接如字符串中
write = write .. string.format("%.3f,",r1 .Result[1]["Circularity"])
.. string.format("%.3f,",r1.Result[1]["Circumference"])
.. string.format("%.3f,",r1.Result[1]["Cross Section Area"])
.. string.format("%.3f,",r1.Result[1]["Feret X"])
.. string.format("%.3f,",r1.Result[1]["Feret Y"])
.. string.format("%.3f,",r1.Result[1]["Max Height"])
.. string.format("%.3f,",r1.Result[1]["Surface Area"])
.. string.format("%.3f,",r1.Result[1]["volume"])
write = write .. string.format("%.3f,",r2 .Result[1]["Circularity"])
.. string.format("%.3f,",r2.Result[1]["Circumference"])
.. string.format("%.3f,",r2.Result[1]["Cross Section Area"])
.. string.format("%.3f,",r2.Result[1]["Feret X"])
.. string.format("%.3f,",r2.Result[1]["Feret Y"])
.. string.format("%.3f,",r2.Result[1]["Max Height"])
.. string.format("%.3f,",r2.Result[1]["Surface Area"])
.. string.format("%.3f,",r2.Result[1]["volume"])
write = write .. string.format("%.3f,",r1 .Result[1]["Circularity"])
.. string.format("%.3f,",r3.Result[1]["Circumference"])
.. string.format("%.3f,",r3.Result[1]["Cross Section Area"])
.. string.format("%.3f,",r3.Result[1]["Feret X"])
.. string.format("%.3f,",r3.Result[1]["Feret Y"])
.. string.format("%.3f,",r3.Result[1]["Max Height"])
.. string.format("%.3f,",r3.Result[1]["Surface Area"])
.. string.format("%.3f,",r3.Result[1]["volume"])
write = write .. "\n"
-- 保存数据至csv文件中
fprint("./Test.csv",write)