端子高度測量
工程背景
測量背景
為了確保產品端子的質量和安全性,並最佳化其效能,製造商需要嚴格控制生產過程中的每一個環節,包括端子的尺寸精度。端子的高度3D檢測旨在通過3D高度檢測工具,實現對產品端子高度物理尺寸的精確測量。
測量項
端子高度
解決方案
Vision-Studio採用裁切工具,將端子部分裁切出來,在端子位置建立ROI陣列,使用高度工具一鍵測量。
設計思路

執行效果展示

專案流程
一、初始化

- 使用
Lua脚本工具,初始化需要儲存的csv檔案的表頭。
csvHead = ""
for i=1,18,1 do
--将"Name"修改为"您需要的列名"
csvHead = csvHead .. "Pin" .. i .. ","
end
csvHead = csvHead .. "\n"
--创建文件,脚本第一次运行时,没有就创建
--将"./Save.csv"修改为"您想要保存的文件名.csv"
if FileExists("./Save.csv") == false then
PrintToFile("./Save.csv", csvHead)
end選擇
加载点云,獲取點雲選擇
3D裁切工具,裁切掉多餘噪點。
二、預處理
位置調整

- 使用
3D方形探针工具,分別找到點雲左邊直線和點雲上邊直線。

使用
3D几何交点工具,根據上一步檢測到的直線,計算兩直線交點。
使用
3D位置调整工具,調整定位到到兩直線交點位置

平面擬合

使用
创建roi工具,選擇基準區域
使用
3D平面拟合工具,根據上個工具選擇的區域,擬合平面並將其設定為零平面。
裁切出端子區域
使用3D点云裁切工具,設定z範圍裁切出端子區域

端子高度測量

通過迴圈陣列roi的方式來實現迴圈測量所有端子高度。每次迴圈測量兩列相鄰的端子高度,端子高度的測量方式:用端子測量高度-基準區域測量高度。
- 使用
Lua脚本工具,初始化迴圈開始值及初始box; 給出迴圈開始值1及相鄰兩個端子列的第一行box位置資訊。
SetIntVariable("loop", 1)
SetFloatArrayVariable("h_dif", {})
SetFloatVariable("box_sx", 0.635)
SetFloatVariable("box_sy", -4.844)
SetFloatVariable("box_sz", -0.362)
SetFloatVariable("box_ex", 0.881)
SetFloatVariable("box_ey", -4.690)
SetFloatVariable("box_ez", 0.354)
SetFloatVariable("box_d_sx", 1.200)
SetFloatVariable("box_d_sy", -5.173)
SetFloatVariable("box_d_sz", -0.204)
SetFloatVariable("box_d_ex", 1.284)
SetFloatVariable("box_d_ey", -5.029)
SetFloatVariable("box_d_ez", 0.400)使用
标记工具,標記迴圈開始。使用
Lua脚本工具,根據上一個lua指令碼輸出的box位置資訊輸出相鄰兩個端子列的第一行box及兩個端子參考計算高度的基準位置box。
SetBox("box", box_sx, box_sy, box_sz, box_ex, box_ey, box_ez)
SetBox("box2", box_sx + 0.4, box_sy, box_sz, box_ex + 0.4, box_ey, box_ez)
SetBox("box_d", box_d_sx, box_d_sy, box_d_sz, box_d_ex, box_d_ey, box_d_ez)使用
创建ROI阵列工具,根據上一步輸出的box作為手動模式輸入區域,根據計算行數列數及行間隔列間隔陣列一列box。
使用
3D高度工具,計算上一步使用创建ROI阵列工具陣列的一列box種所有box內區域的高度。
使用
lua脚本工具,繫結相鄰兩列端子的高度資料及參考計算高度的基準位置高度資料,計算端子高度並存入csv檔案。
save_h = ""
for i=1, #input1, 1 do
save_h = save_h .. (input0[i] - input1[i]) .. ","
end
save_h = save_h .. "\n"
for i=1, #input1, 1 do
save_h = save_h .. (input2[i] - input1[i]) .. ","
end
save_h = save_h .. "\n"
if FileExists("./Save.csv") == true then
PrintToFile("./Save.csv", save_h)
end使用
变量设置工具,將迴圈變數加1
使用
条件分支工具,實現當迴圈大於等於15時不執行條件分支,工程執行結束,迴圈小於15時跳轉到loop標記繼續執行下一次迴圈計算下兩列端子的高度。
使用
lua脚本工具,設定下一次迴圈兩列端子的第一行box位置值 前7組端子和後7組端子
if loop ~= 8 then
SetFloatVariable("box_sx", box_sx + 1)
SetFloatVariable("box_ex", box_ex + 1)
SetFloatVariable("box_d_sx", box_d_sx + 1)
SetFloatVariable("box_d_ex", box_d_ex + 1)
else
SetFloatVariable("box_sx", box_sx + 3)
SetFloatVariable("box_ex", box_ex + 3)
SetFloatVariable("box_d_sx", box_d_sx + 3)
SetFloatVariable("box_d_ex", box_d_ex + 3)
end使用
跳转工具,跳轉到迴圈開始標記
