2台机器人 - 多部件

程序示例 4.1

示例类型:
2台机器人、1台送料器、多部件 - PF_Robot callback的运动 - 按特定顺序拾取

构成

  • 机器人数量:2
  • 送料器数量:1
  • 送料器上的部件类型数量:2
  • 配置位置数量:2
  • 相机的方向:固定向下相机

描述
包括2台机器人与1台送料器。各机器人拾取固有的(物理方面存在差异)部件。机器人从送料器中依次进行拾取运作。在该应用中,拾取顺序非常重要。
由“PF_ActivePart”执行交互拾取顺序。在PF_Robot回调函数内执行机器人的运作。在本例中没有送料器与机器人运作的并行处理。代码虽然单纯,但没有效率。
机器人1拾取并配置部件#1。机器人2拾取并配置部件#2。各机器人包括带有“park”标签的点与带有“place”标签的点。

样本代码
Main.prg

Function Main
    Robot 1
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park
    Robot 2
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park
    PF_Start 1, 2
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    If PF_QueLen(PartID) > 0 Then
        Select PartID
            Case 1
                Robot 1
                P0 = PF_QueGet(1)
                PF_QueRemove (1)
                Jump P0 /R
                On rbt1Gripper
                Wait 0.25
                Jump Place
                Off rbt1Gripper
                Wait 0.25
                PF_ActivePart 2
            Case 2
                Robot 2
                P0 = PF_QueGet(2)
                PF_QueRemove (2)
                Jump P0 /L
                On rbt2Gripper
                Wait 0.25
                Jump Place
                Off rbt2Gripper
                Wait 0.25
                PF_ActivePart 1
        Send

    EndIf

    PF_Robot = PF_CALLBACK_SUCCESS

Fend

程序示例 4.2

示例类型:
2台机器人、1台送料器、多部件 - 其他任务的运动 - 按特定顺序拾取

构成

  • 机器人数量:2
  • 送料器数量:1
  • 送料器上的部件类型数量:2
  • 配置位置数量:2
  • 相机的方向:固定向下相机

描述
包括2台机器人与1台送料器。各机器人拾取固有的(物理方面存在差异)部件。机器人从送料器中依次进行拾取运作。这是通过交互执行“PF_ActivePart”来实现的。
1台机器人要拾取的部件为零时,另一台机器人可继续从送料器中拾取,直至部件为零。机器人1拾取并配置部件#1。机器人2拾取并配置部件#2。
各机器人包括带有“park”标签的点与带有“place”标签的点。“PF_AccessFeeder”与“PF_ReleaseFeeder”可用于防止两台机器人同时访问送料器。如果某台机器人移动与配置位置之间的距离的30%,另一台机器人则可访问送料器。

样本代码
Main.prg

Function Main
    Robot 1
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park
    Robot 2
    Motor On
    Power Low
    Speed 50
    Accel 50, 50
    Jump Park
    MemOff PartsToPick1
    MemOff PartsToPick2

    PF_Start 1, 2
    Xqt Robot1PickPlace
    Xqt Robot2PickPlace
Fend

Function Robot1PickPlace
    Robot 1
    Do
        Wait MemSw(PartsToPick1) = On
        PF_AccessFeeder 1
        P0 = PF_QueGet(1)
        PF_QueRemove (1)
        Jump P0 /R
        On 5
        Wait 0.5
        Jump Place ! D30; MemOff PartsToPick1; PF_ReleaseFeeder 1 !
        Off 5
        Wait 0.25
    Loop
Fend

Function Robot2PickPlace
    Robot 2
    Do
        Wait MemSw(PartsToPick2) = On
        PF_AccessFeeder 1
        P0 = PF_QueGet(2)
        PF_QueRemove (2)
        Jump P0 /L
        On 2
        Wait 0.5
        Jump Place ! D30; MemOff PartsToPick2; PF_ReleaseFeeder 1 !
        Off 2
        Wait 0.25
    Loop
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    Select PartID
        Case 1
            If PF_QueLen(1) > 0 Then
                MemOn PartsToPick1
                Wait MemSw(PartsToPick1) = Off
                PF_ActivePart 2
            Else
                PF_ActivePart 1
            EndIf
        Case 2
            If PF_QueLen(2) > 0 Then
                MemOn PartsToPick2
                Wait MemSw(PartsToPick2) = Off
                PF_ActivePart 1
            Else
                PF_ActivePart 2
            EndIf
    Send
    PF_Robot = PF_CALLBACK_SUCCESS
Fend

程序示例 4.3

示例类型:
2台机器人、1台送料器、多部件 - 其他任务的运动 - 按特定顺序拾取

构成

  • 机器人数量:2
  • 送料器数量:1
  • 送料器上的部件类型数量:3
  • 配置位置数量:2
  • 相机的方向:固定向下相机

描述
包括2台机器人与1台送料器。各机器人拾取不同的部件。
机器人1拾取&放置部件#1中的一个。
机器人2拾取&放置部件4与部件5中的一个。在该应用中,拾取顺序非常重要。由“PF_ActivePart”执行交互拾取顺序。与送料器的振动并行进行机器人的运作。

样本代码
Main.prg

Function Main
    Robot 1
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park
    Robot 2
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park
    MemOff PartsToPick1
    MemOff PartsToPick4
    MemOff PartsToPick5

    PF_Start 1, 4, 5
    Xqt Robot1PickPlace
    Xqt Robot2PickPlace
Fend

Function Robot1PickPlace
    Robot 1
    Do
        Wait MemSw(PartsToPick1) = On
        PF_AccessFeeder (1)
        P0 = PF_QueGet(1)
        PF_QueRemove (1)
        Jump P0 /R
        On rbt1Gripper; Wait .25
        Jump Place ! D30; MemOff PartsToPick1; PF_ReleaseFeeder 1 !
        Off rbt1Gripper
        Wait 0.25
    Loop
Fend

Function Robot2PickPlace
    Robot 2
    Do
        Wait MemSw(PartsToPick4) = On
        PF_AccessFeeder (1)
        P0 = PF_QueGet(4)
        PF_QueRemove (4)
        Jump P0 /L
        On rbt2Gripper; Wait .25
        Jump Place ! D30; MemOff PartsToPick4 !
        Off rbt2Gripper; Wait 0.25
        Wait MemSw(PartsToPick5) = On
        P0 = PF_QueGet(5)
        PF_QueRemove (5)
        Jump P0 /L
        On rbt2Gripper; Wait 0.25
        Jump Place ! D30; MemOff PartsToPick5; PF_ReleaseFeeder 1 !
        Off rbt2Gripper; Wait 0.25
    Loop
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    Select PartID
        Case 1
            MemOn PartsToPick1
            Wait MemSw(PartsToPick1) = Off
            PF_ActivePart 4
        Case 4
            MemOn PartsToPick4
            Wait MemSw(PartsToPick4) = Off
            PF_ActivePart 5
        Case 5
            MemOn PartsToPick5
            Wait MemSw(PartsToPick5) = Off
        PF_ActivePart 1
    Send
    PF_Robot = PF_CALLBACK_SUCCESS
Fend