Plusieurs pièces pour un robot

Exemple de programme 2.1

Type d’exemple :
1 robot et plusieurs pièces - Traitement parallèle de vision et des vibrations avec des mouvements du robot

Configuration

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

Description
Il y a deux pièces uniques (physiquement différentes). Le robot prélèvera et positionnera en continu deux pièces n° 1, puis prélèvera et positionnera une pièce n° 2. Cela s’effectue en alternant « PF_ActivePart ». Dans cette application, l’ordre de prélèvement compte (par exemple, dans le cas d’un ensemble de pièces). Une fois la dernière pièce positionnée, la fonction « PF_ActivePart » est modifiée afin d’alimenter la pièce souhaitée et d’indiquer au système de déclencher les vibrations et d’acquérir des images si nécessaire. Cette opération s’effectue en parallèle avec le mouvement du robot (à 30 % du trajet jusqu’à la position « finale »).

Exemple de code
Main.prg

Function Main
    Integer numToPick1, numToPick2, i

    Robot 1
    Motor On
    Power High
    Speed 50
    Accel 50, 50
    Jump Park

    MemOff PartsToPick1
    MemOff PartsToPick2
    numToPick1 = 2
    numToPick2 = 1

    PF_Start 1, 2

    Do
        i = 0
        Do
            Wait MemSw(PartsToPick1) = On
            P0 = PF_QueGet(1)
            PF_QueRemove (1)
            Jump P0 /R
            On Gripper
            Wait 0.25
            i = i + 1
            If i < numToPick1 And PF_QueLen(1) > 0 Then
                Jump Place
            Else
                ’Last part or no more parts available to pick
                If i = numToPick1 Then
                    PF_ActivePart 2
                EndIf
                Jump Place ! D30; MemOff PartsToPick1 !
            EndIf
            Off Gripper
            Wait 0.25
        Loop Until i = numToPick1
        i = 0
        Do
            Wait MemSw(PartsToPick2) = On
            P0 = PF_QueGet(2)
            PF_QueRemove (2)
            Jump P0 /R
            On Gripper
            Wait 0.25
            i = i + 1
            If i < numToPick2 And PF_QueLen(2) > 0 Then
                Jump Place
            Else
                ’Last part or no more parts available to pick
                If i = numToPick2 Then
                    PF_ActivePart 1
                EndIf
                Jump Place ! D30; MemOff PartsToPick2 !
            EndIf
            Off Gripper
            Wait 0.25
        Loop Until i = numToPick2
    Loop
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    Select PartID
        Case 1
            MemOn PartsToPick1
            Wait MemSw(PartsToPick1) = Off
        Case 2
            MemOn PartsToPick2
            Wait MemSw(PartsToPick2) = Off
    Send
    PF_Robot = PF_CALLBACK_SUCCESS
Fend