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 |
|
열거형 정의를 참고하세요 |
|
eMoveReference |
|
열거형 정의를 참고하세요 |
|
eAppType |
|
열거형 정의를 참고하세요. 값을 받기는 하지만 컨트롤러로 보내지 않습니다. |
참고
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이 켜집니다.