<< 向前        下一页 >>

ID : 2982

[视角跟踪]自由曲线插补的编程示例

以下阐述通过视觉跟踪执行自由曲线插补动作(TrackMove S)时的编程示例。
跟踪范围中收纳的长工件为对象。

应用示例

可通过以下3个程序实现视觉跟踪中的自由曲线插补动作。

  1. “主程序”

    执行与跟踪相关的初始化处理的程序。

  2. “工件检测程序”

    执行工件位置检测并将数据保存至跟踪缓冲区的程序。

  3. “跟踪动作程序”

    跟踪缓冲区读取检测的工件位置,并执行跟踪、自由曲线插补动作的程序。

1.主程序(FreeCurveVisionTracking.pcs (PCS:354B)

清空指定了传送带编号的跟踪缓冲区,开始视觉传感器发出信号的触发器检测。

TrackInitialize ConvNum, 0

并列执行工件检测程序、跟踪动作程序。

Run FreeCurveVision
Run FreeCurveTracking

2.工件检测程序(FreeCurveVision.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 ConvNum, workNum, arrayVis, arrayUser

3.跟踪动作程序(FreeCurveTracking.pcs (PCS:3KB)

通过TrackStart指令,开始跟踪前向初始位置移动。
请注意,在跟踪中,如果执行Move指令等常规动作指令,将中断跟踪动作。

Move P, P[HomePos]

每次检测到工件时,用于执行跟踪、自由曲线插补动作的主循环。
将内部I/O的ON信号设定为循环继续的条件,以便可在中途结束循环。

Do
    P[10] = TrackTargetPos(1)
 
    ...
 
    TrackApproach P, P[FirstPathPointWork], ApproachLength
 	
    TrackMove S, P[TargetPos], PathNum
	
    ...
 
LOOP UNTIL IO[AbortIONum] = ON

循环内的处理。

首先,从跟踪缓冲区调取工件数据,将其设定为跟踪对象工件
未检测到工件时,在此行待机,直至检测到工件且跟踪缓冲区装满数据。

    P[TargetPos] = TrackTargetPos(ConvNum)

将上述得到的传送带基准坐标转换为基础坐标系的位置。

    P[TargetPosBase] = ConvertPosWork( P[TargetPos], -1, 0 )

获取路径的第1点的坐标,转换为当前的工件坐标的位置。

    P[FirstPathPoint] = GetPathPoint( PathNum, 1 )
    P[FirstPathPointWork] = ConvertPosWork( P[FirstPathPoint], P[TargetPosBase], -1 )

指示跟踪模式开始。在执行此指令阶段,机器人尚未开始移动。
执行TrackApproach指令等跟踪动作指令并开始初次移动。

    TrackStart ConvNum

一边为与传送带等速执行跟踪动作,一边朝相距第1个路径点接近长度的上方接近位置移动。

    TrackApproach P, P[FirstPathPointWork], ApproachLength

一边为与传送带等速执行跟踪动作,一边靠近第1个路径点。

    TrackMove P, P[FirstPathPointWork]

开始自由曲线插补动作。

    TrackMove S, P[TargetPos], PathNum

一边为与传送带等速执行跟踪动作,一边从跟踪对象工件朝上方离开离开长度。

    TrackDepart P, DepartLength

指示跟踪模式结束。结束传送带追踪动作并减速停止。
执行此指令前,工件超出跟踪范围下游下限时,将发生错误。

    TrackStop

将挑选的工件搬运至排出位置。

    Approach P, P[EjectPos], ApproachLength

ID : 2982

<< 向前        下一页 >>