TOnMonitoringAccessControlCB

이 콜백은 로봇 컨트롤러의 제어권(Control Authority) 변화를 모니터링합니다. 제어권의 요청, 허가, 거부 같은 제어권 이벤트가 발생하면 호출됩니다.

콜백 함수 규칙을 참고하세요.

정의 위치: DRFLEx.h

// typedef 정의(DRFL.h)
typedef void (*TOnMonitoringAccessControlCB)(const MONITORING_ACCESS_CONTROL);

// 내부 정의
DRFL_API void _set_on_monitoring_access_control(LPROBOTCONTROL pCtrl, TOnMonitoringAccessControlCB pCallbackFunc);

// 사용자 호출용 API
void set_on_monitoring_access_control(TOnMonitoringAccessControlCB pCallbackFunc)
{
    _set_on_monitoring_access_control(_rbtCtrl, pCallbackFunc);
};

매개변수

매개변수 이름

자료형

기본값

설명

eAccCtrl

MONITORING_ACCESS_CONTROL

제어권 이벤트 상태(예: REQUEST, PERMISSION, REJECTION)를 나타냅니다.

반환값
없음

예제

#include "DRFLEx.h"
#include <iostream>
#include <thread>
#include <chrono>
using namespace DRAFramework;
using namespace std;

CDRFLEx drfl;

// 제어권 이벤트 발생 시 실행되는 콜백 함수
void OnMonitoringAccessControlCB(const MONITORING_ACCESS_CONTROL eAccCtrl)
{
    cout << "[ACCESS CONTROL EVENT]" << endl;

    switch (eAccCtrl)
    {
        case MONITORING_ACCESS_CONTROL_REQUEST:
            cout << "Received control transfer request." << endl;

            // 예: 요청을 수락해 요청자(예: 티치펜던트)가 제어권을 갖도록 함
            drfl.manage_access_control(MANAGE_ACCESS_CONTROL_RESPONSE_YES);
            break;

        case MONITORING_ACCESS_CONTROL_GRANT:
            cout << "Control has been granted." << endl;
            break;

        case MONITORING_ACCESS_CONTROL_DENY:
            cout << "Control request has been denied." << endl;
            break;

        default:
            cout << "Unknown access control state (" << (int)eAccCtrl << ")" << endl;
            break;
    }
}

int main()
{
    // 로봇 컨트롤러에 연결
    if (!drfl.open_connection("192.168.137.100")) {
        cout << "Failed to connect to controller." << endl;
        return -1;
    }

    // 제어권 이벤트 콜백 함수 등록
    drfl.set_on_monitoring_access_control(OnMonitoringAccessControlCB);

    // 모니터링 유지
    while (true)
        std::this_thread::sleep_for(std::chrono::seconds(1));

    drfl.close_connection();
    return 0;
}

참고

  • 로봇 컨트롤러는 다음 경우에 이 콜백을 호출합니다.
    - 다른 장치나 사용자가 제어권 이전을 요청할 때
    - 컨트롤러가 제어권을 허가하거나 거부할 때

  • 매개변수 MONITORING_ACCESS_CONTROL는 이벤트 유형을 나타냅니다.

  • 일반적인 사용 사례:
    - 외부 제어 요청을 자동으로 거부합니다.
    - 제어 상태 변화를 기록하거나 작업자에게 알립니다.
    - 협동 로봇 운용 환경을 처리합니다.

  • 제어권은 요청이 있을 때만 넘어갑니다. 다른 클라이언트(예: 티치펜던트)가 제어권을 요청하면 제어권을 가진 쪽이 TOnMonitoringAccessControlCB로 MONITORING_ACCESS_CONTROL_REQUEST를 받습니다. 다른 클라이언트가 MANAGE_ACCESS_CONTROL_REQUEST를 보내면, 제어권을 가진 쪽이 manage_access_control(MANAGE_ACCESS_CONTROL_RESPONSE_YES)로 응답해야만 제어권이 넘어갑니다. 이때 요청한 쪽은 GRANT를, 제어권을 가졌던 쪽은 LOSS를 받습니다. 제어권을 가진 쪽이 MANAGE_ACCESS_CONTROL_RESPONSE_NO로 응답하거나 응답하지 않으면 요청한 쪽은 제어권을 얻지 못하며, 첫 요청이 처리되지 않은 동안에는 이후 요청이 전달되지 않습니다. 요청 없이 제어권을 내려놓는 함수는 없습니다. manage_access_control은 요청을 보내자마자 반환하고, 결과는 나중에 TOnMonitoringAccessControlCB로 전달됩니다. 애플리케이션이 티치펜던트에 제어권을 넘겨야 한다면 REQUEST에 RESPONSE_YES로 응답하세요. MANAGE_ACCESS_CONTROL_FORCE_REQUEST를 보내는 클라이언트는 응답 없이 제어권을 가져갑니다.