Skip to content

指令碼迴圈

專案流程

一、初始化

  1. 選擇lua语言脚本根據,初始化兩個全域性變數用於儲存當前迴圈所在行列。
lua
--设置用来保存当前所在行列的全局变量
SetVariable("Column",0)
SetVariable("Loop",0)
  1. 使用加载点云工具,載入需要處理的點雲圖。

二、預處理

擬合平面

  1. 使用3D区域工具,選擇擬合平面的區域。

  2. 使用3D平面工具,繫結上一步運算元輸出的變數區域作為輸入區域,擬合平面並將其設定為零平面。

三、指令碼迴圈測量Pin針高度

  1. 使用3D裁切工具,裁切出待測量的Pin針區域。

  2. 使用3D变换工具,旋轉Pin針區域。

  3. 使用3D斑点工具,框選需要的Pin針獲取每個Pin針的位置資訊。

  1. 選擇标记工具,設定名字為loopColumn並將其作為行迴圈跳轉點。

  2. 選擇lua语言脚本工具,繫結3D斑点工具輸出的Pin針中心位置資訊命名為bolb。將當前列數設為Loop=0,獲得當前行數,得到該行起始點座標並將其儲存到StartColumn中。

lua
--将列号设为零,从新的一行的第一个开始。
SetIntVariable("Loop",0)
--得到当前的行号
Column = GetVariable("Column")
--得到当前行起始点的坐标
x = blob[Column+1].X
y = blob[Column+1].Y
z = blob[Column+1].Z
--将起始点坐标赋值给"StartColumn"
SetPoint3D("StartColumn",x,y,z)
  1. 選擇标记工具,設定名字為loopPin並將其作為列迴圈跳轉點。

  2. 選擇lua语言脚本工具,box起始座標終點座標為0,繫結第五步lua脚本工具輸出的行起始點座標賦值給cs_x,cs_y,cs_z,得到當前列數,通過兩個Pin之間的間距進行陣列,再將盒子的資料推送到運算元輸出變數。

lua
pcb_pinsx1 = 0
pcb_pinsy1 = 0
pcb_pinsz1 = 0
pcb_pinex1 = 0
pcb_piney1 = 0
pcb_pinez1 = 0

Loop = GetVariable("Loop")

-- 2.5,0.5 可根据现场器件图纸自由切换,此处数据无实际参考意义
pcb_pinsx1 = cs_x + Loop * 2.5 - 0.5
pcb_pinex1 = cs_x + Loop * 2.5 + 0.5
pcb_pinsy1 = cs_y - 0.8
pcb_piney1 = cs_y + 0.8
pcb_pinsz1 = cs_z - 0.1
pcb_pinez1 = cs_z + 0.6


--将盒子的位置信息推送到寄存器中,用来进行高度测量
SetBox("box1",pcb_pinsx1, pcb_pinsy1, pcb_pinsz1, pcb_pinex1, pcb_piney1, pcb_pinez1)
DrawBox(0, "green", pcb_pinsx1, pcb_pinsy1, pcb_pinsz1, pcb_pinex1, pcb_piney1, pcb_pinez1)
  1. 選擇3D高度工具,繫結上一步lua脚本工具的輸出變數(box)作為待測區域,測量高度。

  2. 選擇lua语言脚本工具,進行行列數判斷,當列數小於3時,跳轉到loopPin標記處,當列數等於3時,跳轉到loopColumn標記處,當行數等於5時,跳轉到End標記處。

lua

-- 循环判断
Loop = GetVariable("Loop") + 1
if Loop == 3 then
    Column = GetVariable("Column") + 1
    SetIntVariable("Column", Column)
    if Column < 5 then
    -- 循环五行
        Jump("loopColumn")
    else
        Jump("End")
    end
elseif Loop < 3 then
    -- 行内循环
    Jump("loopPin")
end

SetIntVariable('Loop',Loop)
  1. 選擇标记工具,設定名字為End並將其作為迴圈終止跳轉點。

Vision Studio