Skip to content

ModbusRTU - Industrial Modbus-485 RTU Interface

Path: src/modbus/ModbusRTU.h

Revision History: Initial documentation

ModbusRTU is a comprehensive class that provides a robust interface for Modbus RTU communication over RS-485. It is designed for industrial applications on ESP32, offering efficient queue management, adaptive timeouts, and extensive error handling capabilities.

  • Hardware:

    • ESP32 microcontroller
    • RS-485 transceiver (with DE/RE pin for direction control)
    • Serial interface for communication
  • Software:

    • Arduino framework
    • ModbusClientRTU library
    • HardwareSerial for serial communication
    • ArduinoLog for logging
  • Enumerations:

    • E_InitState: Tracks initialization states (INIT_NOT_STARTED, INIT_SERIAL_STARTED, INIT_CLIENT_STARTED, INIT_READY, INIT_FAILED)
  • Classes:

    • ModbusRTU: Main class for Modbus RTU communication
    • Manager: Device management class for handling multiple Modbus slave devices
  • Non-blocking initialization and operation
  • Flexible queue management with priority levels
  • Read/write operations for coils and registers (single and multiple)
  • Automatic value caching with synchronization status tracking
  • Comprehensive error handling and retry mechanisms
  • Adaptive minimum operation interval to adjust for network conditions
  • Filter chain for operation validation and duplicate prevention
  • Callback system for register changes, write completions, and error handling
  • Status reporting and debugging utilities

ModbusRTU

Arduino

ModbusClientRTU

HardwareSerial

ArduinoLog

ModbusTypes

Manager

begin()

Serial init delay elapsed

Client init delay elapsed

end()

Error

Error

Error

Ready for operations

INIT_NOT_STARTED

INIT_SERIAL_STARTED

INIT_CLIENT_STARTED

INIT_READY

INIT_FAILED

Operations

Read/Write request

Apply filters

If passed filters

If rejected

Operation sent

Response received

Timeout/Error

Update cache

If retries < max

If max retries exceeded

After backoff

Idle

QueueOperation

FilterOperation

ExecuteOperation

WaitForResponse

ProcessResponse

HandleError

Retry

  • Consider buffer pooling for multiple register operations to reduce memory fragmentation
  • Implement batch processing for adjacent registers to reduce number of transactions
  • Explore more granular timeouts for different device types or operation types
  • Implement authentication mechanisms for secure Modbus communication
  • Add validation for incoming data values to prevent exploitation
  • Consider adding packet encryption for sensitive industrial applications
  • Ensure full compliance with Modbus RTU protocol specification
  • Add support for additional function codes to cover all Modbus operations
  • Implement proper exception code handling according to the standard
  • Monitor operation success rates and adjust retry limits based on network reliability
  • Configure adaptive timeouts based on device response characteristics
  • Implement device-specific wrappers for common industrial equipment
  • Use high priority flag for critical operations (safety or timing-sensitive commands)