ID : 2895
视觉跟踪的编程示例
视觉跟踪时的编程示例如下所示。
以跟踪范围中收纳的长工件为对象。
应用示例
可通过以下3个程序执行视觉跟踪。
-
“主程序”
这是执行与圆形跟踪相关的初始化处理的程序。
-
“工件检测程序”
执行工件位置检测并将数据保存至跟踪缓冲区的程序。
-
“跟踪动作程序”
从跟踪缓冲区读取检测的工件位置,并执行跟踪、挑选动作的程序。
1.主程序(VisionTracking.pcs (PCS:279B))
清空传送带1的跟踪缓冲区,开始视觉传感器发出信号的触发器检测。
TrackInitialize 1, 0
并列执行工件检测程序、跟踪动作程序。
Run Vision
Run Tracking
2.工件检测程序(Vision.pcs (PCS:4KB))
进行视觉传感器的初始化。由用户记述使用的各视觉传感器的初始化处理内容。
Call visInitialize
通过视觉传感器执行工件检测处理。由用户记述使用的各视觉传感器的工件检测处理内容。
Call visSearch
获取通过视觉传感器检测到的工件的个数。由用户记述使用的各视觉传感器的处理内容。
Call getWorkNum( workNum )
仅获取检测到的工件个数的视觉传感器检测坐标和工件中配置的用户数据值。
由用户记述使用的各视觉传感器的处理内容。
For index = 0 To workNum - 1
Call getVisData( index, visionX, visionY, visionAngl, userData )
...
Next index
在子过程“getVisData()”中的处理。将通过视觉传感器检测到的视觉传感器检测坐标与用户数据设定为一组,经由参照传输所传输的过程自变量,返回过程的调出源。
以下示例时,在“x = 100[pixel]”、“y = 100[pixel]”、“θ = 90[deg]”检测到工件。
Sub getVisData( _
ByVal index As Integer, _
ByRef visionX As Double, _
ByRef visionY As Double, _
ByRef visionAngl As Double, _
ByRef userData As Integer _
)
visionX = 100
visionY = 100
visionAngl = 90
userData = 1
End Sub
将通过“getVisData()”获取的数据整合为排列,添加到跟踪缓冲区。
For index = 0 To workNum - 1
...
arrayVis( index ) = V( visionX, visionY, visionAngl )
arrayUser( index ) = userData
Next index
TrackSetVision 1, workNum, arrayVis, arrayUser
3.跟踪动作程序(Tracking.pcs (PCS:2KB))
通过TrackStart指令,开始圆形跟踪前向初始位置移动。
请注意,在圆形跟踪中,如果执行Move指令等常规动作指令,将中断跟踪动作。
Move P, P[50]
每次检测到工件时,用于执行跟踪、挑选动作的主循环。
将内部I/O的ON信号设定为循环继续的条件,以便可在中途结束循环。
Do
P[10] = TrackTargetPos(1)
...
TrackApproach P, P[10], 50
...
LOOP UNTIL IO[128] = ON
循环内的处理。
首先,从跟踪缓冲区调取工件数据,将其设定为跟踪对象工件。
未检测到工件时,在此行待机,直至检测到工件且跟踪缓冲区装满数据。
P[10] = TrackTargetPos(1)
指示跟踪模式开始。在执行此指令阶段,机器人尚未开始移动。
执行TrackApproach指令等跟踪动作指令并开始初次移动。
TrackStart 1
Wait TrackInRange(1), 10000, timeoutFlg
一边为与转台等速执行跟踪动作,一边从跟踪对象工件朝上方50mm的趋近位置移动。
TrackApproach P, P[10], 50
一边为与转台等速执行跟踪动作,一边朝跟踪对象工件接近。
TrackMove P, P[10]
一边为与转台等速执行跟踪动作,一边从跟踪对象工件朝上方离开50mm。
TrackDepart P, 50
指示跟踪模式结束。结束转台追踪动作并减速停止。
执行此指令前,工件超出跟踪范围下游下限时,将发生错误。
TrackStop
将挑选的工件搬运至排出位置。
Approach P, P[52], 50
ID : 2895