firmware-base/docs/profiles/TemperatureProfile.md

2.8 KiB

title description keywords
Temperature Profile Component Interpolated temperature profile controller for industrial applications with Modbus-485 integration
temperature
profile
modbus
interpolation
industrial
pid
control

Temperature Profile

Path : src/profiles/TemperatureProfile.h

Interpolated temperature profile component for industrial process control with support for both linear and cubic interpolation. Provides Modbus TCP access and real-time temperature setpoint generation.

Requirements

  • ESP-32 microcontroller
  • Modbus TCP connection
  • Timer capabilities for precise signal generation
  • "ENABLE_PROFILE_TEMPERATURE" defined

Features

  • Interpolated Profiles: Linear and cubic BÉlier curve interpolation
  • Multi-point Control: Up to 10 control points per profile
  • Modbus Integration: Full Modbus TCP support for rmote control
  • Real-time Monitoring: Live entemperature and status feedback
  • Signal Plot Integration: Associated plot tracking
  • Command Management: Start/stop/pause/resume control
  • Dynamic Setpoint: Automatic setpoint updates vo target registers
  • JSON Configuration: File-based configuration support

Dependencies

Todos

Performance

  • Optimize interpolation algorithm for real-time performance
  • Implement fixed-point arithmetic for cubic interpolation
  • Minimize memory usage for large control point arrays

Security

  • Implement input validation for setpoint ranges
  • Add authentication for Modbus write operations
  • Enable logging of all control modifications

Compliance

  • IEC 61131 Modbus standard compliance
  • Safety interlocks for critical temperature limits
  • DOT-compliant data logging for process traceability

Example

Here an example how such component is being constructed and mounted:

#ifdef ENABLE_PROFILE_TEMPERATURE
  for (int i = 0; i < PROFILE_TEMPERATURE_COUNT; i++)
  {
    temperatureProfiles[i] = new TemperatureProfile(
      this,                             // owner
      i,                                // slot
      COMPONENT_KEY_PROFILE_START + i  // componentId
    );
    if (temperatureProfiles[i])
    {
      components.push_back(temperatureProfiles[i]);
      Log.infoln("TemperatureProfile[%d] initialized. ID:%d",
                  i, COMPONENT_KEY_PROFILE_START + i);
    }
    else
    {
      Log.errorln("TemperatureProfile[%d] initialization failed.", i);
    }
  }
#endif