최신 버전 정보는 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으로 전환된 이유를 파악할 수 있습니다.