firmware-base/docs-c/modbus/ModbusRTU.md
2025-06-04 16:43:41 +02:00

4.5 KiB

title description keywords
ModbusRTU - Industrial Modbus-485 RTU Interface A robust Modbus RTU interface for ESP32 industrial applications
modbus
modbus-rtu
rs485
industrial
esp32
communication

ModbusRTU

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.

REQUIREMENTS

  • 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

PROVIDES

  • 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

FEATURES

  • 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

DEPENDENCIES

graph TD
    ModbusRTU --> Arduino
    ModbusRTU --> ModbusClientRTU
    ModbusRTU --> HardwareSerial
    ModbusRTU --> ArduinoLog
    ModbusRTU --> ModbusTypes
    Manager --> ArduinoLog
    Manager --> ModbusTypes
    Manager --> ModbusRTU

BEHAVIOUR

stateDiagram-v2
    [*] --> INIT_NOT_STARTED
    INIT_NOT_STARTED --> INIT_SERIAL_STARTED: begin()
    INIT_SERIAL_STARTED --> INIT_CLIENT_STARTED: Serial init delay elapsed
    INIT_CLIENT_STARTED --> INIT_READY: Client init delay elapsed
    INIT_READY --> [*]: end()
    
    INIT_NOT_STARTED --> INIT_FAILED: Error
    INIT_SERIAL_STARTED --> INIT_FAILED: Error
    INIT_CLIENT_STARTED --> INIT_FAILED: Error
    
    state Operations {
        [*] --> Idle
        Idle --> QueueOperation: Read/Write request
        QueueOperation --> FilterOperation: Apply filters
        FilterOperation --> ExecuteOperation: If passed filters
        FilterOperation --> Idle: If rejected
        ExecuteOperation --> WaitForResponse: Operation sent
        WaitForResponse --> ProcessResponse: Response received
        WaitForResponse --> HandleError: Timeout/Error
        ProcessResponse --> Idle: Update cache
        HandleError --> Retry: If retries < max
        HandleError --> Idle: If max retries exceeded
        Retry --> ExecuteOperation: After backoff
    }
    
    INIT_READY --> Operations: Ready for operations

TODOS

PERFORMANCE

  • 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

SECURITY

  • Implement authentication mechanisms for secure Modbus communication
  • Add validation for incoming data values to prevent exploitation
  • Consider adding packet encryption for sensitive industrial applications

COMPLIANCE

  • 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

RECOMMENDATIONS

  • 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)