drl_stop (자동 모드)

이 절에서는 자동(실행) 운전 중에 drl_stop으로 실행 중인 DRL(Doosan Robotics Language) 프로그램을 정지하는 방법을 설명합니다.

주로 drl_start로 시작한 작업 시퀀스를 중단할 때 사용하며, 외부 시스템(PC, PLC, MES, 비전 로직, 안전 로직)이 로봇의 DRL 실행을 멈출 시점을 제어할 수 있습니다.

drl_stop이 true를 반환하면 로봇은 수동 모드입니다. 다음 drl_start를 호출하기 전에 set_robot_mode(ROBOT_MODE_AUTONOMOUS)를 호출하세요. 실행 중이거나 일시 정지된 DRL 프로그램이 없거나 컨트롤러가 정지를 거부하면 drl_stop은 false를 반환하고 모드는 바뀌지 않습니다. 프로그램이 정지한 뒤에도 수동 모드가 확인되지 않거나 로봇이 고장 상태이면 drl_stop은 false를 반환합니다. false가 반환되면 get_program_state()와 get_robot_mode()를 확인하세요.

일반적인 사용법

  • 사이클을 중단해야 할 때 실행 중인 DRL 프로그램을 정지합니다.

  • 외부 UI/PLC 버튼(STOP / EMERGENCY STOP 대체 버튼)과 연동합니다.

참고

  • 프로그램의 모션은 항상 급정지(Quick Stop)합니다.

  • 0과 1은 프로그램을 일반 강제 정지로 종료하고, 2는 오류 정지로 종료합니다.

  • 이 함수는 DRL 프로그램이 실행 중이거나 일시 정지된 경우에만 성공합니다.

예제: 실행 중인 DRL 작업 정지하기

// 1) DRL 프로그램 실행 상태 확인
DRL_PROGRAM_STATE state = drfl.get_program_state();

// 2) 프로그램이 실행 중이거나 일시 정지 상태일 때만 정지
if (state == DRL_PROGRAM_STATE_PLAY ||
    state == DRL_PROGRAM_STATE_HOLD) {

    // STOP_TYPE_QUICK (1): 일반 강제 정지
    if (!drfl.drl_stop(STOP_TYPE_QUICK)) {
        printf("Failed to stop DRL program.\n");
        return -1;
    }

    printf("DRL program stopped.\n");
} else {
    printf("No active DRL program.\n");
}

이 예제는 현재 DRL 실행 상태를 확인하고, DRL 프로그램이 실행 중이거나 일시 정지된 경우에만 프로그램을 정지합니다. 이렇게 하면 외부 로직이 자동 작업 시퀀스를 중단할 수 있습니다.

팁

  • drl_pause와 함께 사용하면 단계별로 더 부드럽게 제어할 수 있습니다.

  • 디버깅과 추적성을 위해 정지 사유(센서 트리거, 작업자 요청, 안전 이벤트)를 기록하세요.