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

get_program_state (자동 모드)

이 절에서는 자동(실행) 운전 중에 get_program_state로 현재 실행 중인 DRL(Doosan Robotics Language) 프로그램의 실행 상태를 모니터링하는 방법을 설명합니다.

이 함수는 견고한 자동화 로직을 구성하는 데 꼭 필요합니다. 외부 애플리케이션은 로봇이 실행 중인지, 일시 정지되었는지, 정지되었는지 판단하고 그에 맞게 대응할 수 있습니다.

이 CDRFLEx 인스턴스가 시작한 프로그램의 상태를 반환합니다. 연결 직후에는 DRL_PROGRAM_STATE_LAST, drl_start 후에는 DRL_PROGRAM_STATE_PLAY, drl_pause와 drl_resume 후에는 각각 DRL_PROGRAM_STATE_HOLD와 DRL_PROGRAM_STATE_PLAY, 컨트롤러가 프로그램 정지를 보고하면 DRL_PROGRAM_STATE_STOP을 반환합니다. 티치펜던트나 다른 클라이언트에서 시작한 프로그램은 반영되지 않습니다. DRL_PROGRAM_STATE_PLAY가 컨트롤러에서 프로그램이 시작되었음을 확인해 주지는 않습니다.

일반적인 사용법

  • 로봇이 DRL 작업을 실제로 실행 중인지 확인합니다.

  • 프로그램이 일시 정지된 시점을 감지해 검사나 작업자 작업 흐름을 시작합니다.

  • 프로그램이 완료나 중단으로 정지된 시점을 판단합니다.

  • drl_pause, drl_resume, drl_stop을 사용해 분기 로직을 구성합니다.

참고

  • 일반적인 상태는 다음과 같습니다. - DRL_PROGRAM_STATE_STOP - DRL_PROGRAM_STATE_PLAY - DRL_PROGRAM_STATE_HOLD

  • 실행 중인 DRL 프로그램이 없으면 상태는 보통 STOP입니다.

예제: 현재 프로그램 실행 상태에 따라 대응하기

DRL_PROGRAM_STATE state = drfl.get_program_state();

switch (state) {
    case DRL_PROGRAM_STATE_PLAY:
        // 프로그램이 실행 중이면 정지
        drfl.drl_stop(0);
        printf("Program was running. Requested stop.\n");
        break;

    case DRL_PROGRAM_STATE_HOLD:
        // 일시 정지 상태이면 실행 재개
        drfl.drl_resume();
        printf("Program was paused. Resumed execution.\n");
        break;

    case DRL_PROGRAM_STATE_STOP:
    default:
        printf("No active DRL program.\n");
        break;
}

이 예제에서는 외부 애플리케이션이 현재 DRL 프로그램 상태를 확인하고, 정지나 재개 같은 적절한 동작을 하거나 실행 중인 프로그램이 없음을 확인만 합니다.

팁

  • 로봇 상태에 맞춰 동작하는 “스마트” 자동화 흐름을 구현할 때 유용합니다.

  • 외부 시스템(비전, 컨베이어, 센서)을 로봇 실행과 동기화하는 데 도움이 됩니다.

  • 자동 모드 중에 주기적으로 호출해 프로그램을 실시간으로 추적하세요.

  • get_last_alarm과 함께 사용하면 프로그램이 STOP으로 전환된 이유를 파악할 수 있습니다.