Exemple de programme 10 : MM_S10_Viz_Subtask

Vous consultez actuellement la documentation pour la dernière version (2.1.2). Pour accéder à une autre version, cliquez sur le bouton "Changer de version" situé dans le coin supérieur droit de la page.

■ Si vous n’êtes pas sûr de la version du produit que vous utilisez, veuillez contacter le support technique Mech-Mind pour obtenir de l’aide.

Introduction du programme

Description

Ce programme d’exemple comprend deux programmes : un programme principal et un sous-programme. Le sous-programme (programme en arrière-plan) déclenche l’exécution du projet Mech-Viz afin d’obtenir la trajectoire planifiée. Le programme principal (programme au premier plan) déplace le robot en fonction de la trajectoire planifiée. Ensuite, le programme principal déclenche l’exécution du sous-programme lorsque le robot quitte la zone de prélèvement afin d’obtenir la prochaine trajectoire planifiée, réduisant ainsi le temps de cycle.

  • Cet exemple utilise la commande « Execute Distance First » pour déclencher l’exécution du projet Mech-Viz et obtenir à l’avance la trajectoire planifiée pendant le mouvement. Avant d’utiliser la commande « Execute Distance First », la variable système $SCR_GRP[1].$M_POS_ENB doit être définie sur TRUE.

  • Cet exemple est très similaire au programme d’exemple MM_S8_Viz_Subtask, à ceci près que le moment où le programme principal déclenche le sous-programme est différent. Il est recommandé de comparer les deux exemples pour mieux en comprendre les nuances.

Chemin du fichier

Sous-programme : vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier via le chemin Communication Component/Robot_Interface/FANUC/sample/MM_S10_Sub.

Programme principal : vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier via le chemin Communication Component/Robot_Interface/FANUC/sample/MM_S10_Viz_Subtask.

Projet

Projets Mech-Vision et Mech-Viz

Prérequis

Ce programme d’exemple est fourni à titre de référence uniquement. Avant d’utiliser le programme, veuillez le modifier en fonction du scénario réel.

Description du programme

La section suivante décrit le sous-programme.

À l’instar du programme d’exemple MM_S2_Viz_Basic, le sous-programme déclenche l’exécution du projet Mech-Viz et obtient le code de trajectoire planifiée. Par conséquent, les fonctionnalités du sous-programme qui sont identiques à celles de MM_S2_Viz_Basic ne sont pas décrites dans cette section. Pour plus d’informations sur ces fonctionnalités, voir Exemple de programme 2 : MM_S2_Viz_Basic.
   1:  !-------------------------------- ;
   2:  !FUNCTION: run Mech-Viz project ;
   3:  !and get planned path in subtask ;
   4:  !(run together with ;
   5:  !MM_S10_Viz_Subtask) ;
   6:  !Mech-Mind, 2023-12-25 ;
   7:  !-------------------------------- ;
   8:   ;
   9:  F[11]=(ON) ;
  10:  !trigger Mech-Viz project ;
  11:  CALL MM_START_VIZ(2,10) ;
  12:  !get planned path, 1st argument ;
  13:  !(1) means getting pose in JPs ;
  14:  CALL MM_GET_VIZ(1,51,52,53) ;
  15:  !check whether planned path has ;
  16:  !been got from Mech-Viz ;
  17:  !successfully ;
  18:  IF (R[53]=2100) THEN ;
  19:  !save waypoints of the planned ;
  20:  !path to local variables one ;
  21:  !by one ;
  22:  CALL MM_GET_JPS(1,60,70,80) ;
  23:  CALL MM_GET_JPS(2,61,71,81) ;
  24:  CALL MM_GET_JPS(3,62,72,82) ;
  25:  ENDIF ;
  26:  F[11]=(OFF) ;

Le code ci-dessus indique que si le sous-programme est en cours d’exécution, les opérations suivantes sont effectuées.

  1. Définir F[11] sur ON.

  2. Exécuter le projet Mech-Viz.

  3. Obtenir la trajectoire planifiée.

  4. Stocker la trajectoire planifiée.

  5. Définir F[11] sur OFF.

Ainsi, vous pouvez déterminer si le sous-programme a fini de s’exécuter en vous basant sur la valeur de F[11].

La section suivante décrit le programme principal.

À l’instar du programme d’exemple MM_S2_Viz_Basic, le programme principal effectue le prélèvement et la dépose en se basant sur le code de la trajectoire planifiée. Par conséquent, les fonctionnalités du programme principal qui sont identiques à celles de MM_S2_Viz_Basic ne sont pas décrites dans cette section. Pour plus d’informations sur ces fonctionnalités, voir Exemple de programme 2 : MM_S2_Viz_Basic.
   1:  !-------------------------------- ;
   2:  !FUNCTION: run Mech-Viz project ;
   3:  !and get planned path in subtask ;
   4:  !(run together with ;
   5:  !MM_S10_Sub) ;
   6:  !Mech-Mind, 2023-12-25 ;
   7:  !-------------------------------- ;
   8:   ;
   9:  !set current uframe NO. to 0 ;
  10:  UFRAME_NUM=0 ;
  11:  !set current tool NO. to 1 ;
  12:  UTOOL_NUM=1 ;
  13:  !initialize communication ;
  14:  !parameters(initialization is ;
  15:  !required only once) ;
  16:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  17:  !move to robot home position ;
  18:J P[1] 100% FINE    ;
  19:  RUN MM_S10_SUB ;
  20:  LBL[1:LOOP] ;
  21:  !move to wait position for ;
  22:  !picking ;
  23:L P[2] 1000mm/sec FINE    ;
  24:  !wait until subtask program ;
  25:  !finished ;
  26:  WAIT (F[11]=OFF)    ;
  27:  !check whether planned path has ;
  28:  !been got from Mech-Viz ;
  29:  !successfully ;
  30:  IF R[53]<>2100,JMP LBL[99] ;
  31:  !follow the planned path to pick ;
  32:  !move to approach waypoint ;
  33:  !of picking ;
  34:J PR[60] 50% FINE    ;
  35:  !move to picking waypoint ;
  36:J PR[61] 10% FINE    ;
  37:  !add object grasping logic here, ;
  38:  !such as "DO[1]=ON" ;
  39:  PAUSE ;
  40:  !move to departure waypoint ;
  41:  !of picking ;
  42:J PR[62] 50% FINE    ;
  43:  !move to intermediate waypoint ;
  44:  !of placing, and trigger Mech-Viz ;
  45:  !project and get planned path in ;
  46:  !advance ;
  47:J P[3] 50% CNT100 DB   10.0mm,CALL MM_S10_SUB    ;
  48:  !move to approach waypoint ;
  49:  !of placing ;
  50:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  51:  !move to placing waypoint ;
  52:L P[4] 300mm/sec FINE    ;
  53:  !add object releasing logic here, ;
  54:  !such as "DO[1]=OFF" ;
  55:  PAUSE ;
  56:  !move to departure waypoint ;
  57:  !of placing ;
  58:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  59:  !move back to robot home position ;
  60:J P[1] 100% FINE    ;
  61:  JMP LBL[1] ;
  62:  END ;
  63:   ;
  64:  LBL[99:vision error] ;
  65:  !add error handling logic here ;
  66:  !according to different ;
  67:  !error codes ;
  68:  !e.g.: status=2038 means no ;
  69:  !point cloud in ROI ;
  70:  PAUSE ;

Le flux de travail correspondant au code de programme d’exemple ci-dessus est illustré dans la figure ci-dessous.

sample10

Le tableau ci-dessous illustre le code central du programme principal.

Fonctionnalité Code et description

Déclencher l’exécution du projet Mech-Viz et obtenir la trajectoire planifiée

  19:  RUN MM_S10_SUB ;

Le code ci-dessus indique que le programme principal appelle le sous-programme MM_S10_SUB afin de déclencher l’exécution du projet Mech-Viz et d’obtenir la trajectoire planifiée.

La différence entre la commande RUN et la commande CALL est que la commande CALL attend que le programme appelé ait terminé son exécution avant de poursuivre avec le code suivant, tandis que la commande RUN exécute simultanément le programme appelé et le code suivant.

Planifier à l’avance la prochaine trajectoire par bouclage (prélèvement → déclenchement du prochain cycle de planification de trajectoire → dépose)

  20:  LBL[1:LOOP] ;
  ...
  61:  JMP LBL[1] ;

Le code ci-dessus indique que le programme principal exécute de manière répétée le code à LBL[1].

  21:  !move to wait position for ;
  22:  !picking ;
  23:L P[2] 1000mm/sec FINE    ;
  24:  !wait until subtask program ;
  25:  !finished ;
  26:  WAIT (F[11]=OFF)    ;
  27:  !check whether planned path has ;
  28:  !been got from Mech-Viz ;
  29:  !successfully ;
  30:  IF R[53]<>2100,JMP LBL[99] ;

Dans le code ci-dessus, le robot se déplace vers un point d’attente avant le prélèvement et attend que le sous-programme ait terminé son exécution (c’est-à-dire que F[11] passe de ON à OFF), garantissant ainsi que la trajectoire planifiée a été obtenue et stockée.

  31:  !follow the planned path to pick ;
  32:  !move to approach waypoint ;
  33:  !of picking ;
  34:J PR[60] 50% FINE    ;
  35:  !move to picking waypoint ;
  36:J PR[61] 10% FINE    ;
  37:  !add object grasping logic here, ;
  38:  !such as "DO[1]=ON" ;
  39:  PAUSE ;
  40:  !move to departure waypoint ;
  41:  !of picking ;
  42:J PR[62] 50% FINE    ;

Dans l’exemple ci-dessus, le robot se déplace le long de la trajectoire planifiée jusqu’au point d’approche du prélèvement (PR[60]), puis jusqu’au point de prélèvement (PR[61]), effectue le prélèvement (par exemple, DO[1]=ON), puis se déplace vers le point de départ du prélèvement (PR[62]).

  43:  !move to intermediate waypoint ;
  44:  !of placing, and trigger Mech-Viz ;
  45:  !project and get planned path in ;
  46:  !advance ;
  47:J P[3] 50% CNT100 DB   10.0mm,CALL MM_S10_SUB    ;

La commande ci-dessus correspond à la commande « Execute Distance First », expliquée en détail comme suit.

  • P[3] : Le point intermédiaire lors de la dépose. Vous devez enseigner ce point à l’avance.

  • « DB 10.0mm » : Définit un rayon sphérique de 10.0mm autour du point cible.

  • « CALL MM_S10_SUB » : Lorsque le robot atteint le rayon sphérique spécifié, il appelle le programme MM_S10_SUB.

Le code ci-dessus indique que lorsque le robot entre dans la zone sphérique centrée sur P[3], il appelle le sous-programme MM_S10_SUB, déclenchant ainsi l’exécution du projet Mech-Viz pour obtenir la trajectoire planifiée. Étant donné que le robot se trouve en dehors de la zone de dépose, il peut planifier à l’avance la prochaine trajectoire de prélèvement sans attendre la fin de la dépose puis la planification de la prochaine trajectoire de prélèvement.

Veuillez noter la différence entre ce programme d’exemple et le programme d’exemple MM_S8_Viz_Subtask. Le programme MM_S8_Viz_Subtask appelle le sous-programme avant que le robot ne se déplace vers le point de dépose, tandis que ce programme appelle le sous-programme après que le robot a quitté la zone de prélèvement.
  48:  !move to approach waypoint ;
  49:  !of placing ;
  50:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  51:  !move to placing waypoint ;
  52:L P[4] 300mm/sec FINE    ;
  53:  !add object releasing logic here, ;
  54:  !such as "DO[1]=OFF" ;
  55:  PAUSE ;
  56:  !move to departure waypoint ;
  57:  !of placing ;
  58:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  59:  !move back to robot home position ;
  60:J P[1] 100% FINE    ;

L’exemple ci-dessus indique que le robot se déplace vers le point d’approche de la dépose (Tool_Offset,PR[2]), puis vers le point de dépose (P[4]), effectue la dépose (comme DO[1]=OFF), puis se déplace vers le point de départ de la dépose (Tool_Offset,PR[2]) et enfin vers la position d’origine.

Cette page est-elle utile ?

Veuillez nous indiquer comment améliorer :

Nous accordons de l’importance à votre vie privée

Nous utilisons des cookies pour vous offrir la meilleure expérience possible sur notre site web. En continuant à utiliser le site, vous reconnaissez accepter l’utilisation des cookies. Si vous refusez, un cookie unique sera utilisé pour garantir que vous ne soyez pas suivi ou reconnu lors de votre visite sur ce site.