以SPEL+語言存取多個結果
藉由使用NumberToFind屬性,某些Correlation及Blob物件等Vision Guide物件即有能力以單一物件尋找多項特徵。當我們在[Object]視窗中可檢查結果時,CurrentResult屬性除了用來設定要Results清單中顯示的結果,也可用於決定哪些結果記錄要回傳結果。例如,若想要從Blob物件所回傳的第3個結果來取得Area結果,就必須將CurrentResult設定為3。您已看過如何從[Object]視窗的Properties清單完成CurrentResult屬性的設定。現在讓我們看看如何以SPEL+存取多個結果。
從SPEL+存取多個結果時,會將結果視為一個陣列,其中的結果數是一個下標數字,位於所要取得的結果旁邊。下列的第一個範例顯示如何以SPEL+語言取得第三個Area結果,並放置在一個稱為Area的變數中。
VGet seqname.objname.Area(3), area
下列的第2個範例顯示如何取得相同的第三個Area結果,但這次將其指定為在一個稱為Area()的陣列中第三個元素的值。
VGet seqname.objname.Area(3), area(3)
變數名稱也可以用來表示陣列中的元素,而非在上述的第2個範例中的固定元素。請注意,稱為var的變數可用來作為Area結果的下標。
VGet seqname.objname.Area(var), area(var)
第4個範例,假設您已使用單一Vision物件來尋找多個相似的零件 (假定最多10個)。現在您可能想要以機器人抓取這些零件(假設它們是筆),因此您必須將X、Y和U座標儲存至陣列變數,藉此針對每一個找到的零件,表示其座標值。下列的程式碼會從RobotXYU結果中讀取出這些座標,並放入X、Y和U陣列後,供機器人用來進行移動。
Function test
Boolean found(10)
Integer numfound, i
Real x(10), y(10), u(10)
Jump camshot 'move camera into position snap shot
VRun seq01 'run the vision sequence to find the pens
VGet seq01.blob01.NumberFound, numFound 'how many found
For i = 1 to numFound 'get robot coords
VGet seq01.blob01.RobotXYU(i), found(i), x(i), y(i), z(i)
Next i
'Add code for robot motion here……
Fend