샘플 프로그램12: MM_S12_Viz_ForLoop
프로그램 소개
기능 설명 |
로봇이 Mech-Viz 프로젝트 실행을 트리거한 후, 경로 계획 결과를 획득하고 루프를 통해 계획된 경로를 저장하여 피킹 및 배치 작업을 수행합니다. |
파일 경로 |
Mech-Vision 및 Mech-Viz의 설치 디렉토리로 이동하여 |
필요한 프로젝트 |
Mech-Vision와 Mech-Viz 프로젝트 |
사용 전제 조건 |
|
이 샘플 프로그램은 참고용으로 제공됩니다. 사용자는 실제 상황에 맞춰 이 내용을 바탕으로 수정해야 하며, 해당 프로그램을 그대로 사용하지 않도록 하십시오. |
프로그램 설명
다음에는 MM_S12_Viz_ForLoop 샘플 프로그램의 코드와 관련 설명입니다.
MM_S2_Viz_Basic은 웨이포인트를 하나씩으로 저장하는 반면, MM_S12_Viz_ForLoop은 루프를 통해 웨이포인트를 저장합니다(이 기능의 코드는 굵게 표시됨). 따라서, 아래 부분에서는 루프를 통해 웨이포인트를 저장하는 기능만 설명됩니다. MM_S12_Viz_ForLoop의 MM_S2_Viz_Basic과 일치하는 부분에 대한 정보는 MM_S2_Viz_Basic 샘플 프로그램 설명을 참조하십시오. |
NOP
'--------------------------------
'FUNCTION: trigger Mech-Viz
'project and get planned path,get
'poses using for-loop structure
'Mech-Mind, 2023-12-25
'--------------------------------
'clear I50 to I69
CLEAR I050 20
'initialize p variables
SUB P071 P071
SUB P072 P072
SUB P073 P073
'move to robot home position
MOVJ C00000 VJ=50.00
'initialize communication
'parameters (initialization is
'required only once)
CALL JOB:MM_INIT_SOCKET ARGF"192.168.170.22;50000;1"
'move to image-capturing position
MOVJ C00001 VJ=50.00 PL=0
'open socket connection
CALL JOB:MM_OPEN_SOCKET
'trigger Mech-Viz project
CALL JOB:MM_START_VIZ ARGF"2;30"
'get planned path, 1st argument
'(1) means getting pose in JPs
CALL JOB:MM_GET_VIZDATA ARGF"1;51;52;53"
'check whether planned path has
'been got from Mech-Viz
'successfully
IFTHENEXP I053<>2100
'add error handling logic here
'according to different error
'codes
'e.g.: I053=2038 means no
'point cloud in ROI
PAUSE
ENDIF
'close socket connection
CALL JOB:MM_CLOSE_SOCKET
'save waypoints of planned path
'to local variables using
'for-loop structure
SET I001 1
SET I002 71
SET I003 61
SET I004 81
*CYCLE
VAL2STR S001 I001
VAL2STR S002 I002
VAL2STR S003 I003
VAL2STR S004 I004
CHR$ S005 59
CAT$ S000 S001 S005
CAT$ S000 S000 S002
CAT$ S000 S000 S005
CAT$ S000 S000 S003
CAT$ S000 S000 S005
CAT$ S000 S000 S004
CALL JOB:MM_GET_JPS ARGFS000
INC I001
INC I002
INC I003
INC I004
IFTHENEXP I001⇐I051
JUMP *CYCLE
ENDIF
'follow the planned path to pick
'move to approach waypoint of
'picking
MOVJ P071 VJ=50.00 PL=0
'move to picking waypoint
MOVJ P072 VJ=10.00 PL=0
'add object grasping logic here,
'such as DOUT OT#(1) ON
PAUSE
'move to departure waypoint of
'picking
MOVJ P073 VJ=50.00 PL=0
'move to intermediate waypoint of
'placing
MOVJ C00002 VJ=50.00
'move to approach waypoint of
'placing
MOVL C00003 V=166.6 PL=0
'move to placing waypoint
MOVL C00004 V=50.0 PL=0
'add object releasing logic here,
'such as DOUT OT#(1) OFF
PAUSE
'move to departure waypoint of
'placing
MOVL C00005 V=166.6 PL=0
'move back to robot home position
MOVJ C00006 VJ=50.00
END
위 샘플 프로그램 코드에 해당하는 워크플로는 아래 그림에 표시되어 있습니다.

아래 표는 루프를 통해 웨이포인트를 저장하는 기능의 설명입니다. 명령어 이름의 링크를 클릭하면 해당 명령의 상세 설명을 확인할 수 있습니다.
워크플로 | 코드와 설명 |
---|---|
루프를 통해 계획 경로를 저장하기 |
SET 명령어는 다른 프로그래밍 언어에서의 할당문과 유사합니다. 위 코드는 변수 I001, I002, I003, I004에 각각 1, 71, 61, 81의 값을 할당하는 것을 나타냅니다.
위 코드는 프로그램이 “*CYCLE”와 “JUMP *CYCLE” 사이의 코드를 순환 실행함을 나타냅니다.
VAL2STR 명령어는 다른 데이터 유형의 변수를 문자열 변수로 변환합니다. 예를 들어, 변수 I001의 값이 정수 1인 경우, "VAL2STR S001 I001" 명령어는 정수 1을 문자열 "1"로 변환하여 S001의 변수 값이 "1"이 되도록 합니다. 따라서, 만약 정수형 변수 I001, I002, I003, I004가 각각 1, 71, 61, 81이라면, 프로그램은 위 명령어를 실행한 후 S001, S002, S003, S004가 각각 "1", "71", "61", "81"로 변환됩니다.
위 문장은 번호 59인 문자, 즉 세미콜론(";")이 S005에 저장된다는 것을 나타냅니다.
CAT$ 명령어는 다른 프로그래밍 언어에서의 문자열 연결의 문장과 유사합니다. 예를 들어, S001이 문자열 "1"이고 S005가 문자열 ";"일 경우, "CAT$ S000 S001 S005" 명령어는 "1"과 ";"를 연결하여 "1;"을 만들고, 이를 S000에 할당하여 S000의 변수 값이 "1;"이 되도록 합니다. 따라서, 프로그램이 위 명령어를 실행한 후 S000의 변수 값은 "1;71;61;81"이 됩니다.
만약 S000의 변수 값이 "1;71;61;81"이라면, 위 명령어는 “CALL JOB:MM_GET_JPS ARGF"1;71;61;81"”입나다.
INC 명령어는 지정된 변수의 값을 1만큼 증가시킵니다. 따라서 위 문장은 I001、I002、I003、I004의 변수 값이 각각 1만큼 증가한다는 의미입니다.
I001은 순환 횟수입니다. I051은 MM_GET_VIZDATA 명령어의 두 번째 파라미터에 해당하는 변수입니다. 이 변수는 비전 시스템이 반환한 웨이포인트의 개수를 나타냅니다. 이 샘플에서 계획된 경로가 3개의 웨이포인트(피킹 접근 웨이포인트, 피킹 웨이포인트, 피킹 출발 웨이포인트)를 포함한다고 가정하면, 이 경우 I051은 3으로 설정되며, 위의 루프는 다음 두 명령어와 동일합니다.
|