Programme d’exemple 11 : MM_S11_Viz_Timer

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.

Présentation du programme

Description

Le robot utilise un minuteur pour calculer le temps nécessaire entre l’établissement de la communication et l’achèvement, à chaque cycle, des opérations de prise et de dépose.

Chemin du fichier

Vous pouvez accéder au répertoire d’installation de Mech-Vision et Mech-Viz et trouver le fichier en utilisant le chemin Communication Component/Robot_Interface/KUKA/sample/MM_S11_Viz_Timer.

Projet

Projets Mech-Vision et Mech-Viz

Prérequis

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

Description du programme

Cette partie décrit le programme d’exemple MM_S11_Viz_Timer.

La seule différence entre le programme d’exemple MM_S11_Viz_Timer et le programme d’exemple MM_S2_Viz_Basic est que MM_S11_Viz_Timer peut utiliser un minuteur pour calculer le temps requis (le code de cette fonctionnalité est en gras). Par conséquent, les fonctionnalités du programme MM_S11_Viz_Timer similaires à celles de MM_S2_Viz_Basic ne sont pas décrites dans cette partie. Pour plus d’informations sur ces fonctionnalités, voir Programme d’exemple 2 : MM_S2_Viz_Basic.
DEF  MM_S11_Viz_Timer ( )
;---------------------------------------------------
; FUNCTION: trigger Mech-Viz project and get
; planned path, add a timer to record cycle time
; Mech-Mind, 2023-12-25
;---------------------------------------------------
   ;set current tool no. to 1
   BAS(#TOOL,1)
   ;set current base no. to 0
   BAS(#BASE,0)
   ;move to robot home position
PTP HOME Vel=100 % DEFAULT
   ;initialize communication parameters (initialization is required only once)
   MM_Init_Socket("XML_Kuka_MMIND",873,871,60)
LOOP
   ;reset timer to 0
   $TIMER[1] = 0
   ;start timer
   $TIMER_STOP[1] = FALSE
   ;move to image-capturing position
LIN camera_capture Vel=1 m/s CPDAT1 Tool[1] Base[0]
   ;trigger Mech-Viz project
   MM_Start_Viz(2,init_jps)
   ;get planned path, 1st argument (1) means getting pose in JPs
   MM_Get_VizData(1,pos_num,vis_pos_num,status)
   ;check whether planned path has been got from Mech-Viz successfully
   IF status<> 2100 THEN
      ;add error handling logic here according to different error codes
      ;e.g.: status=2038 means no point cloud in ROI
      halt
   ENDIF
   ;save waypoints of the planned path to local variables one by one
   MM_Get_Jps(1,Xpick_point1,label[1],toolid[1])
   MM_Get_Jps(2,Xpick_point2,label[2],toolid[2])
   MM_Get_Jps(3,Xpick_point3,label[3],toolid[3])
   ;follow the planned path to pick
   ;move to approach waypoint of picking
PTP pick_point1 Vel=50 % PDAT1 Tool[1] Base[0]
   ;move to picking waypoint
PTP pick_point2 Vel=10 % PDAT2 Tool[1] Base[0]
   ;add object grasping logic here, such as "$OUT[1]=TRUE"
   halt
   ;move to departure waypoint of picking
PTP pick_point3 Vel=50 % PDAT3 Tool[1] Base[0]
   ;move to intermediate waypoint of placing
PTP drop_waypoint CONT Vel=100 % PDAT2 Tool[1] Base[0]
   ;move to approach waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
   ;move to placing waypoint
LIN drop Vel=0.3 m/s CPDAT4 Tool[1] Base[0]
   ;add object releasing logic here, such as "$OUT[1]=FALSE"
   halt
   ;move to departure waypoint of placing
LIN drop_app Vel=1 m/s CPDAT3 Tool[1] Base[0]
   ;move back to robot home position
PTP HOME Vel=100 % DEFAULT
   $TIMER_STOP[1] = TRUE
   offset = 0
   SWRITE(str_tmp[], state, offset,"time: %d ms", $TIMER[1])
   MM_LOG(str_tmp[])
ENDLOOP
END

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

sample11

Le tableau ci-dessous décrit la fonctionnalité d’utilisation d’un minuteur pour calculer le temps requis.

Fonctionnalité Code et description

Calculer, par bouclage, le temps écoulé entre l’établissement de la communication et l’achèvement des opérations de prise et de dépose à chaque cycle

LOOP
    ...
ENDLOOP

Le code ci-dessus indique que le programme boucle sur les instructions comprises entre LOOP et ENDLOOP.

;reset timer to 0
$TIMER[1] = 0

Le code ci-dessus définit $TIMER[1] sur 0 ms.

;start timer
$TIMER_STOP[1] = FALSE

Le code ci-dessus lance l’exécution de $TIMER[1].

$TIMER_STOP[1] = TRUE

Le code ci-dessus arrête $TIMER[1].

offset = 0
SWRITE(str_tmp[], state, offset,"time: %d ms", $TIMER[1])
  • SWRITE : écrit la variable $TIMER[1] dans le tableau str_tmp[] au format « temps : %d ms ».

  • str_tmp[] : Un tableau de type CHAR utilisé pour stocker le contenu formaté de la variable $TIMER[1].

  • state : Revient automatiquement à l’état d’écriture.

  • offset : Spécifie la position de départ à partir de laquelle SWRITE écrit la chaîne. Si l’écriture commence au début, offset doit être défini sur 0.

  • « temps : %d ms » : Spécifie le format, ce qui signifie que $TIMER[1] sera écrit dans str_tmp[] au format temps : %d ms. Par exemple, si $TIMER[1] vaut 10, le contenu formaté serait « temps : 10 ms ».

Le code ci-dessus indique que la commande SWRITE écrit le temps calculé par le minuteur $TIMER[1] dans le tableau str_tmp[] au format « temps : %d ms ».

MM_LOG(str_tmp[])

Le code ci-dessus affiche le temps calculé sur l’écran du pupitre de commande.

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.