이전 버전(1.33.4)의 문서를 보고 있습니다. 이 버전은 계속 지원됩니다.
최신 버전 정보는 1.33.5에서 확인하세요.

get_robot_mode

이 CDRFLEx 인스턴스에 저장된 모드를 반환합니다(초기값 ROBOT_MODE_MANUAL). set_robot_mode는 요청한 모드를 저장합니다. 컨트롤러에 안전 모드를 보내는 호출도 컨트롤러가 받아들이면 모드를 저장합니다. drl_stop은 수동 모드를 저장하고, set_safety_mode와 set_robot_control의 초기화/복구 옵션은 자신이 보낸 안전 모드를 저장하며, multi_jog, 모션 명령, 힘 제어(Force Control) 명령은 현재 안전 모드를 저장합니다. 저장된 모드는 컨트롤러에서 읽어 온 값이 아닙니다. 컨트롤러가 이미 자동 모드이더라도 자동 모드 전용 함수를 호출하기 전에 set_robot_mode(ROBOT_MODE_AUTONOMOUS)를 호출하세요. 컨트롤러가 모드 변경을 받아들였는지 확인하려면 set_robot_mode의 반환값을 확인하세요.

자동 모드는 순서대로 구성한 모션(프로그램)을 자동으로 실행하고, 수동 모드는 조그 같은 단일 모션을 실행합니다.

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

ROBOT_MODE get_robot_mode() { return _get_robot_mode(_rbtCtrl); };

매개변수
없음

반환값

값

설명

ROBOT_MODE

열거형 정의를 참고하세요

주의

set_robot_mode는 false를 반환하더라도 요청한 모드를 저장합니다. 그러면 get_robot_mode가 요청한 모드를 반환하고, 컨트롤러의 모드가 바뀌지 않았는데도 자동 모드나 수동 모드가 필요한 함수가 호출을 받아들입니다. set_robot_mode가 false를 반환하면 이후 set_robot_mode 호출이 true를 반환할 때까지 모드 제한이 있는 함수를 사용하지 마세요.

예제

#include <thread>
#include <chrono>

string strDrProgram = "\r\n"
                      "loop = 0\r\n"
                      "while loop < 3:\r\n"
                      "    movej(posj(10,10,10,10,10,10), vel=60, acc=60)\r\n"
                      "    movel(posx(559, 434.5, 651.5, 0, 180, 0), vel=60, acc=60)\r\n"
                      "    loop=loop+1\r\n"
                      "movej(posj(10,10,10,10,10,10), vel=60, acc=60)\r\n";

if (drfl.get_robot_state() == STATE_STANDBY) {
    if (drfl.get_robot_mode() == ROBOT_MODE_MANUAL) {
        // 수동 모드
        drfl.jog(JOG_AXIS_JOINT_3, MOVE_REFERENCE_BASE, 10.0f);  // 조그 시작
        std::this_thread::sleep_for(std::chrono::seconds(2));
        drfl.jog(JOG_AXIS_JOINT_3, MOVE_REFERENCE_BASE, 0.0f);   // 조그 정지
    }
    else {
        // 자동 모드
        ROBOT_SYSTEM eTargetSystem = ROBOT_SYSTEM_VIRTUAL;
        drfl.drl_start(eTargetSystem, strDrProgram);
    }
}

이 예제는 로봇의 운용 모드(Operation Mode)를 확인하고 모드에 따라 다른 동작을 합니다. 수동 모드에서는 짧은 조그 모션을 실행하고, 자동 모드에서는 미리 정의한 DRL 프로그램을 순서대로 실행합니다.