Skip to main content
Skip table of contents

get_conveyor_obj(conv_id, timeout=None, container_type=DR_FIFO, obj_offset_coord=None)

기능

해당 Conveyor로부터 작업 가능한 작업물 좌표계 ID를 리턴합니다. 함수가 불렸을 때, Watch Window에 있는 작업물 중 설정한 container 규칙에 따라 작업물을 한 개씩 반환해줍니다.

인수

인수명자료형기본값설명

conv_id

int

-

Conveyor ID

timeout

float

None

설정한 시간동안 리턴할 작업물이 없으면 대기 종료하고 함수 리턴

container_type

int

DR_FIFO

작업물 container type(DR_FIFO: first-in/first-out, DR_LIFO: last-in/last-out

obj_offset_coord

posx


None

컨베이어 고정 좌표계 대비 작업물 좌표계(mm, ˚)

list(float[6])

알아두기

  1. 해당 함수를 호출했을 때, Watch Window에 있는 작업물을 설정한 Container 규칙에 따라 작업물 좌표계 id를 한 개씩 반환해줍니다. 예를 들어, 아래와 같이 작업물이 배치되어 있는 순간 get_conveyor_obj 함수를 호출하면 Watch Window 안에 있는 ②, ③ 작업물이 후보가 됩니다. 이 때, container_typeDR_FIFO로 설정한 경우 Watch Window에 먼저 들어온 ③ 작업물 좌표계 id를 반환하고, DR_LIFO로 설정한 경우 Watch Window에 나중에 들어온 ② 작업물 좌표계 id를 반환합니다. 만약에 함수 호출 당시에 Watch Window에 작업물이 없으면 최대 timeout 변수에 설정된 시간까지 대기하고 있다가 그 사이에 작업물이 들어오면 해당 id를 반환해줍니다.

    [작업물 좌표계 id 반환 규칙 설명]
  2. obj_offset_coord는 작업물 좌표계에 offset을 적용하고 싶을 때 사용합니다. 보통 티징점을 손쉽게 입력하기 위해서 사용하거나 외부센서(ex. Vision 센서)와 연동해서 작업물의 자세와 위치를 동적으로 바꿔주고 싶을 때 사용합니다. 입력하지 않으면 offset0이 적용됩니다.

아래 그림 같은 경우, 작업물 좌표계가 작업물 우측면에 생성되고, Base or World Coord.과 작업물 좌표계가 90도 틀어져있습니다. 이 때, 티칭점의 위치는 작업물 가운데 기준으로, 티칭점의 자세는 Base or World Coord. 기준으로 부여하고 싶은 경우 obj_offset_coord = posx(-d, 0, 0, -90, 0, 0)으로 적용하면 됩니다. TP UI를 통해서 티칭점을 획득할 경우 필수적인 부분은 아니지만, drl만을 사용하거나 티칭점을 직접 입력해야 할 경우 필요합니다.


[obj_offset_coord 적용 사례 1]


다음으로, 아래 그림 같이 작업물이 컨베이어 진행 방향과 무관한 방향으로 위치가 변하는 경우 또는 작업물의 자세가 바뀌는 경우 엔코더 신호만으로는 작업물의 위치/자세를 알아낼 수 없으므로 비전 센서를 써서 작업물의 추가적인 위치/자세 변화를 감지해야 합니다. 그리고, 여기서 감지한 위치/자세 변화를 동적으로 obj_offset_coord에 입력해주면 작업물 좌표계를 이에 맞게 생성합니다.

[obj_offset_coord 적용 사례 2: 비전 센서 사용]

리턴

설명

int

CONV_COORD. Conveyor 유저 좌표계 ID (121~150)

음의 정수

timeout 시간이 지나도 반환할 작업물이 없을 경우

알아두기

반환할 작업물이 없을 경우, timeout 시간이 지날 때까지 함수를 리턴해주지 않습니다. timeout 시간이 지났지만 해당 작업물이 없으면 -1을 반환합니다. , timeout 시간을 입력하지 않은 경우는 계속해서 함수를 리턴해주지 않습니다.

예외

예외설명

DR_Error (DR_ERROR_TYPE)

인수들의 데이터형 오류 시

DR_Error (DR_ERROR_VALUE)

인수의 값이 유효하지 않을 시

DR_Error (DR_ERROR_RUNTIME)

C Extension 모듈 에러 발생 시

DR_Error (DR_ERROR_STOP)

프로그램 강제 종료 시

예제

PY
## One object in a cycle
CONV1 = set_conveyor(‘conveyor1’)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE) # waiting position
while True:
CONV_COORD_1 = get_conveyor_obj(CONV1)
tracking_conveyor(CONV1)

# synched motion
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_1)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

untracking_conveyor(CONV1)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE) # waiting position

## Multi objects in a cycle 
CONV1 = set_conveyor(‘conveyor1’)

while True:
CONV_COORD_1 = get_conveyor_obj(CONV1)
tracking_conveyor(CONV1)

# fist object
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_1)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

# second object
CONV_COORD_2 = get_conveyor_obj(CONV1, time_out=10)
if CONV_COORD_2 > 0: # -1 if no objects available during time_out
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_2)
movel(posx(0,0, 0, 0, 0, 0), ref=CONV_COORD_2)
set_digital_output(DO_GRIPPER, 1)
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_2)

# first object if you need
movel(posx(0,0, 50, 0, 0, 0), ref=CONV_COORD_1)

untracking_conveyor(CONV1)

movel(posx(100, 100, 50, 0, 0, 0), ref=DR_BASE)

관련 명령어

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.