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