Exemple de programme 5.2

Type d’exemple :
Plateforme personnalisée avec des trous - L’utilisateur traite les vibrations de la pièce via la fonction de rappel PF_Feeder

Configuration

  • Nombre de robots : 1
  • Nombre de distributeurs : 1
  • Nombre de types de pièces sur le distributeur : 1
  • Nombre de positionnements : 1
  • Type de plateforme : trous
  • Zone de prélèvement : n’importe où
  • Orientation de la caméra : caméra fixe et orientée vers le bas

Description
Comme il s’agit d’une plateforme personnalisée, l’option [User processes vibration for part via PF_Feeder callback] (L’utilisateur traite les vibrations de la pièce via la fonction de rappel PF_Feeder) est automatiquement sélectionnée.

Une fois que le système de vision a acquis une image et que la file d’attente des pièces a été chargée, la fonction de rappel PF_Feeder est appelée. Le code de l’utilisateur doit déterminer comment faire vibrer le distributeur au sein de la fonction de rappel PF_Feeder. Le nombre de pièces « avant » et « arrière » est transmis à la fonction de rappel PF_Feeder. Ces paramètres s’appellent « NumFrontParts » et « NumBackParts ». Dans cet exemple, si la valeur de NumFrontParts est supérieure à 0, aucune vibration n’est nécessaire, car le robot dispose de pièces à prélever. Dans ce cas, la valeur de retour de la fonction de rappel est « PF_CALLBACKSUCCESS ». Cette valeur de retour indique au système de procéder à l’appel de la fonction de rappel PF_Robot.

Si la valeur de NumFrontParts est égale à 0, le code d’exemple exécute la séquence Part Blob de VRun afin de déterminer s’il existe un groupe de pièces ou s’il n’y a aucune pièce. Si la séquence Part Blob ne détecte aucune pièce, la trémie est activée. Si la séquence Part Blob détecte un élément, le distributeur bascule, avance, puis recule afin que les pièces puissent s’insérer dans les trous. Une fois que les pièces ont été soumises à des vibrations sur le distributeur, le système doit acquérir à nouveau les images de vision. (L’emplacement des pièces a changé en raison des vibrations.) Pour ce faire, il suffit de définir la valeur de retour sur « PF_CALLBACKRESTART ». L’option « PF_CALLBACKRESTART » relancera le processus Part Feeding depuis le début, acquerra de nouvelles images, rechargera la file d’attente des pièces, puis appellera à nouveau la fonction PF_Feeder afin de déterminer si d’autres actions sont nécessaires.

CONSEIL


Une manœuvre de basculement, un déplacement vers l’avant de longue durée et un déplacement vers l’arrière de courte durée constituent la stratégie d’alimentation typique des plateformes personnalisées.

POINTS CLÉS


La constante PF_FEEDER_UNKNOWN est transmise à la fonction PF_Feeder lorsque le type de plateforme est « Trous », « Fentes » ou « Poches ». Dans le cas des plaques personnalisées, le système ne dispose d’aucune information sur la manière dont la plaque est usinée et, par conséquent, il ne peut pas déterminer correctement la meilleure façon d’alimenter les pièces.

Exemple de code
Main.prg

Function main
    If Motor = Off Then
        Motor On
    EndIf
    Power Low
    Jump Park
    PF_Start 1
Fend

PartFeeding.prg

Function PF_Robot(PartID As Integer) As Integer
    Do While PF_QueLen(PartID) > 0
        P0 = PF_QueGet(PartID)
        Jump P0
        On Gripper; Wait 0.2
        Jump Place
        Off Gripper; Wait 0.2
        PF_QueRemove PartID
        If PF_IsStopRequested(PartID) = True Then
            Exit Do
        EndIf
    Loop
    PF_Robot = PF_CALLBACK_SUCCESS

Fend


Function PF_Feeder(PartID As Integer, NumFrontParts As Integer, NumBackParts As Integer, state As Integer) As Integer

’ Example for Structured Platform with holes state = PF_FEEDER_UNKNOWN

    Integer PFControlReturnVal
    Integer numFound

    Select True

        ’ OK to Pick
        Case NumFrontParts > 0
            ’ Call PF_Robot because there are parts ready to pick
            PF_Feeder = PF_CALLBACK_SUCCESS ’

        ’ No Front parts were found but there are Back parts
        Case NumFrontParts = 0 And NumBackParts <> 0

            ’ Flip, long Shift Forward and short Shift Backward
            PF_Flip PartID, 500
            PF_Shift PartID, PF_SHIFT_FORWARD, 1000
            PF_Shift PartID, PF_SHIFT_BACKWARD, 300

            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ There are no Front or Back parts found
        ’ Either there is a clump of parts or there are no parts on the tray
        ’ Acquire an image from the Part Blob sequence to make a determination
        Case NumFrontParts = 0 And NumBackParts = 0

            PF_Backlight 1, On ’ Backlight on
            VRun PartBlob ’ Acquire Image
            PF_Backlight 1, Off ’Backlight off
            VGet PartBlob.Blob01.NumberFound, numFound ’ Were any Blobs found?

            If numFound > 0 Then ’ Clump of parts found

                ’ Flip, long Shift Forward and short Shift Backward
                PF_Flip PartID, 500
                PF_Shift PartID, PF_SHIFT_FORWARD, 1000
                PF_Shift PartID, PF_SHIFT_BACKWARD, 300

            Else ’ No parts found

                ’ Call the Control callback to supply more parts
                PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY_FIRST)
            EndIf

            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

    Send

Fend