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