amoveb (자동 모드)

이 함수는 moveb의 비동기 버전입니다. 비동기로 처리한다는 점만 빼면 moveb 함수와 같게 동작하며, 모션이 시작되면 종료를 기다리지 않고 곧바로 다음 줄을 실행합니다.

amoveb() 모션이 끝나기 전에 새 모션 명령을 내리면 오류가 발생합니다. 다음 모션 명령을 내리기 전에 mwait()나 check_motion()으로 amoveb()가 끝났는지 확인하세요.

정의
DRFLEx.h, CDRFLEx 클래스의 public 섹션

bool amoveb(MOVE_POSB tTargetPos[MAX_MOVEB_POINT],
            unsigned char nPosCount,
            float fTargetVel[2],
            float fTargetAcc[2],
            float fTargetTime = 0.f,
            MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
            MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_BASE,
            DR_MV_APP eAppType = DR_MV_APP_NONE) {
    return _amoveb(_rbtCtrl, tTargetPos, nPosCount, fTargetVel, fTargetAcc,
                   fTargetTime, eMoveMode, eMoveReference, eAppType);
};

매개변수

매개변수 이름

자료형

기본값

설명

tTargetPos

MOVE_POSB [MAX_MOVEB_POINT]

경로 정보

nPosCount

unsigned char

유효한 경로 수입니다. nPosCount는 1~50이어야 합니다.

fTargetVel

float[2]

선속도, 각속도 [mm/s, deg/s]

fTargetAcc

float[2]

선가속도, 각가속도 [mm/s2, deg/s2]

fTargetTime

float

0.f

도달 시간 [sec]

eMoveMode

MOVE_MODE

MOVE_MODE_ABSOLUTE

열거형 정의를 참고하세요

eMoveReference

MOVE_REFERENCE

MOVE_REFERENCE_BASE

열거형 정의를 참고하세요

eAppType

DR_MV_APP

DR_MV_APP_NONE

열거형 정의를 참고하세요. 값을 받기는 하지만 컨트롤러로 보내지 않습니다.

참고

  • fTargetTime을 지정하면 fTargetVel을 무시하고 fTargetTime을 기준으로 모션을 처리합니다.

  • eMoveMode가 MOVE_MODE_RELATIVE이면 tTargetPos의 각 위치는 바로 앞 경로를 기준으로 한 상대 좌표로 정의됩니다.

  • 이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.

주의

  • tTargetPos의 블렌딩 반경이 0이면 사용자 입력 오류가 발생합니다.

  • 같은 방향의 Line 구간이 중복으로 정의되면 사용자 입력 오류가 발생합니다.

  • 블렌딩 조건 때문에 방향이 급격히 바뀌면, 급가속을 막기 위해 사용자 입력 오류가 발생합니다.

  • 이 함수는 이전 모션과 다음 모션의 온라인 블렌딩을 지원하지 않습니다.

반환값

값

설명

0

오류

1

성공

참고

로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.

예제

// 예: 블렌딩을 적용한 다중 구간 동작을 비동기로 실행합니다.
// 동작 시작 3초 후 디지털 출력 1이 ON 됩니다.
MOVE_POSB xb[4];
memset(xb, 0, sizeof(xb));
unsigned char seqNum = 4;
float tVel[2] = { 50, 50 };   // 선속도 / 각속도
float tAcc[2] = { 100, 100 }; // 선가속도 / 각가속도

xb[0]._iBlendType = 0;  // 직선
xb[0]._fBlendRad = 50;
xb[0]._fTargetPos[0][0] = 559;
xb[0]._fTargetPos[0][1] = 234.5;
xb[0]._fTargetPos[0][2] = 651.5;
xb[0]._fTargetPos[0][3] = 0;
xb[0]._fTargetPos[0][4] = 180;
xb[0]._fTargetPos[0][5] = 0;

xb[1]._iBlendType = 1;  // 원호
xb[1]._fBlendRad = 50;
xb[1]._fTargetPos[0][0] = 559;   // 경유점
xb[1]._fTargetPos[0][1] = 134.5;
xb[1]._fTargetPos[0][2] = 551.5;
xb[1]._fTargetPos[0][3] = 0;
xb[1]._fTargetPos[0][4] = 180;
xb[1]._fTargetPos[0][5] = 0;
xb[1]._fTargetPos[1][0] = 559;   // 끝점
xb[1]._fTargetPos[1][1] = 234.5;
xb[1]._fTargetPos[1][2] = 451.5;
xb[1]._fTargetPos[1][3] = 0;
xb[1]._fTargetPos[1][4] = 180;
xb[1]._fTargetPos[1][5] = 0;

xb[2]._iBlendType = 0;  // 직선
xb[2]._fBlendRad = 50;
xb[2]._fTargetPos[0][0] = 559;
xb[2]._fTargetPos[0][1] = 434.5;
xb[2]._fTargetPos[0][2] = 451.5;
xb[2]._fTargetPos[0][3] = 0;
xb[2]._fTargetPos[0][4] = 180;
xb[2]._fTargetPos[0][5] = 0;

xb[3]._iBlendType = 0;  // 직선
xb[3]._fBlendRad = 50;
xb[3]._fTargetPos[0][0] = 559;
xb[3]._fTargetPos[0][1] = 234.5;
xb[3]._fTargetPos[0][2] = 251.5;
xb[3]._fTargetPos[0][3] = 0;
xb[3]._fTargetPos[0][4] = 180;
xb[3]._fTargetPos[0][5] = 0;

// 비동기 동작 실행
drfl.amoveb(xb, seqNum, tVel, tAcc);

// 3초 후 출력 트리거
std::this_thread::sleep_for(std::chrono::seconds(3));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);

이 예제는 직선과 원호 경로로 이루어진 비동기 블렌딩 다중 구간 모션을 실행합니다. 모션이 시작되고 3초 후, 로봇이 계속 움직이는 동안 디지털 출력 1이 켜집니다.