TOnMonitoringModbusCB

이 콜백 함수로 로봇 컨트롤러에 등록된 Modbus I/O 상태 데이터를 확인합니다.

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

정의 위치: DRFLEx.h

// typedef 정의(DRFL.h)
typedef void (*TOnMonitoringModbusCB)(const LPMONITORING_MODBUS);

// 등록 API(내부 + 래퍼)
DRFL_API void _set_on_monitoring_modbus(LPROBOTCONTROL pCtrl, TOnMonitoringModbusCB pCallbackFunc);
void set_on_monitoring_modbus(TOnMonitoringModbusCB pCallbackFunc)
{
    _set_on_monitoring_modbus(_rbtCtrl, pCallbackFunc);
};

매개변수

매개변수 이름

자료형

기본값

설명

pModbus

MONITORING_MODBUS

Modbus 레지스터 심볼과 값을 담은 구조체의 포인터입니다.

반환값
없음

예제

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

// 콜백 함수: Modbus 모니터링 데이터가 갱신되면 호출됩니다
void OnMonitoringModbusCB(const LPMONITORING_MODBUS pModbus)
{
    if (!pModbus) return;

    cout << "[MODBUS] register count = " << pModbus->_iRegCount << endl;

    // 각 항목에는 심볼(이름)과 현재 값이 들어 있습니다
    for (int i = 0; i < pModbus->_iRegCount; ++i)
    {
        // 구조체 이름을 기준으로 한 필드 예시
        //   _tRegister[i]._szSymbol  → 레지스터 이름
        //   _tRegister[i]._iValue    → 레지스터 값
        cout << "  " << pModbus->_tRegister[i]._szSymbol
             << " : " << pModbus->_tRegister[i]._iValue << endl;
    }
}

int main()
{
    CDRFLEx drfl;

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

    // Modbus 모니터링 콜백 함수 등록
    drfl.set_on_monitoring_modbus(OnMonitoringModbusCB);

    // Modbus 갱신을 수신하도록 프로세스 실행 유지
    while (true)
        std::this_thread::sleep_for(std::chrono::seconds(1));

    drfl.close_connection();
    return 0;
}

참고

  • 이 콜백으로 Modbus 대시보드, 알람 규칙, 데이터 로깅 파이프라인을 만들 수 있습니다.

  • I/O 상태(GPIO) 모니터링은 TOnMonitoringCtrlIOCB와 그 EX 버전을 참고하세요.

  • 콜백은 호출될 때마다 가장 최근 데이터를 받습니다. 콜백 실행 시간이 데이터 주기(DRCF 3.5 이전 100 ms, DRCF 3.5부터 20 ms)보다 길면 그 사이의 샘플은 전달되지 않습니다. 모든 샘플을 받는다고 가정하지 마세요(예: 적분이나 미분).