PF_Vision
お客様が、撮像処理(照明制御, ビジョンの実行, SPELプログラム処理)を記述したい場合に使用します。ビジョンの実行だけでは、パーツの検出や姿勢(表裏など)の判別が困難な場合に使用します。本機能を使用するには、Epson RC+ 8.0メニュー - [ツール] - [Part Feeding] - [Vision]で、[PF_Vision callbackでビジョン処理を行う]を選択してください。
書式
Function PF_Vision(パーツID As Integer, ByRef numBack As Integer) As Integer
' (ビジョン処理)
Fend
パラメーター
- パーツID
パーツID (整数値1~32)が入ります。
マルチパーツ動作時は、アクティブパーツが入ります。 - numBack
ピック不能なパーツ (裏向きなど)の個数が代入されます。(ByRef指定されています。)
この値は、Part Feedingプロセスが、フリップ要否の判定に使用します。
表裏のないパーツの場合は、“0”を設定します。
戻り値
処理を継続したい場合、PF_CALLBACK_SUCCESSを設定してください。
エラー処理を行いたい場合、ユーザー定義エラー番号 (8000 - 8999)を設定してください。
この値はPF_Statusコールバック関数の引数として渡されます。
解説
この関数は、複数のビジョンシーケンスと、外部照明制御を組み合わせてパーツ座標を検出する場合に使用します。以下のような処理をお客様が記述します。
- カスタム照明制御
- ビジョン実行 (VGet ステートメントの実行)
- パーツ座標キューの管理(初期化、およびポイントデータの登録)
プログラム例
次のプログラムは、2つのビジョンシーケンスVSeq1 (Geomオブジェクト1つを含む)、およびVSeq2 (Geomオブジェクト1つを含む)を使用してパーツを検出する例です。VSeq1は、カスタム照明1とともに使用し、パーツの位置を検出しますが、姿勢が判定できません。VSeq2は、カスタム照明2とともに使用し、表パーツのみを検出します。
検出したパーツの座標 (ローカル番号1とする)は、PF_QueAddコマンドで座標キューに入れます。このときZ座標は、以下で得た値を代入します。
ティーチウィンドウ
フリップを有効にする場合は以下を参照してください。
全般
[パーツビジョンシーケンス]にVSeq2を指定し、カスタム照明2を点灯させます。以下を参照してください。
ビジョン
フリップのキャリブレーションを行います。以下を参照してください。
キャリブレーション
' ** IO Label (Output) **
' O_FrontLight1 カスタム照明1
' O_FrontLight2 カスタム照明2
Function PF_Vision(partID As Integer, ByRef NumBack As Integer) As Integer
Boolean found
Integer i, numFound
Real PX_X, PX_Y, PX_U
Real RB_X, RB_Y, RB_U, RB_Z
' ピックZ座標
RB_Z = -80.0
' 座標キューを初期化
PF_QueRemove partID, All
' カスタム照明1点灯
On O_FrontLight1
' パーツを検出(UsrVisionSeq1実行)
VRun VSeq1
VGet VSeq1.Geom01.NumberFound, numFound
' カスタム照明1消灯
Off O_FrontLight1
' カスタム照明2点灯
On O_FrontLight2
numBack = 0
For i = 1 To numFound
' VSeq1.Geom01で検出したパーツのXYピクセル座標を取得し
' そのパーツを囲むようにVSeq2.Geom01のサーチウィンドウを設定
' パーツサイズ = 100 × 100 p × l
VGet VSeq1.Geom01.PixelXYU(i), found, PX_X, PX_Y, PX_U
VSet VSeq2.Geom01.SearchWinLeft, (PX_X - 50)
VSet VSeq2.Geom01.SearchWinTop, (PX_Y - 50)
' VSeq2実行
VRun VSeq2
VGet VSeq2.Geom01.Found, found
If found = True Then
' 検出できたら表パーツなので座標キューに登録
' ローカル番号は1
VGet VSeq1.Geom01.RobotXYU(i), found, RB_X, RB_Y, RB_U
PF_QueAdd partID, XY(RB_X, RB_Y, RB_Z, RB_U) /1
Else
' 検出できなかったら裏パーツ
numBack = numBack + 1
EndIf
Next
' 外部照明2消灯
Off O_FrontLight2
PF_Vision = PF_CALLBACK_SUCCESS
Fend