Skip to content

Modbus Logic Engine

Path: src/ModbusLogicEngine.cpp

Revision History: Initial documentation

The Modbus Logic Engine is a programmable rule engine that allows defining conditional logic rules through Modbus registers. It evaluates conditions on register values and executes actions when conditions are met, providing automation capabilities without requiring firmware modifications.

  • ESP-32 microcontroller
  • Platform.io development environment
  • Modbus TCP/RTU implementation
  • Feature flag ENABLE_MB_SCRIPT must be defined in configuration
  • Rules-based automation through Modbus registers
  • Configurable conditions with multiple comparison operators
  • Multiple action types including:
    • Writing to Modbus registers
    • Setting coils
    • Calling component methods
  • Debug flags for troubleshooting
  • Rule status monitoring and counters
  • Configurable evaluation interval

ModbusLogicEngine

Component

ModbusTypes

PHApp

ArduinoLog

The Modbus Logic Engine continuously evaluates rules at a configurable interval, checking conditions against Modbus register values and executing actions when conditions are met.

Interval elapsed

Condition met

Condition not met

All rules processed

Initialization

Idle

EvaluateRules

CheckCondition

PerformAction

  • Consider adding a priority system for rules that need faster evaluation
  • Optimize condition evaluation by caching register values when multiple rules reference the same address
  • Implement batch processing for rules that write to sequential registers
  • Consider adding authentication for modifying rule configurations
  • Implement range checking for target addresses to prevent unauthorized access
  • Add validation for rule parameters to prevent malformed rules
  • Ensure rule execution timing meets industrial control requirements
  • Document rule format for compliance with automation standards
  • Implement logging capabilities for audit trails in regulated environments
  • Use separate register blocks for different rule sets to improve organization
  • Implement a backup/restore mechanism for rule configurations
  • Consider a graphical rule editor for easier configuration
  • Add rule dependencies to allow chaining of rules

The Modbus Logic Engine is typically constructed early in the application startup:

#ifdef ENABLE_MB_SCRIPT
modbusLogicEngine = new ModbusLogicEngine(
this // Owner (PHApp instance)
);
if (modbusLogicEngine) {
components.push_back(modbusLogicEngine);
Log.infoln(F("ModbusLogicEngine initialized."));
// Register component methods that can be called from rules
modbusLogicEngine->registerMethod(
COMPONENT_ID_LED, // Component ID
1, // Method ID
[this](short arg1, short arg2) -> short {
// Example method implementation
if (ledComponent) {
return ledComponent->setPattern(arg1);
}
return E_COMPONENT_ERROR;
}
);
} else {
Log.errorln(F("ModbusLogicEngine initialization failed."));
}
#endif