1.33 1.32 1.31 1.30 1.29 1.28 1.20 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish
1.33 1.32 1.31 1.30 1.29 1.28 1.20 Korean English Chinese Czech Dutch French German Hungarian Italian Japanese Polish Portuguese Spanish

CDRFLEx.amove_periodic

기능

비동기 방식의 move_periodic모션으로 비동기 처리 외에 move_periodic() 함수와 동일하게 동작하며 모션 종료를 기다리지 않고 모션 시작과 동시에 리턴하여 다음 라인을 실행한다. move_periodic() 함수에 의한 모션이 종료되기 전에 발생하는 새로운 모션 명령어는 안전상의 이유로 오류를 발생시킨다. 따라서 amove_periodic() 함수와 이어지는 새로운 모션명령어 사이에는 mwait() 함수를 사용하여 amove_periodic()에 의한 모션이 종료된 것를 확인한 후 새로운 모션명령어가 시작되도록 해야한다.

이 명령어는 현재위치에서 시작하는 상대 모션어로 입력된 기준 좌표계(eMoveReferecne)의 각 축(병진 및 회전)에 대한 Sine함수 기반으로 주기모션을 수행합니다. 각 축 별 모션의 특성은 진폭과 주기에 의해 결정되고 가감속 시간과 총 모션 시간은 주기, 반복 및 횟수에 의해 설정된다.

인수

인수명

자료형

기본값

범위

설명

fAmplitude

float[6]

-

>=0

Amplitude(-fAmplitude 에서 + fAmplitude 사이 모션) [mm] or [deg]

fPeriodic

float[6]

-

>=0

period(1주기 소요 시간)[sec]

fAccelTime

float

-

>=0

Acc-, dec- time [sec]

nRepeat

unsigned char

-

> 0

반복 횟수

eMoveReference

enum.MOVE_REFERENCE

MOVE_REFERENCE_TOOL

-

상수 및 열거형 정의 참조


알아두기
  • fAmplitude 는 진폭(amplitude)을 의미하며, 각 축(x, y, z, rx, ry, rz) 별로 6개가 입력되어야 합니다. 단, 주기 모션을 진행하지 않는 축 방향은 fAmplitude 를 0으로 입력해야 합니다.

  • fPeriodic 는 해당 방향 모션의 1회 반복 시간을 의미하며, 각 축(x, y, z, rx, ry, rz) 별 6개가 입력되어야 합니다.

  • fAccelTime 은 주기모션의 시작과 끝의 가속 및 감속 시간을 의미합니다. 입력된 가감속시간과 최대주기*1/4 중 큰 값이 적용됩니다. 입력된 가감속 시간이 전체모션시간의 1/2을 초과하는 경우 에러가 발생합니다.

  • nRepeat 은 가장 큰 period 값을 가지는 축(기준 축)의 반복 횟수를 정의하며, 이에 따라 총 모션 시간이 결정됩니다. 나머지 축의 반복 횟수는 모션 시간에 따라 자동 결정됩니다.

  • 모션이 정상 종료되는 경우 종료 위치가 시작 위치와 일치하게 하도록 나머지 축 모션은 기준 축 모션이 종료되기 전에 먼저 종료될 수 있습니다. 모든 축의 모션이 동시 종료되지 않는 경우 감속구간에서의 경로는 이전 경로에서 벗어나게 됩니다. 관련한 사항은 아래 이미지를 참조하십시오
    image2021-12-2_13-23-14.png

  • eMoveReference 는 반복 모션의 기준 좌표계를 의미합니다.

  • 모션명령 수행 시 최대속도 에러가 발생하는 경우 다음의 식을 참조하여 진폭 및 주기를 조정할 것을 제안합니다.
    최대속도=진폭(fAmplitude)*2*pi(3.14)/주기(fPeriodic)
    (예, 진폭=10mm, 주기=1초인 경우 최대속도=62.83mm/sec)

  • 선행모션과 후행모션에 대한 온라인 블렌딩은 지원하지 않습니다.

리턴

값

설명

0

오류

1

성공

예제

C++
// Tool좌표계 x축(10mm진폭, 1초 주기)모션과 y회전축(진폭 0.5deg, 1초 주기)
// 모션을 총 5회 반복 수행
// periodic 모션을 시작하고 1초 후에 Digital_Output 채널1번을 SET(1) 한다.
float fAmplitude[NUM_TASK] = {10, 0, 0, 0, 0.5, 0};
float fPeriod[NUM_TASK] = { 1, 1, 1, 1, 1, 1};
Drfl.amove_periodic(fAmplitude, fPeriod, 0.5, 5, MOVE_REFERENCE_TOOL);
Sleep(1000);
Drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, 1);
Drfl.mwait();