.. _manual_set_on_monitoring_modbus: set_on_monitoring_modbus (Manual Mode) ------------------------------------------ This section explains how to use :ref:`set_on_monitoring_modbus ` during **Manual (Teach)** operations to **register a callback function** that monitors **Modbus I/O data** exchanged between the robot controller and external devices such as PLCs or inverters in real time. **Typical usage** - Observe Modbus coil/register states for debugging communication. - Monitor real-time signals (e.g., READY, RUN, FAULT, SPEED) from an external PLC or inverter. - Log Modbus traffic and diagnose incorrect addresses or value updates. .. Note:: - The callback is triggered whenever Modbus data (coil, discrete input, holding, or input register) changes. - Must be registered **after establishing a connection** and after Modbus symbols are defined using :ref:`add_modbus_signal(Manual Mode) `. **Example: Register and handle Modbus monitoring callback** .. code-block:: cpp // 1) Define callback function void OnMonitoringModbus(const LPMONITORING_MODBUS pModbusData) { for (int i = 0; i < pModbusData->_iRegCount; ++i) { printf("[Modbus Monitor] Symbol: %s | Value: %u\n", pModbusData->_tRegister[i]._szSymbol, pModbusData->_tRegister[i]._iValue); } } // Preconditions: // - Connection established (open_connection) // - Manual (Teach) mode active // - Modbus signals registered via add_modbus_signal() // 2) Register callback for Modbus monitoring drfl.set_on_monitoring_modbus(OnMonitoringModbus); printf("[Modbus] Monitoring callback registered.\n"); // 3) Keep program running to receive updates while (true) { std::this_thread::sleep_for(std::chrono::seconds(1)); } **Tips** - See :ref:`Rules for callback functions `. - Ensure all Modbus tags are registered and reachable to receive consistent monitoring events. - Unregister or stop monitoring before disconnecting from the robot controller to avoid dangling callbacks.