amove_spiral (자동 모드)
이 함수는 move_spiral의 비동기 버전입니다. 나선 모션을 시작한 다음 완료를 기다리지 않고 바로 반환합니다. 나선 모션이 백그라운드에서 계속되는 동안 프로그램의 다른 줄을 실행할 수 있습니다. amove_spiral()이 끝나기 전에 새 모션 명령을 내리면 오류가 발생할 수 있으므로, 안전하게 순서를 지키려면 모션 사이에 mwait()를 사용하는 것을 권장합니다.
정의(최대 반경/길이)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amove_spiral(TASK_AXIS eTaskAxis,
float fRevolution,
float fMaximuRadius,
float fMaximumLength,
float fTargetVel[2],
float fTargetAcc[2],
float fTargetTime = 0.f,
MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL) {
return _amove_spiral(_rbtCtrl, eTaskAxis, fRevolution, fMaximuRadius,
fMaximumLength, fTargetVel, fTargetAcc,
fTargetTime, eMoveReference);
};
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
eTaskAxis |
나선 면에 수직인 축(나선이 회전하는 평면을 정의) |
||
fRevolution |
float |
나선의 총 회전 수 [revolutions] |
|
fMaximuRadius |
float |
나선의 최종 반경 [mm] |
|
fMaximumLength |
float |
축 방향으로 이동하는 거리 [mm] (음수 = 반대 방향) |
|
fTargetVel |
float[2] |
선속도와 각속도 [mm/s, deg/s] |
|
fTargetAcc |
float[2] |
선가속도와 각가속도 [mm/s2, deg/s2] |
|
fTargetTime |
float |
0.0 |
총 모션 실행 시간 [sec] |
eMoveReference |
|
나선 모션의 기준 좌표계(BASE / TOOL) |
정의(목표 위치)
DRFLEx.h, CDRFLEx 클래스의 public 섹션
bool amove_spiral(TASK_AXIS eTaskAxis,
float fRevolution,
float fTargetPos[3],
float fTargetVel[2],
float fTargetAcc[2],
float fTargetTime = 0.f,
MOVE_REFERENCE eMoveReference = MOVE_REFERENCE_TOOL,
MOVE_MODE eMoveMode = MOVE_MODE_ABSOLUTE,
SPIRAL_DIR eSpiralDir = DR_SPIRAL_OUTWARD,
ROT_DIR eRotDir = DR_ROT_FORWARD) {
return _amove_spiral_ex(_rbtCtrl, eTaskAxis, fRevolution, fTargetPos,
fTargetVel, fTargetAcc, fTargetTime, eMoveReference,
eMoveMode, eSpiralDir, eRotDir);
};
이 오버로드는 최대 반경과 길이 대신 X, Y, Z 좌표로 나선의 끝점을 정의합니다. 또한 나선 방향, 회전 방향, 이동 모드(절대/상대)를 제어할 수 있습니다. 내부적으로 _amove_spiral 대신 _amove_spiral_ex를 호출합니다.
매개변수
매개변수 이름 |
자료형 |
기본값 |
설명 |
|---|---|---|---|
eTaskAxis |
나선 면에 수직인 축(나선이 회전하는 평면을 정의) |
||
fRevolution |
float |
나선의 총 회전 수 [revolutions] |
|
fTargetPos |
float[3] |
X, Y, Z 좌표로 나타낸 목표 지점 [mm] |
|
fTargetVel |
float[2] |
선속도와 각속도 [mm/s, deg/s] |
|
fTargetAcc |
float[2] |
선가속도와 각가속도 [mm/s2, deg/s2] |
|
fTargetTime |
float |
0.0 |
총 모션 실행 시간 [sec] |
eMoveReference |
|
나선 모션의 기준 좌표계(BASE / TOOL) |
|
eMoveMode |
|
이동 기준(절대 또는 상대) |
|
eSpiralDir |
|
나선의 반경 방향 |
|
eRotDir |
|
축을 중심으로 한 회전 방향 |
참고
fRevolution은 나선 경로의 회전 수를 정합니다.fMaximuRadius는 모션 중 도달하는 가장 바깥쪽 반경을 지정합니다.fMaximumLength는 나선 축을 따라 이동하는 거리를 나타냅니다.fTargetVel과fTargetAcc는 선속도/각속도 모션 프로파일을 정합니다.fTargetTime을 설정하면 나선 모션이 시간 기준으로 제어되며,fTargetVel과fTargetAcc는 모두 무시됩니다.eTaskAxis는 나선이 넓어지는 평면을 결정합니다(예: Z축을 선택하면 XY 평면).eMoveReference는 모션의 기준을 BASE 좌표계로 할지 TOOL 좌표계로 할지 결정합니다.다음 명령을 실행하기 전에 반드시
mwait()로 모션 종료를 확인해야 합니다.다른 모션과의 온라인 블렌딩은 지원하지 않습니다.
주의
계산된 나선의 각가속도가 안전 임계값을 넘으면 안전 오류가 발생합니다. 이를 막으려면
fTargetVel이나fTargetAcc를 줄이거나fTargetTime을 늘리세요.
반환값
값 |
설명 |
|---|---|
0 |
오류 |
1 |
성공 |
참고
로봇이 STATE_EMERGENCY_STOP, STATE_SAFE_OFF, STATE_SAFE_OFF2, STATE_SAFE_STOP, STATE_SAFE_STOP2 상태이면 메시지 없이 false를 반환합니다.
예제
#include <thread>
#include <chrono>
// 나선 동작 시작 3초 후 D-Out 신호 출력
float rev = 3; // 회전 수
float rmax = 30; // 최대 반경[mm]
float lmax = 50; // Z축 방향 길이[mm]
float tvel[2] = {50, 50};
float tacc[2] = {100, 100};
drfl.amove_spiral(TASK_AXIS_Z, rev, rmax, lmax, tvel, tacc);
std::this_thread::sleep_for(std::chrono::milliseconds(3000));
drfl.set_digital_output(GPIO_CTRLBOX_DIGITAL_INDEX_1, true);
이 예제는 TOOL 좌표계의 Z축을 따라 비동기 나선 모션을 실행합니다. 나선 반경을 30 mm까지 점차 넓히면서 50 mm 올라갑니다. 모션이 시작되고 3초 후 디지털 출력이 켜지며, 이후 명령은 mwait()로 완료를 기다린 다음 실행해야 합니다.