多条传送带

Epson RC+支持多条逻辑传送带和多个机器人。您可以将多个机器人与一条传送带同用。

本节描述了使用一个机器人和两条或多条传送带的传送带系统。

多条传送带的传送带跟踪

本节介绍的传送带系统中,一个机器人从传送带1上拾起“工件1”,并将拾取的工件放在传送带2上的“工件2”上方,如下图所示。在这种传送带系统中,每条传送带需要一个编码器和相机(传感器)。

如何使用多条传送带

使用方法如下所述。

  1. 请参阅以下内容,然后创建传送带1和传送带2。(将机器人设在传送带1的上游侧。)

    在项目中创建传送带

  2. [编码器]和[视觉序列]应为传送带1和2设置不同的编号和序列。

  3. 校准传送带1。

  4. 参考以下某项,进行动作确认。

  5. 校准传送带2。

  6. 检查传送带2的操作。

以下是一个程序示例。

当机器人跟踪超出拾取区域的工件时,此程序示例会自动恢复。

Function main
  Motor On
  Power High

  Speed 30
  Accel 30, 30

  Xqt ScanConveyorStrobed '注册队列的任务
  Xqt PickParts '跟踪的任务
Fend
Function ScanConveyorStrobed
  Integer i, j, numFound, state, trigger1, trigger2
  Real x, y, u
  Boolean found

  trigger1 = 10 '将控制器I/O的pin10分配给传送带1
  trigger2 = 11 '将控制器I/O的pin11分配给传送带2
  Off trigger1; Off trigger2
  '关闭相机快门和编码器闩锁的I/O
  Do
    VRun FindParts1	'拍摄传送带上的工件
    On trigger1 '打开相机快门和编码器闩锁的I/O
    Do
      VGet FindParts1.AcquireState, state
    Loop Until state = 3
    VGet FindParts1.Parts.NumberFound, numFound
    '将拍摄的工件注册到队列
    For i = 1 To numFound
      VGet FindParts1.Parts.CameraXYU(i), found, x, y, u
      Cnv_QueAdd 1, Cnv_Point(1, x, y)
    Next i
    Off trigger1 '关闭相机快门和编码器闩锁的I/O
    Wait 0.1

    '注册传送带2的工件(队列)
    '拍摄传送带上的工件
    VRun FindParts2
    On trigger2 '打开相机快门和编码器闩锁的I/O
    Do
      VGet FindParts2.AcquireState, state
    Loop Until state = 3
    VGet FindParts2.Parts.NumberFound, numFound
    '将拍摄的工件注册到队列
    For j = 1 To numFound
      VGet FindParts2.Parts.CameraXYU(j), found, x, y, u
      Cnv_QueAdd 2, Cnv_Point(2, x, y)
    Next j
    Off trigger2 '关闭相机快门和编码器闩锁的I/O
    Wait 0.1
  Loop
Fend
Function PickParts
  OnErr GoTo ErrHandler
  Integer ErrNum

  MemOff 1; MemOff 2 '关闭内存I/O

  Jump P1

  Do
    '跟踪传送带1
    WaitPickup1:
    '传送带1跟踪阶段开始时打开内存I/O
    MemOn 1 '打开内存I/O 1
    '在下游范围的下游侧清除工件(队列)
    Do While Cnv_QueLen(1, CNV_QUELEN_DOWNSTREAM) > 0
      Cnv_QueRemove 1, 0
    Loop
    '拾取区域内无工件(队列)时移动到备用位置
    Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0

    '开始跟踪
    '使用6轴机器人时
    Jump3 Cnv_QueGet(1):Z(0):U(90):V(0):W(180)
    '使用SCARA机器人时
    Jump Cnv_QueGet(1)
    Wait 0.1 '仅Wait时间,机器人以与传送带相同的速度移动
    '清除跟踪的工件(队列)
    Cnv_QueRemove 1, All
    MemOff 1 '关闭内存I/O 1

    '跟踪传送带2
    WaitPickup2:
    MemOn 2 '打开内存I/O 2
    '拾取区域内无工件(队列)时移动到备用位置
    Wait Cnv_QueLen(2, CNV_QUELEN_PICKUPAREA) > 0

    '开始跟踪
    '使用6轴机器人时
    Jump3 Cnv_QueGet(2):Z(0):U(90):V(0):W(180)
    '使用SCARA机器人时
    Jump Cnv_QueGet(2)	Wait 0.1 '仅Wait时间,机器人以与传送带相同的速度移动
    Wait 0.1 '仅Wait时间,机器人以与传送带相同的速度移动
    '清除跟踪的工件(队列)
    Cnv_QueRemove 2, All
    MemOff 2 '关闭内存I/O 2

    Jump P1
  Loop
  '在拾取区域的下游侧清除工件(队列)
  '自动从“指定队列数据超出设置范围”错误中恢复
  ErrHandler:
  ErrNum = Err
  If ErrNum = 4406 Then
    If MemSw(1) = On Then
      Cnv_QueRemove 1
      EResume WaitPickup1
    EndIf
    If MemSw(2) = On Then
      Cnv_QueRemove 2
      EResume WaitPickup2
    EndIf
    '显示“指定队列数据超出设置范围”以外的错误
    
  Else
    Print "Error!"
    Print "No.", Err, ":", ErrMsg$(Err, 1)
    Print "Line :", Erl(0)
    '发生用户错误
    Error 8000
  EndIf
Fend