amove_periodic()
기능
비동기(async.)방식의 move_periodic모션으로 async 처리 외에 move_periodic()와 동일하게 동작하며 명령어를 수행한 후 바로 다음 라인을 수행합니다.
amove_periodic()에 의한 모션이 종료되기 전에 발생하는 새로운 모션지령은 안전상의 이유로 오류를 발생시킵니다. 따라서 amove_periodic()과 이어지는 모션명령어 사이에는 mwait() 또는 check_motion() 등을 사용하여 amove_periodic() 모션 종료를 확인한 후 새로운 모션명령이 진행되도록 해야합니다.
이 명령어는 현재위치에서 시작하는 상대모션어로 입력된 기준 좌표계(ref)의 각 축(병진 및 회전)에 대한 Sine함수 기반으로 주기모션을 수행합니다. 각 axis별 모션의 특성은 amp(amplitude)와 주기에 의해 결정되고 가감속 시간과 총 모션 시간은 주기, 반복 및 횟수에 의해 설정됩니다.
알아두기
- move_ periodic: 현재위치에서 출발하여 periodic 궤적의 끝에 도달(정지)한 후에 다음 명령 수행
- amove_ periodic: 현재위치에서 출발하여 periodic 궤적의 끝에 도달(정지)여부와 관계없이 즉시 다음 명령 수행
인수
인수명 | 자료형 | 기본값 | 범위 | 설명 |
amp | list (float[6]) | - | 0≤amp | Amplitude(-amp에서 +amp사이 모션) [mm] or [deg] |
period | float or list (float[6]) | 0≤period | period(1주기 소요 시간)[sec] | |
atime | float | 0.0 | 0≤atime | Acc-, dec- time [sec] |
repeat | int | 1 | > 0 | 반복 횟수 |
ref | int | DR_TOOL | - | reference coordinate
|
알아두기
- amp는 진폭(amplitude)을 의미하며, 각 축(x, y, z, rx, ry, rz) 별로 amp를 값으로 하는 6개 원소의 list 형태로 입력해야 합니다. 단, 주기 모션을 진행하지 않는 축 방향은 amp를 0으로 입력해야 합니다.
- period는 해당 방향 모션의 1회 반복 시간을 의미하며, 각 축(x, y, z, rx, ry, rz) 별 period를 값으로 하는 총 6개 원소의 list 형태로 입력하거나 대표값을 입력해야합니다.
- atime은 주기모션의 시작과 끝의 가속 및 감속 시간을 의미합니다. 입력된 가감속시간과 최대주기*1/4 중 큰 값이 적용됩니다. 입력된 가감속 시간이 전체모션시간의 1/2을 초과하는 경우 에러가 발생합니다.
- repeat은 가장 큰 period 값을 가지는 축(기준 축)의 반복 횟수를 정의하며, 이에 따라 총 모션 시간이 결정됩니다. 나머지 축의 반복 횟수는 모션 시간에 따라 자동 결정됩니다.
- 모션이 정상 종료되는 경우 종료 위치가 시작 위치와 일치하게 하도록 나머지 축 모션은 기준 축 모션이 종료되기 전에 먼저 종료될 수 있습니다. 모든 축의 모션이 동시 종료되지 않는 경우 감속구간에서의 경로는 이전 경로에서 벗어나게 됩니다. 관련한 사항은 아래 이미지를 참조하십시오
- ref는 반복 모션의 기준 좌표계를 의미합니다.
- 모션명령 수행 시 최대속도 에러가 발생하는 경우 다음의 식을 참조하여 진폭 및 주기를 조정할 것을 제안합니다.
최대속도=진폭(amp)*2*pi(3.14)/주기(period)
(예, 진폭=10mm, 주기=1초인 경우 최대속도=62.83mm/sec) - 선행모션과 후행모션에 대한 온라인 블렌딩은 지원하지 않습니다.
리턴
값 | 설명 |
---|---|
0 | 성공 |
음수값 | 오류 |
예외
예외 | 설명 |
---|---|
DR_Error (DR_ERROR_TYPE) | 인수들의 데이터형 오류 시 |
DR_Error (DR_ERROR_VALUE) | 인수의 값이 유효하지 않을 시 |
DR_Error (DR_ERROR_RUNTIME) | C Extension 모듈 에러 발생 시 |
DR_Error (DR_ERROR_STOP) | 프로그램 강제 종료 시 |
예제
P0 = posj(0,0,90,0,90,0)
movej(P0)
amove_periodic(amp =[10,0,0,0,0.5,0], period=1, atime=0.5, repeat=5, ref=DR_TOOL)
wait(1)
set_digital_output(1, 1)
mwait(0)
# Tool좌표계 x축(10mm진폭, 1초 주기)모션과 y회전축(진폭 0.5deg, 1초 주기)
# 모션을 총 5회 반복 수행
# periodic 모션을 시작하고 1초 후에 Digital_Output 채널1번을 SET(1) 한다.