Exemple de programme 5.1

Type d’exemple :
Plateforme plate - 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 : plate
  • Zone de prélèvement : région de prélèvement B
  • Orientation de la caméra : caméra fixe et orientée vers le bas


Description
Dans cet exemple, une plateforme plate standard est utilisée. En règle générale, pour une plaque plate, vous devez sélectionner [System processes vibration for part] (Le système traite les vibrations de la pièce) dans le menu - [Tool] (Outil) - [Part Feeding] - [Part] (Pièce) - [Vibration].
Dans cet exemple, nous allons vous montrer comment sélectionner l’option [User processes vibration for part via PF_Feeder callback] (L’utilisateur traite la vibration de la pièce via la fonction de rappel PF_Feeder) afin de gérer vous-même l’action de vibration. Le code de vibration de l’utilisateur sera exécuté au sein de la fonction de rappel PF_Feeder. L’option [User processes vibration for part via PF_Feeder callback] (L’utilisateur traite la vibration de la pièce via la fonction de rappel PF_Feeder) est nécessaire lorsque vous souhaitez une stratégie de vibration différente de celle proposée par le système. Lorsque vous utilisez une plateforme personnalisée (c’est-à-dire, à trous, fentes ou poches), vous devez gérer vous-même les vibrations via la fonction de rappel PF_Feeder.
Pour plus de détails, consultez la section suivante.
Exemple de programme 5.2

Même si l’option [User processes vibration for part via PF_Feeder callback] (L’utilisateur traite la vibration de la pièce via la fonction de rappel PF_Feeder) est sélectionnée (pour les plateformes plates standard, anti-adhérentes et anti-roulis), c’est le système qui déterminera la meilleure façon de faire vibrer la pièce selon les différentes situations. La décision de la pièce est transmise à la fonction de rappel PF_Feeder via un paramètre appelé « state » (état). Les différents états sont définis à l’aide de constantes dans le fichier « PartFeeding.inc ».
Par exemple, la constante « PF_FEEDER_PICKOK » indique que des pièces sont désormais disponibles pour être prélevées et positionnées par le robot. Autre exemple : la constante « PF_FEEDER_FLIP » est transmise à la fonction de rappel PF_Feeder lorsque le système a déterminé que la meilleure action à effectuer est de retourner les pièces. C’est à l’utilisateur seul de décider s’il souhaite ou non suivre la recommandation relative au « state » (état).

D’un point de vue conceptuel, l’utilisateur peut reproduire le fonctionnement du système en utilisant le « state » (état) PF_Feeder et les instructions de vibration appropriées. Une fois encore, en règle générale, l’option [System processes vibration for part] (Le système traite les vibrations de la pièce) est sélectionnée pour un plateau plat. Par conséquent, cet exemple montre comment reproduire le fonctionnement du système à l’aide de la fonction de rappel PF_Feeder et des commandes de vibration.

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

    Select state

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

         ’ Supply more parts
        Case PF_FEEDER_SUPPLY
            PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY_FIRST)
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Parts are spread out but need to be flipped
         Case PF_FEEDER_FLIP
            PF_Flip PartID
            ’ Restart and re-acquire images
            PF_Feeder = PF_CALLBACK_RESTART

        ’ Shift parts into pick region
        Case PF_FEEDER_SHIFT
            PF_Shift PartID, PF_SHIFT_FORWARD
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Center, Flip and Separate
        Case PF_FEEDER_CENTER_FLIP
            PF_Center PartID, PF_CENTER_LONG_AXIS
            PF_Center PartID, PF_CENTER_SHORT_AXIS
            PF_Flip PartID
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Hopper is empty
        Case PF_FEEDER_HOPPER_EMPTY
            PFStatusReturnVal = PF_Status(PartID, PF_STATUS_NOPART)
            PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY_FIRST)
            ’ Center, Flip and Separate
            PF_Center PartID, PF_CENTER_LONG_AXIS
            PF_Center PartID, PF_CENTER_SHORT_AXIS
            PF_Flip PartID
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Parts have gathered against the platform wall
        Case PF_FEEDER_SHIFT_BACKWARDS
            PF_Shift PartID, PF_SHIFT_BACKWARD
            PF_Feeder = PF_CALLBACK_RESTART

        ’ Hopper Supply, Center, Flip and Separate
        Case PF_FEEDER_SUPPLY_CENTER_FLIP
            PFControlReturnVal = PF_Control(PartID, PF_CONTROL_SUPPLY)
            PF_Center PartID, PF_CENTER_LONG_AXIS
            PF_Center PartID, PF_CENTER_SHORT_AXIS
            PF_Flip PartID
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Too many parts
        Case PF_FEEDER_TOO_MANY
            PFStatusReturnVal = PF_Status(PartID, PF_STATUS_TOOMANYPART)
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

        ’ Wrong part
        Case PF_FEEDER_WRONGPART
            PFStatusReturnVal = PF_Status(PartID, PF_STATUS_WRONGPART)
            PF_Feeder = PF_CALLBACK_RESTART ' Restart and re-acquire images

    Send

Fend