샘플 프로그램7: MM_S7_Viz_SwitchTCP

현재 최신 버전 (2.1.2)에 대한 매뉴얼을 보고 계십니다. 다른 버전에 액세스하려면 페이지 오른쪽 상단 모서리에 있는 '버전 전환' 버튼을 클릭하세요.

■ 현재 사용하고 있는 제품의 버전이 확실하지 않은 경우에는 언제든지 당사 기술 지원팀에 문의하시기 바랍니다.

프로그램 소개

기능 설명

로봇이 Mech-Viz프로젝트 실행을 트리거한 후, 경로 계획 결과를 휙득하고 피킹 웨이포인트 말단장치의 번호에 따라 적절한 장치를 전환하여 피킹 및 배치를 수해합니다.

파일 경로

Mech-Vision 및 Mech-Viz의 설치 디렉토리로 이동하여 통신 구성 요소/Robot_Interface/FANUC/sample/MM_S7_Viz_SwitchTCP경로를 사용하여 파일을 찾을 수 있습니다.

필요한 프로젝트

Mech-Vision와 Mech-Viz 프로젝트

사용 전제 조건

  1. 표준 인터페이스 통신 구성이 완료됩니다.

  2. 자동 캘리브레이션이 완료됩니다.

이 샘플 프로그램은 참고용으로 제공됩니다. 사용자는 실제 상황에 맞춰 이 내용을 바탕으로 수정해야 하며, 해당 프로그램을 그대로 사용하지 않도록 하십시오.

프로그램 설명

다음에는 MM_S7_Viz_SwitchTCP 샘플 프로그램의 코드와 관련 설명입니다.

MM_S2_Viz_Basic 샘플과 비하면, 이 샘플은 주로 말단장치의 번호에 따라 적절한 말단장치를 전환할 수 있는 기능이 추가되었습니다.(이 기능의 코드가 굵게 표시됨). 따라서, MM_S7_Viz_SwitchTCP의 MM_S2_Viz_Basic과 일치하는 부분은 다시 설명하지 않습니다. (일치하는 부분에 대한 정보는 MM_S2_Viz_Basic샘플 프로그램 설명을 참조하십시오).
   1:  !-------------------------------- ;
   2:  !FUNCTION: trigger Mech-Viz ;
   3:  !project and get planned path, ;
   4:  !switch TCP according to ;
   5:  !the tool NO.;
   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:  !move to robot home position ;
  14:J P[1] 100% FINE    ;
  15:  !initialize communication ;
  16:  !parameters(initialization is ;
  17:  !required only once) ;
  18:  CALL MM_INIT_SKT('8','127.0.0.1',50000,5) ;
  19:  !move to image-capturing position ;
  20:L P[2] 1000mm/sec FINE    ;
  21:  !trigger Mech-Viz project ;
  22:  CALL MM_START_VIZ(2,10) ;
  23:  !get planned path, 1st argument ;
  24:  !(2) means getting pose in TCP ;
  25:  CALL MM_GET_VIZ(2,51,52,53) ;
  26:  !check whether planned path has ;
  27:  !been got from Mech-Viz ;
  28:  !successfully ;
  29:  IF R[53]<>2100,JMP LBL[99] ;
  30:  !save waypoints of the planned ;
  31:  !path to local variables one ;
  32:  !by one ;
  33:  CALL MM_GET_POS(1,60,70,80) ;
  34:  CALL MM_GET_POS(2,61,71,81) ;
  35:  CALL MM_GET_POS(3,62,72,82) ;
  36:  !switch TCP according to the ;
  37:  !received tool NO. ;
  38:  IF R[81]=1,JMP LBL[1] ;
  39:  IF R[81]=2,JMP LBL[2] ;
  40:  JMP LBL[999] ;
  41:   ;
  42:  LBL[1:use tool NO.1] ;
  43:  !set current tool NO. to 1 ;
  44:  UTOOL_NUM=1 ;
  45:  !reset tool signal ;
  46:  !DO[1]=OFF ;
  47:  !set a Flag ;
  48:  F[1]=(ON) ;
  49:  JMP LBL[3] ;
  50:   ;
  51:  LBL[2:use tool NO.2] ;
  52:  !set current tool NO. to 2 ;
  53:  UTOOL_NUM=2 ;
  54:  !reset tool signal ;
  55:  !DO[2]=OFF ;
  56:  !set a Flag ;
  57:  F[2]=(ON) ;
  58:  JMP LBL[3] ;
  59:   ;
  60:  LBL[3:pick path] ;
  61:  !follow the planned path to pick ;
  62:  !move to approach waypoint ;
  63:  !of picking ;
  64:L PR[60] 1000mm/sec FINE    ;
  65:  !move to picking waypoint ;
  66:L PR[61] 300mm/sec FINE    ;
  67:  !add object grasping logic here, ;
  68:  !IF (F[1]),DO[1]=(ON) ;
  69:  !IF (F[2]),DO[2]=(ON) ;
  70:  PAUSE ;
  71:  !move to departure waypoint ;
  72:  !of picking ;
  73:L PR[62] 1000mm/sec FINE    ;
  74:  !move to intermediate waypoint ;
  75:  !of placing ;
  76:J P[3] 50% CNT100    ;
  77:  !move to approach waypoint ;
  78:  !of placing ;
  79:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  80:  !move to placing waypoint ;
  81:L P[4] 300mm/sec FINE    ;
  82:  !add object releasing logic here, ;
  83:  !IF (F[1]),DO[1]=(OFF) ;
  84:  !IF (F[2]),DO[2]=(OFF) ;
  85:  PAUSE ;
  86:  !move to departure waypoint ;
  87:  !of placing ;
  88:L P[4] 1000mm/sec FINE Tool_Offset,PR[2]    ;
  89:  !move back to robot home position ;
  90:J P[1] 100% FINE    ;
  91:  !reset the Flags ;
  92:  F[1]=(OFF) ;
  93:  F[2]=(OFF) ;
  94:  END ;
  95:   ;
  96:  LBL[99:vision error] ;
  97:  !add error handling logic here ;
  98:  !according to different ;
  99:  !error codes ;
 100:  !e.g.: status=2038 means no ;
 101:  !point cloud in ROI ;
 102:  PAUSE ;
 103:   ;
 104:  LBL[999:label error] ;
 105:  !add handling logic here if the ;
 106:  !label is invalid ;
 107:  PAUSE ;

위 샘플 프로그램 코드에 해당하는 워크플로는 아래 그림에 표시되어 있습니다.

sample7

아래 표는 새롭게 추가된 코드의 설명입니다.

워크플로 코드와 설명

계획 경로를 획득하기

  23:  !get planned path, 1st argument ;
  24:  !(2) means getting pose in TCP ;
  25:  CALL MM_GET_VIZ(2,51,52,53) ;
  • MM_GET_VIZ: Mech-Viz가 계획한 경로를 획득하는 명령어.

  • 2: 획득한 웨이포인트의 포즈 유형을 말단장치 포즈로 지정합니다.

  • 51: 번호가 51인 데이터 레지스터 R[51]입니다. 이 레지스터는 비전 시스템이 반환한 웨이포인트의 개수를 저장할 데 사용됩니다.

  • 52: 번호가 52인 데이터 레지스터 R[52]입니다. 이 레지스터는 비전 이동 웨이포인트(피킹 웨이포인트)의 경로 내 위치 번호를 저장합니다.

  • 53: 번호가 53인 데이터 레지스터 R[53]입니다. 이 레지스터는 명령어 실행의 상태 코드를 저장하는 것입니다.

따라서, 이 명령어는 로봇이 Mech-Viz 프로젝트가 반환한 계회된 경로를 획득하는 명령어입니다.

반환된 계획 경로는 로봇의 메모리에 저장되며, 직접적으로 얻을 수 없습니다. 후속 작업인 "계획 경로를 저장하기"을 통해서만 접근할 수 있습니다.

계획 경로를 저장하기

  30:  !save waypoints of the planned ;
  31:  !path to local variables one ;
  32:  !by one ;
  33:  CALL MM_GET_POS(1,60,70,80) ;
  34:  CALL MM_GET_POS(2,61,71,81) ;
  35:  CALL MM_GET_POS(3,62,72,82) ;
  • MM_GET_POS: 계획된 경로를 저장하는 명령어.

  • 1: 첫 번째 웨이포인트가 저장됩니다.

  • 60: 번호가 60인 위치 레지스터 PR[60]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 말단장치 포즈를 저장하는 것입니다.

  • 70: 번호가 70인 데이터 레지스터 R[70]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 레이블을 저장하는 것입니다.

  • 80: 번호가 80인 데이터 레지스터 R[80]입니다. 이 레지스터는 첫 번째 웨이포인트에 해당하는 말단장치 번호를 저장하는 것입니다.

따라서, "CALL MM_GET_POS(1,60,70,80)"는 첫 번째 웨이포인트의 말단장치 포즈, 레이블 및 말단장치 번호를 지정된 레지스터에 저장하는 명령어입니다.

  • 사용자는 실제 Mech-Viz 프로젝트를 고려하여 계획된 경로를 저장해야 합니다. 이 샘플에서는 Mech-Viz가 계획한 경로가 세 개의 웨이포인트로 구성됩니다: 첫 번째는 피킹 접근 웨이포인트(PR[60]), 두 번째는 피킹 웨이포인트(PR[61]), 세 번째는 피킹 출발 웨이포인트(PR[62])입니다. 따라서, R[81]은 로봇이 피킹 웨이포인트(PR[61])로 이동할 때 사용한 말단장치의 번호입니다.

  • 이 샘플은 R[81] 값을 기반으로 말단장치를 변경합니다. 따라서 사용되는 Mech-Viz프로젝트에는 “말단장치를 바꾸기”스텝이 포함되어야 하며, “말단장치를 바꾸기”의 스텝 파라미터가 적절하게 설정되어야 합니다.

    • "말단장치를 바꾸기" 스텝은 "비전 결과 체크"스텝의결과 있음 아웃 포트 뒤에 연결되야 합니다.

    • "말단장치를 바꾸기" 스텝의 작업 모드파라미터는 적합한 말단장치로 자동으로 전환됨으로 설정되야 합니다.

말단장치의 번호에 따라 적절한 말단장치를 전환하기

  36:  !switch TCP according to the ;
  37:  !received tool NO. ;
  38:  IF R[81]=1,JMP LBL[1] ;
  39:  IF R[81]=2,JMP LBL[2] ;
  40:  JMP LBL[999] ;
  41:   ;
  42:  LBL[1:use tool NO.1] ;
  43:  !set current tool NO. to 1 ;
  44:  UTOOL_NUM=1 ;
  45:  !reset tool signal ;
  46:  !DO[1]=OFF ;
  47:  !set a Flag ;
  48:  F[1]=(ON) ;
  49:  JMP LBL[3] ;
  50:   ;
  51:  LBL[2:use tool NO.2] ;
  52:  !set current tool NO. to 2 ;
  53:  UTOOL_NUM=2 ;
  54:  !reset tool signal ;
  55:  !DO[2]=OFF ;
  56:  !set a Flag ;
  57:  F[2]=(ON) ;
  58:  JMP LBL[3] ;
  ...
  60:  LBL[3:pick path] ;
  ...
  67:  !add object grasping logic here, ;
  68:  !IF (F[1]),DO[1]=(ON) ;
  69:  !IF (F[2]),DO[2]=(ON) ;
  ...
  82:  !add object releasing logic here, ;
  83:  !IF (F[1]),DO[1]=(OFF) ;
  84:  !IF (F[2]),DO[2]=(OFF) ;
  ...
  91:  !reset the Flags ;
  92:  F[1]=(OFF) ;
  93:  F[2]=(OFF) ;
  94:  END ;

R[81] 레지스터에 설정된 값을 기준으로 로봇이 피킹 웨이포인트로 이동할 때 사용할 도구를 결정할 수 있습니다. 위 코드의 설명은 아래와 같습니다.

  • 피킹 웨이포인트의 말단장치 번호가 1인 경우(JMP LBL[1]), 로봇이 1번 툴 좌표계(UTOOL_NUM=1)가 해당하는 장치를 사용하여 피킹합니다.

  • 피킹 웨이포인트의 말단장치 번호가 2인 경우(JMP LBL[2]), 로봇이 2번 툴 좌표계(UTOOL_NUM=2)가 해당하는 장치를 사용하여 피킹합니다.

  • 피킹 웨이포인트에 말단장치 번호가 다른 값일 경우(JMP LBL[999]), 로봇은 실행이 종료됩니다. 여기는 사용자가 실제 상황에 맞춰 다른 처리를 추가할 수 있습니다.

로봇이 DO[1]신호를 통해 말단장치1를 제어하고 DO[2]신호를 통해 말단장치2를 제어한다고 가정하면 프로그램은 각각 F[1] 및 F[2] 플래그를 사용하여 이들의 관계를 설정해야 합니다.

  • F[1]이 ON이면 로봇이 DO[1] 신호를 제어하여 피킹 및 배치를 할 수 있다는 의미입니다.

  • F[2]이 ON이면 로봇이 DO[2] 신호를 제어하여 피킹 및 배치를 할 수 있다는 의미입니다.

다음에는 말단장치 번호1을 예시로 구체적인 피킹 및 배치의 워크플로를 설명합니다.

  1. 툴 좌표계를 1번으로 전환합니다(UTOOL_NUM=1).

  2. 말단장치1을 제어하는 DO신호를 재설정합니다.(DO[1]=OFF)

  3. F[1]이 ON(F[1]=(ON))으로 설정하면 로봇이 DO[1] 신호를 제어하여 피킹 및 배치를 할 수 있다는 의미입니다.

  4. 로봇이 피킹 웨이포인트로 이동할 때 F[1]은 ON입니다. DO[1]을 ON으로 설정하여 피킹 작업이 완료됩니다.

  5. 로봇이 배치 웨이포인트로 이동할 때 F[1]은 ON입니다. DO[1]을 OFF으로 설정하여 배치 작업이 완료됩니다.

  6. 로봇이 home 포인트로 돌아오면 F[1]이 OFF로 재설정되어 로봇이 다음 피킹 및 배치에 사용하는 DO 신호 번호를 표시합니다.

로봇이 말단장치 번호2를 사용하는 워크플로는 위의 워크플로와 비슷합니다. 다시 설명하지 않겠습니다.

이 페이지가 도움이 되었습니까?

다음 방법을 통해 피드백을 보내주실 수 있습니다:

저희는 귀하의 개인정보를 소중히 다룹니다.

당사 웹사이트는 최상의 사용자 경험을 제공하기 위해 쿠키를 사용하고 있습니다. "모두 수락"을 클릭하시면 쿠키 사용에 동의하시는 것이며, "모두 거부"를 클릭하시면 이 웹사이트 방문 시 귀하의 정보가 추적되거나 기억되지 않도록 단일 쿠키만 사용됩니다.