Class ControllerDataExchange

java.lang.Object
neqsim.process.mpc.ControllerDataExchange
All Implemented Interfaces:
Serializable

public class ControllerDataExchange extends Object implements Serializable
Provides a real-time data exchange interface between NeqSim MPC and external control systems.

This class enables bidirectional communication with industrial control systems by providing a standardized interface for reading process values, writing setpoints and constraints, and exchanging model data. The interface is designed to work with common industrial protocols and data historians.

Key features:

  • Timestamped data vectors for MVs, CVs, and DVs
  • Status flags for variable quality (good, bad, uncertain)
  • Setpoint and constraint updates from external sources
  • Model refresh triggers for adaptive control
  • Execution status and diagnostics

The data exchange pattern supports both push and pull models:

Example integration with an external control system:


// Create data exchange interface
ControllerDataExchange exchange = mpc.createDataExchange();

// Periodic execution loop
while (running) {
  // Read current values from plant (via OPC, historian, etc.)
  double[] mvValues = readMVsFromPlant();
  double[] cvValues = readCVsFromPlant();
  double[] dvValues = readDVsFromPlant();

  // Update controller inputs
  exchange.updateInputs(mvValues, cvValues, dvValues);

  // Check for setpoint changes from operator
  if (operatorChangedSetpoints) {
    exchange.updateSetpoints(newSetpoints);
  }

  // Execute control calculation
  exchange.execute();

  // Get outputs and write to plant
  ControllerOutput output = exchange.getOutputs();
  writeMVsToPlant(output.getMvTargets());

  // Wait for next sample
  Thread.sleep(sampleTimeMs);
}

Since:
3.0
Version:
1.0
Author:
Even Solbraa
See Also:
  • Field Details

    • serialVersionUID

      private static final long serialVersionUID
      See Also:
    • controller

      private final ProcessLinkedMPC controller
      The linked MPC controller.
    • mvValues

      private double[] mvValues
      Current MV values.
    • cvValues

      private double[] cvValues
      Current CV values.
    • dvValues

      private double[] dvValues
      Current DV values.
    • mvQuality

      MV quality flags.
    • cvQuality

      CV quality flags.
    • dvQuality

      DV quality flags.
    • setpoints

      private double[] setpoints
      Current setpoints.
    • cvLowLimits

      private double[] cvLowLimits
      CV low limits.
    • cvHighLimits

      private double[] cvHighLimits
      CV high limits.
    • lastInputUpdate

      private Instant lastInputUpdate
      Last input update timestamp.
    • lastExecution

      private Instant lastExecution
      Last execution timestamp.
    • executionStatus

      private ControllerDataExchange.ExecutionStatus executionStatus
      Last execution status.
    • executionMessage

      private String executionMessage
      Last execution message.
    • mvTargets

      private double[] mvTargets
      Calculated MV targets.
    • cvPredictions

      private double[][] cvPredictions
      Predicted CV trajectories.
    • executionCount

      private long executionCount
      Execution count.
  • Constructor Details

    • ControllerDataExchange

      public ControllerDataExchange(ProcessLinkedMPC controller)
      Construct a data exchange interface for a controller.
      Parameters:
      controller - the MPC controller
  • Method Details

    • initialize

      private void initialize()
    • updateInputs

      public void updateInputs(double[] mvValues, double[] cvValues, double[] dvValues)
      Update input values from external source.
      Parameters:
      mvValues - current MV values
      cvValues - current CV values
      dvValues - current DV values (can be null if no DVs)
    • updateInputsWithQuality

      public void updateInputsWithQuality(double[] mvValues, double[] cvValues, double[] dvValues, ControllerDataExchange.QualityStatus[] mvQuality, ControllerDataExchange.QualityStatus[] cvQuality, ControllerDataExchange.QualityStatus[] dvQuality)
      Update input values with quality flags.
      Parameters:
      mvValues - current MV values
      cvValues - current CV values
      dvValues - current DV values
      mvQuality - MV quality flags
      cvQuality - CV quality flags
      dvQuality - DV quality flags
    • updateSetpoints

      public void updateSetpoints(double[] setpoints)
      Update setpoints from external source.
      Parameters:
      setpoints - new setpoint values
    • updateLimits

      public void updateLimits(double[] lowLimits, double[] highLimits)
      Update CV limits from external source.
      Parameters:
      lowLimits - new low limits
      highLimits - new high limits
    • execute

      public boolean execute()
      Execute the control calculation.
      Returns:
      true if execution was successful
    • checkDataQuality

      private boolean checkDataQuality()
    • getOutputs

      Get the controller outputs.
      Returns:
      a ControllerOutput object with targets and status
    • getMvTargets

      public double[] getMvTargets()
      Get the MV target values.
      Returns:
      copy of MV target values
    • getSetpoints

      public double[] getSetpoints()
      Get the current setpoints.
      Returns:
      copy of setpoint values
    • getExecutionStatus

      public ControllerDataExchange.ExecutionStatus getExecutionStatus()
      Get the execution status.
      Returns:
      the current execution status
    • getExecutionMessage

      public String getExecutionMessage()
      Get the execution message.
      Returns:
      the last execution message
    • getExecutionCount

      public long getExecutionCount()
      Get the execution count.
      Returns:
      number of executions since creation
    • getLastInputUpdate

      public Instant getLastInputUpdate()
      Get the last input update time.
      Returns:
      timestamp of last input update
    • getLastExecution

      public Instant getLastExecution()
      Get the last execution time.
      Returns:
      timestamp of last execution
    • getVariableNames

      public Map<String, List<String>> getVariableNames()
      Get variable names for external system configuration.
      Returns:
      map of variable lists with names
    • getStatus

      public Map<String,Object> getStatus()
      Get complete status for external monitoring.
      Returns:
      map of status information