TOnMonitoringStateCB

이 콜백 함수로 로봇 컨트롤러의 운용 상태 변화를 확인합니다.

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

정의 위치: DRFLEx.h

typedef void (*TOnMonitoringStateCB)(const ROBOT_STATE);

void set_on_monitoring_state(TOnMonitoringStateCB pCallbackFunc)
{
    _set_on_monitoring_state(_rbtCtrl, pCallbackFunc);
};

매개변수

매개변수 이름

자료형

기본값

설명

eState

ROBOT_STATE

열거형 정의를 참고하세요.

반환값
없음

예제

#include "DRFLEx.h"
#include <atomic>
#include <chrono>
#include <cstdio>
#include <thread>
using namespace DRAFramework;

std::atomic<bool> g_bNeedServoOn(false);

// 콜백 함수: 로봇의 운용 상태가 바뀔 때마다 호출됩니다
void OnMonitoringStateCB(const ROBOT_STATE eState)
{
    switch ((unsigned char)eState)
    {
        case STATE_SAFE_OFF:
            printf("[STATE] SAFE OFF detected. Servo on is requested from the main loop.\n");
            g_bNeedServoOn = true;
            break;

        case STATE_STANDBY:
            printf("[STATE] Robot is now standby and ready.\n");
            break;

        case STATE_MOVING:
            printf("[STATE] Robot is executing motion.\n");
            break;

        case STATE_SAFE_STOP:
            printf("[STATE] Robot is in safe stop.\n");
            break;

        default:
            printf("[STATE] Unknown or transitional state: %d\n", eState);
            break;
    }
}

int main()
{
    CDRFLEx drfl;

    // 로봇 컨트롤러에 연결
    drfl.open_connection("192.168.137.100");

    // 로봇 상태 모니터링 콜백 함수 등록
    drfl.set_on_monitoring_state(OnMonitoringStateCB);

    // 상태 전환을 관찰하도록 프로그램 실행 유지
    while (true)
    {
        // set_robot_control은 콜백 함수 밖에서 호출
        if (g_bNeedServoOn)
        {
            g_bNeedServoOn = false;
            drfl.set_robot_control(CONTROL_SERVO_ON);
        }
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    drfl.close_connection();
    return 0;
}

참고

  • 로봇 상태가 전환될 때마다 컨트롤러가 이 콜백을 자동으로 호출합니다.

  • 주로 STATE_SAFE_OFF 이후 서보 켜기, 상태 변화 기록, GUI 표시기 갱신에 사용합니다.

  • set_robot_control은 콜백 밖에서 호출하세요.