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