Exemple de programme
Programmation de convoyeur Vision
En général, deux tâches sont utilisées pour actionner un convoyeur Vision.
La première tâche recherche des pièces avec le système Vision et les ajoute à la file d'attente du convoyeur.
La deuxième tâche vérifie les pièces dans la zone de saisie de la file d'attente du convoyeur. Lorsqu'une pièce se trouve dans la zone de saisie, le robot reçoit la commande de saisir la pièce et de la placer dans la position spécifiée.
L'exemple suivant est un exemple de programme qui utilise Xqt pour exécuter deux tâches à partir de la fonction "Principal".
- Première tâche : Fonction "ScanConveyorStrobed"
- Seconde tâche : Fonction "PickParts"
Un programme correspondant est affiché ci-dessous.
Exemple de câblage du système Vision de suivi du convoyeur
Cet exemple de programme est une structure de déclencheur matériel qui utilise l'E/S du contrôleur pour déclencher la caméra et déverrouiller le codeur.
Le programme suivant est un échantillon avec N° de Convoyeur 1.
Ce programme échantillon reprend automatiquement lorsque le robot suit la pièce hors de la zone de saisie.
Function main
Motor On
Power High
Speed 30
Accel 30, 30
Xqt ScanConveyorStrobed 'Tâche qui enregistre les files d'attente
Xqt PickParts ''Tâche qui suit les pièces (file d'attente)
Fend
Fonction ScanConveyorStrobed
Integer i, numFound, state, trigger
Real x, y, u
Boolean found
trigger = 10 'Assigne la broche 10 de l'E/S du contrôleur
Off trigger 'Désactive le déclencheur de caméra et l'E/S de déverrouillage du codeur
Do
VRun FindParts 'Recherche des pièces sur le convoyeur
On trigger 'Active le déclencheur de caméra et l'E/S de déverrouillage du codeur
Do
VGet FindParts.AcquireState, état
Loop Until state = 3
VGet FindParts.Parts.NumberFound, numFound
'Enregistre la pièce qui a été capturée comme une file d'attente
For i = 1 to numFound
VGet FindParts.Parts.CameraXYU(i), found, x, y, u
Cnv_QueAdd 1, Cnv_Point(1, x, y)
Next i
Off trigger 'Désactive le déclencheur de caméra et l'E/S de déverrouillage du codeur
Wait 0.1
Loop
Fend
Fonction PickParts
OnErr GoTo ErrHandler
Integer ErrNum
Cnv_Mode 1,1 'Sélectionne le mode de suivi
WaitParts:
Do
'Attend jusqu'à ce qu'une pièce (file d'attente) entre dans la zone de saisie
Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0
'Démarre le suivi de la pièce
'Lors de l'utilisation du robot SCARA
Jump Cnv_QueGet(1)
Wait 0.1 'Le robot se déplace à la même vitesse que le convoyeur 'pour le Temps d'attente spécifié pour cette pièce
Jump P1 'Déplace la pièce saisie vers un emplacement spécifié
Cnv_QueRemove 1, 0 'Efface la pièce saisie (file d'attente)
Loop
'Efface les pièces (file d'attente) du côté aval de la zone de saisie
'Reprend automatiquement à partir de l'erreur '"Les données de file d'attente spécifiées sont en dehors de la zone définie"
ErrHandler:
ErrNum = Err
If ErrNum = 4406 Then
Cnv_QueRemove 1, 0
EResume WaitParts
'Affiche une autre erreur que "Les données de file d'attente spécifiées sont en dehors de la zone définie"
Else
Print "Error!"
Print "No.", Err, ":", ErrMsg$(Err, 1)
Print "Line :", Erl(0)
'User error occurred
Error 8000
EndIf
Fend
POINTS CLÉS
Lorsque vous utilisez un déclencheur logiciel, utilisez la fonction "ScanConveyorStrobed" affichée ci-dessous.
Lorsque vous utilisez un déclencheur logiciel, définissez la propriété RuntimeAcquire de la séquence FindParts sur "Stationnaire".
Fonction ScanConveyorNonStrobed
Integer i, numFound
Real x, y, u
Boolean found
Do
'Recherche des pièces sur le convoyeur
VRun FindParts
Cnv_Trigger 1 'Déverrouille le codeur avec le déclencheur logiciel
VGet FindParts.Parts.NumberFound, numFound
'Enregistre la pièce en tant que file d'attente
For i = 1 to numFound
VGet FindParts.Parts.CameraXYU(i), found, x, y, u
Cnv_QueAdd 1, Cnv_Point(1, x, y)
Next i
Wait 0.1
Loop
Fend
Programmation de convoyeur capteur
En général, deux tâches sont utilisées pour actionner un convoyeur Capteur. La première tâche attend qu'une pièce déclenche le capteur et l'ajoute à la file d'attente du convoyeur. La deuxième tâche vérifie les pièces dans la zone de saisie de la file d'attente du convoyeur. Lorsqu'une pièce se trouve dans la zone de saisie, le robot reçoit la commande de saisir la pièce et de la placer dans la position spécifiée.
Ce programme échantillon reprend automatiquement lorsque le robot suit la pièce hors de la zone de saisie.
Function main
Motor On
Power High
Speed 30
Accel 30, 30
Xqt ScanConveyor 'Tâche qui enregistre les files d'attente
Xqt PickParts 'Tâche qui suit les pièces (file d'attente)
Fend
Fonction ScanConveyor
Double lpulse1 'Impulsion du déverrouillage précédent
lpulse1 = Cnv_LPulse(1) 'Enregistre l'impulsion de déverrouillage comme lpulse1
Do
'Enregistre une pièce en tant que file d'attente uniquement lorsqu'elle passe par le capteur
If lpulse1 <> Cnv_LPulse(1) Then
Cnv_QueAdd 1, Cnv_Point(1, 0, 0)
lpulse1 = Cnv_LPulse(1) 'Met à jour lpulse1
EndIf
Loop
Fend
Fonction PickParts
OnErr GoTo ErrHandler
Integer ErrNum
Cnv_Mode 1,1 'Sélectionne le mode de suivi
WaitParts:
Do
'Attend jusqu'à ce qu'une pièce (file d'attente) entre dans la zone de saisie
Wait Cnv_QueLen(1, CNV_QUELEN_PICKUPAREA) > 0
'Démarre le suivi de la pièce
'Lors de l'utilisation du robot SCARA
Jump Cnv_QueGet(1)
Wait 0.1 'Le robot se déplace à la même vitesse que le convoyeur 'pour le Temps d'attente spécifié pour cette pièce
Jump P1 'Déplace la pièce saisie vers un emplacement spécifié
Cnv_QueRemove 1, 0 'Efface la pièce saisie (file d'attente)
Loop
'Efface les pièces (file d'attente) du côté aval de la zone de saisie
'Reprend automatiquement à partir de l'erreur '"Les données de file d'attente spécifiées sont en dehors de la zone définie"
ErrHandler:
ErrNum = Err
If ErrNum = 4406 Then
Cnv_QueRemove 1, 0
EResume WaitParts
'Affiche une autre erreur que "Les données de file d'attente spécifiées sont en dehors de la zone définie"
Else
Print "Error!"
Print "No.", Err, ":", ErrMsg$(Err, 1)
Print "Line :", Erl(0)
'User error occurred
Error 8000
EndIf
Fend