SPEL+言語から複数リザルトにアクセスする方法
CorrelationオブジェクトとBlobオブジェクトのようなVision Guideオブジェクトは、NumberToFindプロパティーを使って1つのオブジェクトで複数の対象物を検出することができます。CurrentResultプロパティーは、オブジェクトウィンドウでリザルトを確認する場合に、リザルトリストに表示するリザルトを設定するのに使います。また、リザルトとしてどのリザルトレコードを返すかを指定することができます。言い換えると、Blobオブジェクトから返される3番目のリザルトからAreaリザルトを得たい場合は、CurrentResultプロパティーを3に設定しなければなりません。[オブジェク]ウィンドウのプロパティーリストを使ってCurrentResultプロパティーを設定する方法については、すでに説明したとおりです。ここでは、SPEL+言語から複数リザルトにアクセスする方法について説明します。
SPEL+言語から複数リザルトへのアクセスは、得られるResultの隣に添字番号をもつCurrentResultプロパティーが参照をつけられる配列の型のように、Resultを扱います。下の1番目の例は、3番目のAreaリザルトを得て、それをSPEL+言語から領域という変数に入れる方法を示します。
VGet seqname.objname.Area(3), area
下の2番目の例は、同じく3番目のAreaリザルトを得ますが、今回はそれをArea()と呼ばれる配列の第3要素の値として代入する方法を示します。
VGet seqname.objname.Area(3), area(3)
変数名はまた、上の2番目の例のように固定された要素としてよりも、配列の要素を表すのに使われます。“var”という変数はAreaリザルトの添字として使われることに注目してください。
VGet seqname.objname.Area(var), area(var)
4番目の例は、1つのビジョンオブジェクトを使って、パーツのようなまとまり(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