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

2.4 콜백 함수

이 절에서는 DRFL이 지원하는 콜백 함수 형식을 설명합니다. 콜백 정의는 이벤트 기반 통신에 쓰는 함수 시그니처를 지정하며, 사용자 애플리케이션은 이를 통해 로그, 모니터링 데이터, 안전 이벤트 같은 로봇 갱신 정보를 비동기로 받을 수 있습니다.

콜백 함수 규칙

라이브러리는 이벤트가 발생하면 해당 콜백을 자동으로 호출합니다. 콜백 안의 코드는 짧게 유지하고, 데이터 주기(DRCF 3.5 이전 100 ms, DRCF 3.5부터 20 ms) 안에 충분히 여유 있게 반환하세요. 필요한 데이터는 복사해 두고 콜백 밖에서 처리하세요. RT 콜백 TOnRTMonitoringDataCB는 데이터 주기 대신 set_rt_control_output으로 설정한 출력 주기를 따릅니다.

상태, 알람, 제어권, TP, 마스터링, 프로그램 정지, 안전 상태, 안전 정지 유형, 로봇 시스템, 원점 복귀(Homing), TP 초기화 콜백 안에서는 컨트롤러의 데이터를 기다리는 함수(예: get_current_posx, get_desired_posx, fkin, ikin, trans, coord_transform, get_user_home)나 drl_stop을 호출하지 마세요. 호출이 반환되지 않고, 이후 콜백도 더 이상 전달되지 않습니다. 이 콜백 안에서 get_system_version을 호출하면 약 5초 뒤 false를 반환합니다. 컨트롤러가 명령을 수락하기만 기다리는 명령(예: set_robot_mode, move_home)은 컨트롤러가 응답하면 반환합니다. 약 6초 안에 응답이 없으면 컨트롤러가 명령을 확인하지 않았더라도 true를 반환합니다. 이 호출은 모두 기다리는 동안 콜백을 붙잡아 둡니다. 필요한 데이터는 복사해 두고 콜백 밖에서 처리하세요. 이 콜백들은 차례로 호출되므로, 느린 콜백이 있으면 그 뒤의 콜백도 늦어집니다.

콜백 함수에서 예외가 밖으로 빠져나가면 안 됩니다. 콜백 안에서 모든 예외를 잡으세요.

CDRFLEx 객체는 동시 호출을 지원하지 않습니다. 콜백에서 하는 호출을 포함해, 한 객체에 대한 호출은 한 번에 하나씩 하세요.

연결이 종료되면(close_connection, 연결 끊김, 이미 연결된 객체에서 open_connection 호출) set_on_* 함수로 등록한 콜백의 등록이 모두 해제됩니다. 단, set_on_disconnected, set_on_monitoring_ctrl_io_ex(기본값인 DRCF_VERSION 3일 때), set_on_rt_monitoring_data, set_on_rt_log_alarm으로 등록한 콜백은 등록이 유지됩니다. open_connection이 성공할 때마다 나머지 콜백을 다시 등록하고 setup_monitoring_version을 다시 호출하세요.