Pièces pour deux robots

Exemple de programme 4.1

Type d’exemple :
2 robots, 1 distributeur, plusieurs pièces - Mouvement dans la fonction de rappel PF_Robot - Prélèvement dans un ordre précis

Configuration

  • Nombre de robots : 2
  • Nombre de distributeurs : 1
  • Nombre de types de pièces sur le distributeur : 2
  • Nombre de positionnements : 2
  • Orientation de la caméra : caméra fixe et orientée vers le bas

Description
Il y a deux robots et un distributeur. Chaque robot prélève une pièce unique (physiquement différente). Les robots prélèveront à tour de rôle des pièces dans le distributeur. L’ordre de prélèvement est important pour cette application.
L’ordre de prélèvement alterné est géré par « PF_ActivePart ». Le mouvement du robot s’effectue au sein de la fonction de rappel PF_Robot. Dans cet exemple, les mouvements du distributeur et du robot ne sont pas traités en parallèle. Le code est simple, mais pas efficace.
Le robot n° 1 prélève et positionne la pièce n° 1. Le robot n° 2 prélève et positionne la pièce n° 2. Chaque robot dispose d’un point de « stationnement » et d’un point de « positionnement ».

Exemple de code
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

Exemple de programme 4.2

Type d’exemple :
2 robots, 1 distributeur, plusieurs pièces - Mouvement dans des tâches séparées - Prélèvement dans un ordre précis

Configuration

  • Nombre de robots : 2
  • Nombre de distributeurs : 1
  • Nombre de types de pièces sur le distributeur : 2
  • Nombre de positionnements : 2
  • Orientation de la caméra : caméra fixe et orientée vers le bas

Description
Il y a deux robots et un distributeur. Chaque robot prélève une pièce unique (physiquement différente). Les robots prélèveront à tour de rôle des pièces dans le distributeur. Cela s’effectue en alternant « PF_ActivePart ».
Si l’un des robots n’a plus de pièces à prélever, l’autre robot est autorisé à continuer à prélever des pièces dans le distributeur jusqu’à ce qu’il n’y en ait plus à sa disposition. Le robot n° 1 prélève et positionne la pièce n° 1. Le robot n° 2 prélève et positionne la pièce n° 2.
Chaque robot dispose d’un point de « stationnement » et d’un point de « positionnement ». Les fonctions « PF_AccessFeeder » et « PF_ReleaseFeeder » servent à empêcher les deux robots de tenter d’accéder simultanément au distributeur. Dès que l’un des deux robots a parcouru 30 % du trajet le séparant de sa position finale, l’autre robot est autorisé à accéder au distributeur.

Exemple de code
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

Exemple de programme 4.3

Type d’exemple :
2 robots, 1 distributeur, plusieurs pièces - Mouvement dans des tâches séparées - Prélèvement dans un ordre précis

Configuration

  • Nombre de robots : 2
  • Nombre de distributeurs : 1
  • Nombre de types de pièces sur le distributeur : 3
  • Nombre de positionnements : 2
  • Orientation de la caméra : caméra fixe et orientée vers le bas

Description
Il y a deux robots et un distributeur. Chaque robot prélèvera des pièces différentes.
Le robot 1 prélèvera et positionnera une pièce n° 1.
Le robot 2 prélèvera et positionnera ensuite une pièce n° 4 et une pièce n° 5. L’ordre de prélèvement est important pour cette application. L’ordre de prélèvement alterné est géré par « PF_ActivePart ». Le mouvement du robot s’effectue en parallèle avec les vibrations du distributeur.

Exemple de code
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, 1, 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