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(包括1个Geom对象)与VSeq2(包括1个Geom对象)检测部件的示例。同时使用VSeq1与自定义照明1,以检测部件的位置,但不能判定姿势。同时使用VSeq2与自定义照明2,仅检测表面部件。
通过PF_QueAdd命令,已检测部件的坐标(设为本地编号1)被放入到坐标队列中。此时,将按如下所述获取的值代入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