Robot

Projet - Maquette salon 2026 - 02/2026

5.4 Programme robot

Le robot dispose de plusieurs trajectoires prédéfinies, indispensables au fonctionnement de la machine. Pour organiser ces trajectoires de manière cohérente, nous avons mis en place un standard permettant à chacun de comprendre rapidement la structure des programmes et d’assurer un dépannage efficace.
Pour afficher la liste des programmes, appuyer sur le bouton SELECT du clavier du teach pendant l’utilisation.

Dans P_BALAI_VITRE LINE 0 T2 ABORTED USER 10% :

Program name P00_MAIN

Figure 65 : Program name P00_MAIN

Le programme principal s’appelle P00_MAIN (c’est en quelque sorte le chef de gare). En fonction des demandes de trajectoires envoyées par l’automate, le MAIN redirige vers le programme approprié. C’est également lui qui gère les initialisations ainsi que la gestion des vitesses.
Dans le standard défini, chaque programme est précédé d’un numéro correspondant au frame utilisé. Par exemple :
Le programme de prise utilise la frame n°1 → 10_PRISE
Le programme de dépose utilise la frame n°2 → 20_DEPOSE
Il est possible que plusieurs programmes utilisent le même frame. Dans ce cas, le numéro s’incrémente. Exemple : le programme d’évacuation du plateau pour le nettoyage avec le balai utilise également la frame n°2 → 21_EVAC_PLATEAU.
Les programmes sans numéro comme P_BALAI_DEP sont considérés comme des sous-programmes.

La prise des lettres :
La prise des lettres s’effectue grâce au positionnement des différents vérins.

  1. Dans un premier temps, les vérins descendent pour permettre la prise de photo. Cette image sert à lire la lettre inscrite sur la pièce, mais aussi à vérifier son orientation.
  2. Ensuite, le vérin remonte pour effectuer une mise en référence. Une seconde photo est alors prise afin de confirmer que la pièce n’est pas tombée durant la montée du vérin. Une fois ces contrôles validés, le robot est autorisé à saisir la pièce.

Lors de l’exécution du programme, un retour d’information est activé afin de confirmer que la séquence de prise est bien en cours.

Langage TP (Teach Pendant) similaire au Basic :

!PRISE PIECE

!Trajectoire prise en cours
DO[1:EXE_CODE_TRAJ_EC]=ON
GO[1:CODE_TRAJ_EC]=R[5:CODE_TRAJ]

DO[5:PR_PIECE_EC]=ON

Un appel dégagement a été créé à titre préventif. Il permet au robot de se repositionner en sécurité si une anomalie est détectée ou si une trajectoire doit être interrompue. Cet appel garantit que le robot puisse sortir proprement de sa zone de travail sans risque de collision et facilite ainsi les opérations de reprise ou de dépannage.

!Contrôle dégagement

//CALL P_DEGAGEMENT

On envoie l’ordre d’ouvrir la pince afin de préparer la prise de la pièce.

!Demande ouverture pince prise
DO[19:DMD_OUV_PIECE_PR]=ON
DO[20:DMD_OUV_PIECE_DEP]=OFF
DO[21:DMD_FERM_PIECE]=OFF
DO[22:DMD_OUV_BALAI]=OFF
DO[23:DMD_FERM_BALAI]=OFF

On retrouve dans cette section la sélection de l’outil, le plan de travail, ainsi que le poids du préhenseur sans produit. Ces paramètres influencent directement les points suivants ainsi que le déplacement du robot, notamment en ce qui concerne les vitesses, les accélérations et les limites de charge admissibles.

!Sélection frame et outil
UFRAME_NUM=1
UTOOL_NUM=1
PAYLOAD[1:PREH VIDE]

Calcul du point de registre d’attente, permettant de déterminer un point de positionnement dans le repère.

!Point d'attente
PR[11:ATTENTE_FRM1]=PR[10:OFFSET_FRM1]

PR[11,1:ATTENTE_FRM1]=PR[10,1:OFFSET_FRM1]-100
PR[11,2:ATTENTE_FRM1]=PR[10,2:OFFSET_FRM1]+50
PR[11,3:ATTENTE_FRM1]=PR[10,3:OFFSET_FRM1]+R[20:HT_ATT_PR]

Trajectoire point d’attente (Nous avons mis en commentaire cet if, car lors de nos essais nous avons déterminé qu’il était essentiel de conserver un point d’attente pour la prise.)

!Point d'attente si pas autorisation API
//IF (DI[15:AUT_PR_PIECE]=OFF) THEN

J PR[11:ATTENTE_FRM1] 100% CNT100

!Robot en position attente
//DO[15:POS_ATT_PR_PIECE]=ON

//ENDIF
Dans ce bloc, on retrouve le contrôle d’autorisation de prise. Il permet d’attendre que l’automate envoie l’autorisation avant de lancer la séquence de prise.

LBL[50]
!Contrôle autorisation de prise
IF (DI[15:AUT_PR_PIECE]=OFF) THEN

DO[15:POS_ATT_PR_PIECE]=ON
WAIT    .20(sec)

Cela permet d’arrêter le programme grâce à un saut vers l’étiquette 999, ce qui provoque la sortie immédiate du programme :

!Sortie de prog si annulé API
IF DI[27:ANNUL_TRAJ]=ON,JMP LBL[999]
JMP LBL[50]
ELSE
DO[15:POS_ATT_PR_PIECE]=OFF
ENDIF

Le label 100 permet de vérifier l’angle de prise envoyé par l’automate.

LBL[100]
!Contrôle des cotes reçues
IF ((GI[7:COTE_PR_PIECE_Z]>32767) AND DI[32:SIMUL_ROBOGUIDE]=OFF) THEN

DO[32:DEF_COTE_RECUE]=ON
WAIT DI[30:ACQ_DEF_PROG]=ON
DO[32:DEF_COTE_RECUE]=OFF
JMP LBL[100]

ELSE
DO[32:DEF_COTE_RECUE]=OFF
ENDIF

Ensuite, on effectue le calcul à partir de la cote puis on vérifie le résultat avant de l’intégrer dans la trajectoire.

!Prise en compte des cotes reçues
IF (DI[32:SIMUL_ROBOGUIDE]=OFF) THEN

R[172:Z_PRISE]=GI[7:COTE_PR_PIECE_Z]/100

IF (GI[8:ANGLE_PR_PIECE_R]>32768) THEN
R[173:CAM_R_PRISE]=(GI[8:ANGLE_PR_PIECE_R]-65535)
ELSE
R[173:CAM_R_PRISE]=(GI[8:ANGLE_PR_PIECE_R])
ENDIF

ELSE
R[173:CAM_R_PRISE]=R[173:CAM_R_PRISE]+90
IF (R[173:CAM_R_PRISE]>=360),R[173:CAM_R_PRISE]=(0)

ENDIF

Cette partie est consacrée au point d’approche, incluant les différents calculs associés ainsi que la trajectoire correspondante.

!Position approche
PR[12:APPROCHE_FRM1]=PR[10:OFFSET_FRM1]

PR[12,3:APPROCHE_FRM1]=PR[10,3:OFFSET_FRM1]+R[30:HT_APP_PR]
PR[12,6:APPROCHE_FRM1]=PR[12,6:APPROCHE_FRM1]+R[173:CAM_R_PRISE]

L PR[12:APPROCHE_FRM1] 4000 mm/sec CNT R[50:CNT_APP_PR]

On retrouve ici la vérification que la pince est bien ouverte ; si ce n’est pas le cas, une commande d’ouverture est envoyée.

!Contrôle pince ouverte
IF (DI[19:PINCE_OUV_PIECE_PR]=ON) THEN

JMP LBL[200]

ELSE

IF DI[32:SIMUL_ROBOGUIDE]=ON,JMP LBL[200]

DO[19:DMD_OUV_PIECE_PR]=ON
DO[20:DMD_OUV_PIECE_DEP]=OFF
DO[21:DMD_FERM_PIECE]=OFF
DO[22:DMD_OUV_BALAI]=OFF
DO[23:DMD_FERM_BALAI]=OFF

WAIT DI[19:PINCE_OUV_PIECE_PR]=ON

ENDIF

Le label 200 est destinée à la prise de la pièce, incluant le calcul associé ainsi que la trajectoire correspondante.

LBL[200]
!Position prise
PR[13:PRISE_FRM1]=PR[12:APPROCHE_FRM1]

PR[13,3:PRISE_FRM1]=(PR[10,3:OFFSET_FRM1]-R[172:Z_PRISE]+R[40:HT_PR])

L PR[13:PRISE_FRM1] R[70:VIT_PR]mm/sec FINE

Une fois en position, le robot demande à l’automate de fermer la pince.

!Demande fermeture pince
DO[19:DMD_OUV_PIECE_PR]=OFF
DO[20:DMD_OUV_PIECE_DEP]=OFF
DO[21:DMD_FERM_PIECE]=ON
DO[22:DMD_OUV_BALAI]=OFF
DO[23:DMD_FERM_BALAI]=OFF

Puis le robot vérifie que la pince est bien fermée ; si ce n’est pas le cas, il demande une nouvelle fermeture.

!Contrôle pince fermée
IF (DI[21:PINCE_FERM_PIECE]=OFF) THEN

IF (DI[32:SIMUL_ROBOGUIDE]=ON) THEN
UTOOL_NUM=2
PAYLOAD[2:PREH PR.PIECE]
WAIT R[145]
JMP LBL[300]
ENDIF

DO[19:DMD_OUV_PIECE_PR]=OFF
DO[20:DMD_OUV_PIECE_DEP]=OFF
DO[21:DMD_FERM_PIECE]=ON
DO[22:DMD_OUV_BALAI]=OFF
DO[23:DMD_FERM_BALAI]=OFF

WAIT DI[21:PINCE_FERM_PIECE]=ON

ENDIF

Lors de la prise de la pièce, le robot doit identifier ce qu’il a chargé, notamment la taille et le poids. Pour cela, nous avons préalablement créé des outils associés au produit, dans lesquels nous avons renseigné le poids du préhenseur ainsi que celui du produit. Ces informations permettent au robot d’adapter automatiquement ses paramètres de mouvement et de charge.

UTOOL_NUM=2
PAYLOAD[2:PREH PR.PIECE]
WAIT    .10(sec)

LBL[300]
!Position dégagement
PR[14:DEGAGEMENT_FRM1]=PR[12:APPROCHE_FRM1]

L PR[14:DEGAGEMENT_FRM1] 4000 mm/sec CNT100

LBL[999]
!Fin de trajectoire prise en cours
DO[1:EXE_CODE_TRAJ_EC]=OFF
DO[5:PR_PIECE_EC]=OFF
DO[15:POS_ATT_PR_PIECE]=OFF

Visualisation des trajectoires de la prise pièce :

Étapes Prise Piece

Figure 66 : Étapes Prise Piece

  1. Attente (pince ouverte)
  2. Approche (pince ouverte)
  3. Prise (pince ouverte)
  4. Prise (pince fermée)
  5. Dégagement (pince fermée).

La dépose des lettres sur le plateau :
La dépose des lettres s’effectue à partir de la pièce préalablement prise. La lettre à déposer est identifiée par la caméra Cognex, puis transmise à l’automate. Celui-ci dispose en amont de la chaîne de caractères contenant l’ensemble des lettres à traiter et génère, pour chacune d’elles, les coordonnées de dépose correspondantes. Ces coordonnées sont ensuite envoyées au robot, qui calcule les trajectoires nécessaires pour atteindre le point transmis par l’automate.
Ce programme reprend la même structure générale que celui de la prise, à la différence que les actions de la pince sont inversées (fermeture au lieu d’ouverture). Il comporte toutefois plusieurs spécificités propres à la dépose, notamment :

  1. Un calcul dédié pour positionner correctement la pièce sur le plateau ;
  2. La réception des coordonnées X et Y envoyées par l’automate ;
  3. Une vérification de ces coordonnées avant leur intégration dans la trajectoire ;
  4. Une gestion différente selon que l’on se trouve en mode simulation (mode tests) ou en mode réel ;
  5. L’absence de point d’attente, contrairement au programme de prise.

LBL[100]
!Contrôle des cotes reçues
IF ((GI[5:COTE_DEP_PIECE_X]<(GI[15:COORD_DEPART_X]/10) OR GI[5:COTE_DEP_PIECE_X]>32767 OR GI[6:COTE_DEP_PIECE_Y]<(GI[16:COORD_DEPART_Y]/10) OR GI[6:COTE_DEP_PIECE_Y]>32767) AND DI[32:SIMUL_ROBOGUIDE]=OFF) THEN

DO[32:DEF_COTE_RECUE]=ON
WAIT DI[30:ACQ_DEF_PROG]=ON
DO[32:DEF_COTE_RECUE]=OFF
JMP LBL[100]

ELSE

DO[32:DEF_COTE_RECUE]=OFF

ENDIF

!Prise en compte des cotes reçues
IF (DI[32:SIMUL_ROBOGUIDE]=OFF) THEN

R[170:X_DEPOSE]=GI[5:COTE_DEP_PIECE_X]/10
R[171:Y_DEPOSE]=GI[6:COTE_DEP_PIECE_Y]/10

ELSE

R[170:X_DEPOSE]=((R[161:NbrCycle_EnCours]*23)+49)
R[171:Y_DEPOSE]=((R[161:NbrCycle_EnCours]*23)+41.5)

ENDIF

En différence, on retrouve le calcul en X et en Y, déjà présenté précédemment, ainsi qu’un angle prédéfini.

!Position approche
PR[22:APPROCHE_FRM2]=PR[20:OFFSET_FRM2]

PR[22,1:APPROCHE_FRM2]=PR[20,1:OFFSET_FRM2]+R[170:X_DEPOSE]
PR[22,2:APPROCHE_FRM2]=PR[20,2:OFFSET_FRM2]+R[171:Y_DEPOSE]
PR[22,3:APPROCHE_FRM2]=PR[20,3:OFFSET_FRM2]+R[31:HT_APP_DEP]
PR[22,6:APPROCHE_FRM2]=PR[30,6:OFFSET_FRM3]+R[61:ANGLE_DEP]

L PR[22:APPROCHE_FRM2] 4000 mm/sec CNT R[51:CNT_APP_DEP]

Visualisation des trajectoires de la dépose pièce :

Étapes Dépose pièce

Figure 67 : Étapes Dépose pièce

Approche (pince fermée)
Dépose (pince fermée)
Dépose (pince ouverte)
Dégagement (pince ouverte).

La dépose des lettres dans le bol vibrant :
La dépose des lettres s’effectue à partir d’une position prédéfinie dans le robot, permettant de remettre la lettre précédemment prise lorsqu’elle n’est pas disponible sur le plateau. Pour cette trajectoire, les points sont déjà définis dans le programme : il n’y a donc aucun calcul spécifique ni logique particulière à ajouter. La structure générale reste identique à celle utilisée pour la prise ou la dépose standard.
Visualisation des trajectoires de la dépose dans le bol de pièces :

Étapes Dépose Bol

Figure 68 : Étapes Dépose Bol

Approche (pince fermée)
Dépose (pince fermée)
Dépose (pince ouverte)
Dégagement (pince ouverte).

La dépose des lettres dans le bac des non lus :
La dépose des lettres s’effectue à partir d’une position prédéfinie dans le robot utilisée lorsque la caméra Cognex ne parvient pas à lire la lettre. Cette position permet de déposer automatiquement la pièce dans le bac afin d’éviter qu’elle soit cyclée en boucle sans jamais pouvoir être identifiée.
Pour cette trajectoire, les points sont déjà entièrement prédéfinis dans le programme il n’y a donc aucun calcul spécifique ni logique supplémentaire à implémenter. La structure générale reste identique à celle des programmes de prise ou de dépose.
Visualisation des trajectoires de la dépose dans le bac de pièce :

Étapes Dépose Bac

Figure 69 : Étapes Dépose Bac

  1. Approche (pince fermée)
  2. Dépose (pince fermée)
  3. Dépose (pince ouverte)
  4. Dégagement (pince ouverte).

La prise du balai :
La prise du balai s’effectue à partir d’une position prédéfinie dans le robot, combinée à l’ouverture puis à la fermeture de la pince SCHUNK afin de saisir correctement le balai.
Pour cette trajectoire, les points sont déjà entièrement prédéfinis dans le programme : il n’y a donc aucun calcul spécifique ni logique supplémentaire à implémenter. La structure générale reste identique à celle utilisée pour les séquences de prise ou de dépose.
Visualisation des trajectoires de la prise du balai :

Étapes Prise Balai

Figure 70 : Étapes Prise Balai

  1. Attente (pince ouverte)
  2. Approche (pince ouverte)
  3. Prise (pince ouverte)
  4. Prise (pince fermée)
  5. Dégagement (pince fermée)
  6. Attente (Pince fermée).

Le balayage du plateau :
Le balayage avec le balai s’effectue à partir de positions prédéfinies dans le robot. Cette séquence permet de nettoyer le plateau des différentes lettres déposées précédemment.
La modification majeure apportée à ce programme concerne le forçage de la vitesse. Lors des essais, nous avons constaté qu’une vitesse trop élevée pouvait provoquer l’éjection de pièces hors du plateau. Pour éviter ce phénomène, la vitesse a été verrouillée durant l’exécution de la trajectoire, avec des valeurs adaptées et validées lors des tests.

!Forçage vitesse
R[2:VIT_ACTU]=$MCR.$GENOVERRIDE
OVERRIDE=20%

!ARRIVEE
PR[27:ARR_BROSSE_FRM2]=PR[26:DEP_BROSSE_FRM2]
PR[27,1:ARR_BROSSE_FRM2]=PR[20,1:OFFSET_FRM2]+380

L PR[27:ARR_BROSSE_FRM2] R[76:VIT_EVAC_PL]mm/sec CNT50

PR[27,1:ARR_BROSSE_FRM2]=PR[20,1:OFFSET_FRM2]+R[10:LONGEUR_PLATEAU]+10
PR[27,5:ARR_BROSSE_FRM2]=PR[20,5:OFFSET_FRM2]

L PR[27:ARR_BROSSE_FRM2] R[76:VIT_EVAC_PL]mm/sec CNT1

!Remise vitesse
OVERRIDE=R[2:VIT_ACTU]

Visualisation des trajectoires de la prise du balai :

Étapes Balayage Plateau

Figure 71 : Étapes Balayage Plateau

  1. Attente (pince fermée)
  2. Point de départ (pince fermée)
  3. Point de fin (pince fermée)
  4. Attente (Pince fermée).

La dépose du balai :
La dépose du balai s’effectue à partir d’une position prédéfinie dans le robot. Cette séquence permet de reposer le balai afin de pouvoir reprendre ensuite le cycle normal de prise des pièces.
Pour cette trajectoire, les points sont déjà entièrement prédéfinis dans le programme : il n’y a donc aucun calcul spécifique ni logique supplémentaire à implémenter. La structure générale reste identique à celle utilisée pour les séquences de prise ou de dépose.
Visualisation des trajectoires de la dépose du balai :

Étapes Dépose Balai

Figure 72 : Étapes Dépose Balai

  1. Attente (pince fermée)
  2. Approche (pince fermée)
  3. Dépose (pince fermée)
  4. Dépose (pince ouverte)
  5. Dégagement (pince ouverte)
  6. Attente (Pince ouverte).

Le RSR0001 (PROD) est le seul programme qui est appelé par l’automate :

Robot P01_POS_HOME

Figure 73 : Robot P01_POS_HOME

Pour la machine de salon, nous avons placé le main du projet mais également l’init et la gestion de la vitesse au démarrage.

!PRODUCTION SANS INITIALISATION
COL GUARD ADJUST 100

!Forçage petite vitesse
R[2:VIT_ACTU]=$MCR.$GENOVERRIDE
OVERRIDE=10%

!Passage par position HOME
CALL P01_POS_HOME

!Lancement init
CALL P05_INIT

!Lancement programme MAIN
OVERRIDE=R[2:VIT_ACTU]
CALL P00_MAIN