Reference

CLPM Terminology

The following terms are frequently used in control loop performance monitoring (CLPM).

TermDescription
CLPMControl Loop Performance Monitoring
PV (Process Variable)This is the measured process variable, reflecting the actual state of the process that is being controlled.
SP (Setpoint)This is the desired value (target value) to which the PV is controlled.
ErrorThis is the difference between the PV and SP. It is calculated as Error = PV-SP. Note that this is not an absolute value.
ControllerThe subsystem containing the control algorithm that manipulates the MV to control the PV to the SP.
MV (Manipulated Variable)The variable manipulated (adjusted) by the controller to control the PV to the SP.
DV (Disturbance Variable)A measured disturbance variable that can be used by the controller to compensate for the impact of the disturbance on the PV.
P (Proportional Value)Normally the Proportional Gain value of the PID controller.
I (Integral Value)Normally the Integral Gain value of the PID controller.
D (Derivative Value)Normally the Derivative Gain value of the PID controller.
F (Filter Value)Normally the Filter Time Constant value of the PID controller.
Final Control Element (FCE)/ ActuatorThe device that is physically affected by a change in the MV so as to have an impact on the process.

Control Loop Asset Definition

The Control Loop Asset Definition specifies all the necessary attributes of a control loop asset. The various sections of the definition are detailed here. This is the definition to be used for the JSON asset ingestion file(s).

Define the Control Loop Asset

To define the control loop asset, perform the following steps:

  1. Define the asset classification.
  2. Create asset instances.
    • Follow the instructions in the APM Asset documentation for creating asset instances.
  3. Set up tag classifications for outputs.
  4. Associate inputs and outputs for control loop assets.
Note: It is important to follow these instructions carefully and to ensure that your asset ingestion file conforms to the control loop asset definition for CLPM. If your file does not conform to this definition, CLPM will be unable to function correctly.

Define the Asset Classification

Define the asset classification for the control loop asset.

Asset Classification: Reserved Attributes

The attributes in the following table are inherited as standard asset classification required attributes. No action is required on your part to modify them.

Property/AttributeData Type
Family TypeString
Equipment TypeString
MakeString
ModelString
SeriesString
Serial NumberString
Maintenance Criticality Risk ScoreInteger
Fault ModeString

Asset Classification: Custom Attributes

The attributes in the table that follows are custom asset classification attributes specifically for control loop assets. You need to specify values for them.

Property/AttributeData TypeRangeProperty Required?Notes
NameStringN/ARequiredRequired as an analytic input in order to be able to log the loop name with any individual logging entries.
DescriptionStringN/AOptional
Loop PriorityEnumerationEnumeration (High, Medium, Low)RequiredUsed for filtering during visualization.
TypeStringN/ARequired. Must be set to PID Control Loop
Lower SP OffsetNumeric>0RequiredUsed to calculate the lower SP threshold.
Upper SP OffsetNumeric>0RequiredUsed to calculate the upper SP threshold.

Set Up Tag Classifications for Outputs

Define each analytic output using the Control Loop KPI tag classification described in the table that follows.

Tag Classification

Required Property / AttributeData Type
Source Unit of MeasureString
Data TypeString
CategoryString
Maximum Operating ValueDouble
Minimum Operating ValueDouble
Highest Threshold ValueDouble
Lowest Threshold ValueDouble
ResolutionString
Sensor Health Index Low ThresholdDouble
Sensor Health Index High ThresholdDouble
Sensor Health Index Flat Line NumberInteger
Sensor Health Index Flat Line EpsilonDouble
Bad Observation Persistent / Penalty WindowInteger
False Alarm ProbabilityDouble
Missed Alarm ProbabilityDouble
Sample Failure Magnitudes MeanInteger
Sample Failure Magnitudes VarianceInteger
Null Hypothesis VarianceDouble
NaN Test WeightDouble
Outlier Test WeightDouble
Flat Test WeightDouble

Associate Analytic Inputs for Control Loop Assets

Specify analytic inputs by mapping timeseries tags onto asset instances defined by the control loop asset classification.

Each analytic input is uniquely identified by the Tag Alias, and the data type must match the corresponding type specified in the table that follows.

However, no specific tag classification is required for analytic inputs. You may use whatever tag classification you want to use.

Note: As you can see in the table that follows, the Maximum Operating Value and Minimum Operating Value tag attributes for the PV are significant because they are used for data clipping.
Note: It is important to carefully follow this specification. If your file does not conform to this definition, CLPM will be unable to function correctly.
Tag AliasTag DescriptionTag Attributes (Required)Tag Value RangesUser Input Required?Required?
UOMData TypeCategoryMaximum Operating ValueMinimum Operating ValueHighest Threshold ValueLowest Threshold Value
SetpointThe setpoint for the process variable (PV) represents the desired value for PV.Specifies the appropriate unit of measure.NumericAnyAnyAnyAnyAnyAnyNoYes
PVProcess variableSpecifies the appropriate unit of measure.NumericAny

Used as a custom attribute to specify the upper limit of the PV tag.

This is the upper Engineering (clipping) limit for PV. Data outside of this limit is not used for calculations.

Used as a custom attribute to specify the lower limit of the PV tag.

This is the lower Engineering (clipping) limit for PV. Data outside of this limit is not used for calculations.

AnyAnyAnyNoYes
MVThe controller output or "Manipulated Variable"Specifies the appropriate unit of measure.NumericAnyAnyAnyAnyAnyPercentage [0%-100%]NoYes
PProportional valueSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny>0OptionalNo
IIntegral valueSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny>0OptionalNo
DDerivative valueSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny>0OptionalNo
FFilter valueSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny>0OptionalNo
Control ModeControl ModeSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny

Enumeration

(Auto, Manual, Cascade, Shutdown)

NoYes

Associate Analytic Outputs for Control Loop Assets

Specify analytic outputs by mapping timeseries tags onto asset instances defined by the control loop asset definition.

Analytic Outputs

Each output is identified with the Control Loop KPI tag classification.
Consult the KPI Reference topic for descriptions of the KPIs corresponding to each output tag, along with formulas and notes on interpreting each KPI.
Note: The following applies to the Tag Source ID.
  • The Tag Source ID must be of the form <AssetID>.<Output Tag Name> for all analytic outputs.
  • The <AssetID> in the table that follows refers to the ID of the asset to which the tag belongs.
  • For example, observe that the Tag Association in the Example Loop Asset for Percentage Controller Output, for the Loop1 asset with ID Loop1, the Tag Source ID must be Loop1.Percentage Controller Output.
  • When manually creating the tags on the asset, this property is referred to as the Source ID.
  • When constructing Asset Ingestion files, this property is referenced using the ID in the tags section.
Note:
The Master Quality referenced in the table that follows is good if all the following tags are of good quality:
  • Control Type
  • MV
  • PV
  • SP

Otherwise, it is bad.

Output Tag NameTag DescriptionTag Attributes (Required)Tag Value RangesQuality
UOMData TypeCategoryMaximum Operating ValueMinimum Operating ValueHighest Threshold ValueLowest Threshold ValueTag Source ID
Percentage Controller OutputThe average MV value (expressed as a %).Specifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Controller OutputPercentage [0%-100%]Master Quality
Percentage Not UtilizedPercentage Not UtilizedSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Not UtilizedPercentage [0%-100%]Master Quality
Percentage MV SaturationPercentage MV SaturationSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage MV SaturationPercentage [0%-100%]Master Quality
Overall PerformanceOverall PerformanceSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Overall PerformancePercentage [0%-100%]Master Quality
Movement IndexGives the sum of all changes of the MV, divided by 100Specifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Movement IndexMaster Quality
Control AmplitudeCalculates the sum of all MV rate of change values divided by the total number of samplesSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Control AmplitudeMaster Quality
Reversal Count The number of times MV changes directionSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Reversal CountMV Quality
Reversal AmplitudePercentage Reversal AmplitudeSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Reversal AmplitudePercentage [0%-100%]Master Quality
Integrated SumIntegrated SumSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Integrated SumMaster Quality
PV Error AveragePV Error AverageSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.PV Error AverageMaster Quality
PV Error Absolute AveragePV Error Absolute AverageSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.PV Error Absolute AverageMaster Quality
PV Error Standard DeviationPV Error Standard DeviationSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.PV Error Standard DeviationMaster Quality
PV VariancePV VarianceSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.PV VarianceMaster Quality
PV VariabilityPV VariabilitySpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.PV VariabilityMaster Quality
Percentage Good QualityPercentage Good QualitySpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Good QualityPercentage [0%-100%]Master Quality
Total PIDF ChangesTotal PIDF ChangesSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Total PIDF Changes>=0Worst Quality of P, I, D, F
Percentage ManualPercentage ManualSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage ManualPercentage [0%-100%]Master Quality
Percentage Manual LL ExceededPercentage Manual LL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Manual LL ExceededPercentage [0%-100%]Master Quality
Percentage Manual UL ExceededPercentage Manual UL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Manual UL ExceededPercentage [0%-100%]Master Quality
Percentage AutoPercentage AutoSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage AutoPercentage [0%-100%]Master Quality
Percentage Auto LL ExceededPercentage Auto LL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Auto LL ExceededPercentage [0%-100%]Master Quality
Percentage Auto UL ExceededPercentage Auto UL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Auto UL ExceededPercentage [0%-100%]Master Quality
Percentage CascadePercentage CascadeSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage CascadePercentage [0%-100%]Master Quality
Percentage Cascade LL ExceededPercentage Cascade LL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Cascade LL ExceededPercentage [0%-100%]Master Quality
Percentage Cascade UL ExceededPercentage Cascade UL ExceededSpecifies the appropriate unit of measure.NumericAny10001000AssetID>.Percentage Cascade UL ExceededPercentage [0%-100%]Master Quality
Percentage ShutdownPercentage ShutdownSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage ShutdownPercentage [0%-100%]Master Quality
Percentage Shutdown LL ExceededPercentage Shutdown LL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Shutdown LL ExceededPercentage [0%-100%]Master Quality
Percentage Shutdown UL ExceededPercentage Shutdown UL ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Shutdown UL ExceededPercentage [0%-100%]Master Quality
Percentage Control OnPercentage Control OnSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Control OnPercentage [0%-100%]Master Quality
Statistics PeriodThe time period in seconds over which the KPIs have been calculated.Specifies the appropriate unit of measure.NumericAnyAny0Any0<AssetID>.Statistics Period>=0None
Percentage Limits ExceededPercentage Limits ExceededSpecifies the appropriate unit of measure.NumericAny10001000<AssetID>.Percentage Limits ExceededPercentage [0%-100%]Master Quality
PV ErrorPV ErrorSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.PV ErrorMaster Quality
Lower SP ThresholdLower SP ThresholdSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Lower SP ThresholdSetpoint Quality
Upper SP ThresholdUpper SP ThresholdSpecifies the appropriate unit of measure.NumericAnyAnyAnyAnyAny<AssetID>.Upper SP ThresholdSetpoint Quality
MV Oscillation CountMV Oscillation CountSpecifies the appropriate unit of measure.NumericAnyAny0Any0<AssetID>.MV Oscillation Count

Example Loop Asset for APM Asset Ingestion

The following sample JSON gives an example of the definition of a control loop asset for ingestion into APM.

The sample JSON below is split up into asset classification, asset instances, tag classifications, and tag associations.

This example produces two loops (Loop1 and Loop2).

Asset Classification

{
    "classifications": [
        {
            "id": "CLPM-Enterprise",
            "name": "Control Loop Enterprise Classification",
            "description": "",
            "ccomClass": "ENTERPRISE_TYPE",
            "parent": null
        },
        {
            "id": "CLPM-Site",
            "name": "Control Loop Site Classification",
            "description": "",
            "ccomClass": "SITE_TYPE",
            "parent": null
        },
        {
            "id": "CLPM-Segment",
            "name": "Control Loop Segment Classification",
            "description": "",
            "ccomClass": "SEGMENT_TYPE",
            "parent": null
        },
        {
            "id": "ControlLoop",
            "name": "Control Loop",
            "description": "",
            "ccomClass": "ASSET_TYPE",
            "parent": null,
            "properties": [
                {
                    "id": "Name",
                    "value": [],
                    "type": "String"
                },
                {
                    "id": "Description",
                    "value": [],
                    "type": "String"
                },
                {
                    "id": "Loop Priority",
                    "value": [
                        "Medium"
                    ],
                    "type": "String"
                },
                {
                    "id": "Type",
                    "value": [],
                    "type": "String"
                },
                {
                    "id": "Lower SP Offset",
                    "value": [
             
                    ],
                    "type": "Double"
                 },
                {
                  "id": "Upper SP Offset",
                    "value": [
                    ],
                  "type": "Double"
                }
            ]
        }
    ]
}

Instances

{
    "instances": [
        {
            "id": "SavoryFoodsInc",
            "name": "Savory Foods Inc",
            "description": "This is a digital manufacturing enterprise",
            "classification": "CLPM-Enterprise",
            "ccomClass": "ENTERPRISE"
        },
        {
            "id": "CapeTownSouthAfricaFactory",
            "name": "Cape Town, South Africa Factory",
            "description": "This is the Cape Town, South African factory",
            "properties": [
                {
                    "id": "Address",
                    "value": [
                        "Cape Town"
                    ],
                    "type": "string"
                }
            ],
            "classification": "CLPM-Site",
            "ccomClass": "SITE"
        },
        {
            "id": "TortillaPlant",
            "name": "Tortilla Plant",
            "description": "This is the tortilla plant",
            "properties": [
                {
                    "id": "PlantNumber",
                    "value": [
                        "TortillaPlant001"
                    ],
                    "type": "string"
                }
            ],
            "classification": "CLPM-Segment",
            "ccomClass": "SEGMENT"
        },
        {
            "id": "Loop1",
            "name": "Loop1",
            "description": "The tortilla fryer",
            "properties": [
                {
                    "id": "Lower SP Offset",
                    "value": [
                        20
                        ],
                    "type": "Double"
                },
                {
                    "id": "Upper SP Offset",
                    "value": [
                            120
                        ],
                    "type": "Double"
                }
            ],
            "classification": "ControlLoop",
            "ccomClass": "ASSET"
        },
        {
            "id": "Loop2",
            "name": "Loop2",
            "description": "The tortilla fryer",
            "properties": [
                {
                    "id": "alias",
                    "value": [
                        "Fryer"
                    ],
                    "type": "string"
                },
                {
                    "id": "Lower SP Offset",
                    "value": [
                        30
                        ],
                    "type": "Double"
                },
                {
                    "id": "Upper SP Offset",
                    "value": [
                            150
                        ],
                    "type": "Double"
                }
            ],
            "classification": "ControlLoop",
            "ccomClass": "ASSET"
        }
    ],
    "connections": [
        {
            "from": {
                "id": "CapeTownSouthAfricaFactory",
                "ccomClass": "SITE"
            },
            "to": [
                {
                    "type": "parent",
                    "id": "SavoryFoodsInc",
                    "ccomClass": "ENTERPRISE"
                }
            ]
        },
        {
            "from": {
                "id": "TortillaPlant",
                "ccomClass": "SEGMENT"
            },
            "to": [
                {
                    "type": "parent",
                    "id": "CapeTownSouthAfricaFactory",
                    "ccomClass": "SITE"
                }
            ]
        },
        {
            "from": {
                "id": "Loop1",
                "ccomClass": "ASSET"
            },
            "to": [
                {
                    "type": "parent",
                    "id": "TortillaPlant",
                    "ccomClass": "SEGMENT"
                }
            ]
        },
        {
            "from": {
                "id": "Loop2",
                "ccomClass": "ASSET"
            },
            "to": [
                {
                    "type": "parent",
                    "id": "TortillaPlant",
                    "ccomClass": "SEGMENT"
                }
            ]
        }
    ]
}

Tag Classifications

{
    "tagClassifications": [
        {
            "id": "ControlLoopKPI",
            "name": "Control Loop KPI",
            "description": "",
            "unitGroup": "",
            "reservedProperties": {
                "uom": "",
                "dataType": "Double",
                "category": ""
            }
        },
        {
            "id": "AnalyticInputs",
            "name": "AnalyticInputs",
            "description": "Tag Classification for analytic input tags",
            "unitGroup": ""
        }
    ]
}

Tag Associations

{
    "tagAssociations": [
        {
            "monitoredEntity": {
                "id": "Loop1",
                "ccomClass": "ASSET"
            },
            "tags": [
                {
                    "name": "Control Mode",
                    "id": "Loop1.ControlMode",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "timeseriesLink": "Loop1.ControlMode",
                        "dataType": "String"
                    },
                    "aliases": [
                        "Control Mode"
                    ]
                },
                {
                    "name": "D",
                    "id": "Loop1.D",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "D"
                    ]
                },
                {
                    "name": "F",
                    "id": "Loop1.F",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "F"
                    ]
                },
                {
                    "name": "I",
                    "id": "Loop1.I",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "I"
                    ]
                },
                {
                    "name": "MV",
                    "id": "Loop1.CV",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "MV"
                    ],
                    "properties": [
                        {
                            "id": "Maximum Operating Value",
                            "value": [
                                120
                            ],
                            "type": "Double"
                        },
                        {
                            "id": "Minimum Operating Value",
                            "value": [
                                0
                            ],
                            "type": "Double"
                        }
                    ]
                },
                {
                    "name": "P",
                    "id": "Loop1.P",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "P"
                    ]
                },
                {
                    "name": "PV",
                    "id": "Loop1.PV",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "PV"
                    ],
                    "properties": [
                        {
                            "id": "Maximum Operating Value",
                            "value": [
                                120
                            ],
                            "type": "Double"
                        },
                        {
                            "id": "Minimum Operating Value",
                            "value": [
                                0
                            ],
                            "type": "Double"
                        }
                    ]
                },
                {
                    "name": "Setpoint",
                    "id": "Loop1.Setpoint",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "Setpoint"
                    ]
                },
                {
                    "name": "Control Amplitude",
                    "id": "Loop1.Control Amplitude",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Integrated Sum",
                    "id": "Loop1.Integrated Sum",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Lower SP Threshold",
                    "id": "Loop1.Lower SP Threshold",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Movement Index",
                    "id": "Loop1.Movement Index",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "MV Oscillation Count",
                    "id": "Loop1.MV Oscillation Count",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "minOperatingValue": 0,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Overall Performance",
                    "id": "Loop1.Overall Performance",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Percentage Auto LL Exceeded",
                    "id": "Loop1.Percentage Auto LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Auto UL Exceeded",
                    "id": "Loop1.Percentage Auto UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Auto",
                    "id": "Loop1.Percentage Auto",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade LL Exceeded",
                    "id": "Loop1.Percentage Cascade LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade UL Exceeded",
                    "id": "Loop1.Percentage Cascade UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade",
                    "id": "Loop1.Percentage Cascade",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Controller Output",
                    "id": "Loop1.Percentage Controller Output",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Control On",
                    "id": "Loop1.Percentage Control On",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Good Quality",
                    "id": "Loop1.Percentage Good Quality",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Limits Exceeded",
                    "id": "Loop1.Percentage Limits Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Manual LL Exceeded",
                    "id": "Loop1.Percentage Manual LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Manual UL Exceeded",
                    "id": "Loop1.Percentage Manual UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Manual",
                    "id": "Loop1.Percentage Manual",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage MV Saturation",
                    "id": "Loop1.Percentage MV Saturation",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Not Utilized",
                    "id": "Loop1.Percentage Not Utilized",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown LL Exceeded",
                    "id": "Loop1.Percentage Shutdown LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown UL Exceeded",
                    "id": "Loop1.Percentage Shutdown UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown",
                    "id": "Loop1.Percentage Shutdown",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "PV Error Absolute Average",
                    "id": "Loop1.PV Error Absolute Average",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error Average",
                    "id": "Loop1.PV Error Average",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error Standard Deviation",
                    "id": "Loop1.PV Error Standard Deviation",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error",
                    "id": "Loop1.PV Error",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Variability",
                    "id": "Loop1.PV Variability",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Variance",
                    "id": "Loop1.PV Variance",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Reversal Amplitude",
                    "id": "Loop1.Reversal Amplitude",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Reversal Count",
                    "id": "Loop1.Reversal Count",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "minOperatingValue": 0,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Total PIDF Changes",
                    "id": "Loop1.Total PIDF Changes",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Upper SP Threshold",
                    "id": "Loop1.Upper SP Threshold",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Statistics Period",
                    "id": "Loop1.Statistics Period",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                }
            ]
        },
        {
            "monitoredEntity": {
                "id": "Loop2",
                "ccomClass": "ASSET"
            },
            "tags": [
                {
                    "name": "Lower PV Limit",
                    "id": "Loop2.LowerPVLimit",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "Lower PV Limit"
                    ]
                },
                {
                    "name": "Upper PV Limit",
                    "id": "Loop2.UpperPVLimit",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "Upper PV Limit"
                    ]
                },
                {
                    "name": "Setpoint",
                    "id": "Loop2.Setpoint",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "Setpoint"
                    ]
                },
                {
                    "name": "PV",
                    "id": "Loop2.PV",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "PV"
                    ],
                    "properties": [
                        {
                            "id": "Maximum Operating Value",
                            "value": [
                                120
                            ],
                            "type": "Double"
                        },
                        {
                            "id": "Minimum Operating Value",
                            "value": [
                                0
                            ],
                            "type": "Double"
                        }
                    ]
                },
                {
                    "name": "MV",
                    "id": "Loop2.MV",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "MV"
                    ],
                    "properties": [
                        {
                            "id": "Maximum Operating Value",
                            "value": [
                                100
                            ],
                            "type": "Double"
                        },
                        {
                            "id": "Minimum Operating Value",
                            "value": [
                                0
                            ],
                            "type": "Double"
                        }
                    ]
                },
                {
                    "name": "P",
                    "id": "Loop2.P",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "P"
                    ]
                },
                {
                    "name": "I",
                    "id": "Loop2.I",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "I"
                    ]
                },
                {
                    "name": "D",
                    "id": "Loop2.D",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "D"
                    ]
                },
                {
                    "name": "F",
                    "id": "Loop2.F",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    },
                    "aliases": [
                        "F"
                    ]
                },
                {
                    "name": "Control Mode",
                    "id": "Loop2.ControlMode",
                    "classification": "AnalyticInputs",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "String"
                    },
                    "aliases": [
                        "Control Mode"
                    ]
                },
                {
                    "name": "Total PIDF Changes",
                    "id": "Loop2.Total PIDF Changes",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Percentage Manual",
                    "id": "Loop2.Percentage Manual",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Manual LL Exceeded",
                    "id": "Loop2.Percentage Manual LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Manual UL Exceeded",
                    "id": "Loop2.Percentage Manual UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Auto",
                    "id": "Loop2.Percentage Auto",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Auto LL Exceeded",
                    "id": "Loop2.PercentageAuto LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Auto UL Exceeded",
                    "id": "Loop2.Percentage Auto UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade",
                    "id": "Loop2.Percentage Cascade",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade LL Exceeded",
                    "id": "Loop2.Percentage Cascade LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Cascade UL Exceeded",
                    "id": "Loop2.Percentage Cascade UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown",
                    "id": "Loop2.Percentage Shutdown",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown LL Exceeded",
                    "id": "Loop2.Percentage Shutdown LL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Shutdown UL Exceeded",
                    "id": "Loop2.Percentage Shutdown UL Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Control On",
                    "id": "Loop2.Percentage Control On",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Controller Output",
                    "id": "Loop2.Percentage Controller Output",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Good Quality",
                    "id": "Loop2.Percentage Good Quality",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage Not Utilized",
                    "id": "Loop2.Percentage Not Utilized",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Percentage MV Saturation",
                    "id": "Loop2.Percentage MV Saturation",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Overall Performance",
                    "id": "Loop2.Overall Performance",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Movement Index",
                    "id": "Loop2.Movement Index",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Control Amplitude",
                    "id": "Loop2.Control Amplitude",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Reversal Count",
                    "id": "Loop2.Reversal Count",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "minOperatingValue": 0,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Reversal Amplitude",
                    "id": "Loop2.Reversal Amplitude",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Integrated Sum",
                    "id": "Loop2.Integrated Sum",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error Average",
                    "id": "Loop2.PV Error Average",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error Absolute Average",
                    "id": "Loop2.PV Error Absolute Average",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Error Standard Deviation",
                    "id": "Loop2.PV Error Standard Deviation",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "PV Variance",
                    "id": "Loop2.PV Variance",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "PV Variability",
                    "id": "Loop2.PV Variability",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Percentage Limits Exceeded",
                    "id": "Loop2.Percentage Limits Exceeded",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "maxOperatingValue": 100,
                        "minOperatingValue": 0,
                        "highestThresholdValue": 100,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "PV Error",
                    "id": "Loop2.PV Error",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Lower SP Threshold",
                    "id": "Loop2.Lower SP Threshold",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "Upper SP Threshold",
                    "id": "Loop2.Upper SP Threshold",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                },
                {
                    "name": "MV Oscillation Count",
                    "id": "Loop2.MV Oscillation Count",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double",
                        "minOperatingValue": 0,
                        "lowestThresholdValue": 0
                    }
                },
                {
                    "name": "Statistics Period",
                    "id": "Loop2.Statistics Period",
                    "classification": "ControlLoopKPI",
                    "unit": "",
                    "reservedProperties": {
                        "dataType": "Double"
                    }
                }
            ]
        }
    ]
}

KPI Reference for CLPM

This reference details all the KPIs calculated over the data window.

These KPIs are produced by deployed CLPM analytics and are associated with assets in Predix TimeSeries.

The KPIs are also used to produce the tables and charts on the Loop Dashboard and Fleet Dashboard, which help you monitor and diagnose loop performance.

The KPIs are categorized in the tables that follow as:

Note: The samples over which these KPIs are calculated are resampled to be at regular intervals. The resulting samples are therefore equally weighted in the calculations. All KPIs are calculated off interpolated data.

Aggregate KPIs

These aggregate KPIs are calculated over the data window.

KPIDescriptionFormulaInterpretationSource KPI Analytic
Control Amplitude

The Control Amplitude gives the sum of all changes of the MV, divided by the number of samples. Only data of good quality is considered for the calculation of this value. Bad quality data is ignored.

Control Amplitude = SUM(|MV_ROC|) / Number of Samples

where:

  • MV_ROC = MV current - MV previous
  • MV_ROC Quality is the worst quality of MV current and MV previous.
The closer this KPI is to zero the better. An amplitude close to zero indicates that the manipulated variable does not need to be greatly adjusted in order to control the PV to the SP.

If this KPI is large, it indicates a large adjustment to the MV. One of the following is likely the cause of this:

  • The sensor or FCE/Actuator is broken.
  • The FCE/Actuator is incorrectly sized.
  • An unsuitable MV with little or no leverage is currently selected to control the PV.
  • The loop settings (for tuning) are too aggressive.
OPM-CLPM-Performance_Ext
Integrated SumThis gives the sum of the absolute values of all PV Error (PV - SP) samples within the data window that are of good quality. Integrated Sum = SUM(|PV-SP|) for samples of good quality in windowThis KPI gives an indication of the total size of the absolute PV Error over the whole reporting period. The closer this KPI is to zero the better.

It is not normalized, so it cannot be directly compared across different loops, but is best analyzed over time for the same loop to see how well a specific loop is controlling over time.

OPM-CLPM-Performance_Ext
Movement IndexThe Movement Index gives the sum of all changes of the MV, divided by 100. Only data of good quality is considered for the calculation of this value. Bad quality data is ignored.Movement Index = SUM(|MV_ROC|) / 100

where:

  • MV_ROC = MV current - MV previous
  • MV_ROC Quality is the worst quality of MV current and MV previous.
The closer this KPI is to zero the better. An index close to zero indicates that the manipulated variable does not need to be adjusted a lot in order to control the PV to the SP.

If this KPI is large, it indicates a lot of adjustment to the MV. One of the following is likely the cause of this:

  • The sensor or the FCE/Actuator is broken.
  • The FCE/Actuator is incorrectly sized.
  • An unsuitable MV with little or no leverage is currently selected to control the PV.
  • The loop settings (for tuning) are too aggressive.
OPM-CLPM-Performance_Ext
MV Oscillation CountThis calculates the number of times that the MV oscillates (changes direction twice) over the reporting period.Reversal Count

= Reversal Count / 2

= COUNT(MV direction change) / 2
The closer this KPI is to zero the better. A large value for this KPI indicates that MV changes tend to overshoot the mark and require MV changes in the opposite direction to compensate.OPM-CLPM-Performance_Ext
Overall PerformanceThis indicates the overall performance of the loop by combining the (equally weighted) Percentage Manual, Percentage MV Saturation, and Percentage Limits Exceeded KPIs into a single percentage value.OverallPerformance =

Percentage Manual / 3 + Percentage MV Saturation / 3 + Percentage Limits Exceeded / 3

where Percentage Manual, Percentage MV Saturation, and Percentage Limits Exceeded are KPIs described elsewhere in this table.

This gives a broad picture of the performance of the system. This should be low.
If this KPI is large, one of the following is likely the cause of this:
  • The sensor, or FCE/Actuator is broken.
  • The SP is set at an unrealistic/unreachable value.
  • The FCE/Actuator is incorrectly sized.
  • The loop is set to Manual mode for most of the time.
  • The loop control limits (specifying the target control range) are set to an unrealistically narrow range.
  • The current control loop design, settings, and algorithm are unable to effectively control the target process or equipment.

Examine the individual KPIs that comprise this KPI for a more precise indicator of what is contributing to the behavior of the system.

OPM-CLPM-Performance
Percentage AutoThis indicates the percentage of the samples of good quality within the data window for which the control mode used was Auto.% Auto = Number of samples WHERE (Auto control mode AND samples of good quality)/ Number of samples of good qualityFor Auto control mode, a controller within a control system implements automated changes to a variable when a sensor measures the process operating outside the defined process limits. The output is calculated by the controller using the error signal, which is the difference between the set point and the process variable. Ideally, the control loop would always be in either Auto or Cascade mode, implying that the loop is switched ON to actively, automatically, and continuously control the PV to SP. OPM-CLPM-Performance
Percentage Auto LL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Auto and the PV was below the Lower SP Offset..% Auto LL Exceeded = Number of samples WHERE (Auto control mode AND PV < Lower SP Offset AND samples of good quality) / Number of samples of good qualityIf PV violates the lower control limits while the loop is in Auto mode, it means one of the following:
  • The loop tuning is incorrect.
  • The control loop is not able to do its job or is not suitable for its job. Possible reasons can include:
    • The loop is complex loop and you need an Advanced Controller like MPC to control this type of loop.
    • The control loop is not designed correctly.
    • The sensor or FCE/actuator is unsuitable or is faulty.
    • The equipment being controlled is malfunctioning.
  • The control loop and process/equipment are OK, but the control limits are too tight/strict and should be reviewed/updated.
OPM-CLPM-Performance
Percentage Auto UL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Auto and the PV was above the Upper SP Offset.% Auto UL Exceeded = Number of samples WHERE (Auto control mode AND PV > Upper SP Offset AND samples of good quality) / Number of samples of good qualityIf PV violates the upper control limits while the loop is in Auto mode, it means one of the following:
  • The loop tuning is incorrect.
  • The control loop is not able to do its job or is not suitable for its job. Possible reasons can include:
    • The loop is complex loop and you need an Advanced Controller like MPC to control this type of loop.
    • The control loop is not designed correctly.
    • The sensor or FCE/actuator is unsuitable or is faulty.
    • The equipment being controlled is malfunctioning.
  • The control loop and process/equipment are OK, but the control limits are too tight/strict and should be reviewed/updated.
OPM-CLPM-Performance
Percentage CascadeThis indicates the percentage of the samples of good quality within the data window for which the control mode used was Cascade.% Cascade = Number of samples WHERE (Cascade control mode AND samples of good quality)/ Number of samples of good quality

In Cascade control mode the loop output/MV is not directly driving an actuator, but rather it is linked to or setting or calculating the SP for another controller loop.

For example, a flow control loop is trying to control the flow, measured by a flow meter, to a desired SP by changing a valve position. The flow control loop calculates a desired valve position, which in turn becomes the requested position SP for a valve positioning control loop that changes a pressure to move the valve to a desired position. The two loops are linked together in cascade. The flow control loop depends on the valve positioning control loop to do its job; if the latter does not work well, the former will also not work well.

OPM-CLPM-Performance
Percentage Cascade LL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Cascade and the PV was below the Lower SP Offset.% Cascade LL Exceeded = Number of samples WHERE (Cascade control mode AND PV < Lower SP Offset AND samples of good quality) / Number of samples of good qualityIf PV violates the lower control limits while the loop is in Cascade mode, it means one of the following:
  • The loop tuning is incorrect.
  • The control loop is not able to do its job or is not suitable for its job. Possible reasons can include:
    • The loop is complex loop and you need an Advanced Controller like MPC to control this type of loop.
    • The control loop is not designed correctly.
    • The sensor or FCE/actuator is unsuitable or is faulty.
    • The equipment being controlled is malfunctioning.
    • The downstream, dependent cascaded loop has a problem.
  • The control loop and process/equipment are OK, but the control limits are too tight/strict and should be reviewed/updated.
OPM-CLPM-Performance
Percentage Cascade UL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Cascade and the PV was above the Upper SP Offset.% Auto UL Exceeded = Number of samples WHERE (Auto control mode AND PV > Upper SP Offset AND samples of good quality) / Number of samples of good qualityIf PV violates the upper control limits while the loop is in Cascade mode, it means one of the following:
  • The loop tuning is incorrect.
  • The control loop is not able to do its job or is not suitable for its job. Possible reasons can include:
    • The loop is complex loop and you need an Advanced Controller like MPC to control this type of loop.
    • The control loop is not designed correctly.
    • The sensor or FCE/actuator is unsuitable or is faulty.
    • The equipment being controlled is malfunctioning.
    • The downstream, dependent cascaded loop has a problem.
  • The control loop and process/equipment are OK, but the control limits are too tight/strict and should be reviewed/updated.
OPM-CLPM-Performance
Percentage Control OnThis indicates the percentage of the samples of good quality within the data window for which the control mode is enabled.% Control On = Number of samples WHERE ((Auto or Cascade control mode) AND samples of good quality)/ Number of samples of good qualityThis KPI corresponds to either Auto or Cascade control modes. The control loops are meant to be actively, automatically, continuously controlling.OPM-CLPM-Performance
Percentage Controller OutputThis indicates the average MV value (expressed as a %) for data within the data window that is of good quality.Percentage Controller Output = SUM(MV for samples of good quality in window) / Number of samples of good qualityThe MV Average should be around 50% most of the time.

If the MV is permanently stuck at a minimum of 0%, or a maximum of 100%, it shows that the MV cannot control the PV to the SP. One of the following is likely the cause of this:

  • The sensor, or FCE/Actuator is broken.
  • The SP is set at an unrealistic/unreachable value.
  • The FCE/Actuator is incorrectly sized.
  • An unsuitable MV with little or no leverage is currently selected to control the PV.

For example, if the valve/pump acting as the FCE is too small, the MV Average will be closer to 80/90%. Conversely, if the valve/pump is too big, then the MV Average will be closer to 10/20% most of time.

OPM-CLPM-Performance
Percentage Good QualityThis indicates the percentage of data within the data window that is of good quality.% Good Quality = Number of samples of good quality / Number of samplesThis KPI gives you an idea of how trustworthy the data within the data window is. The higher the percentage good quality, the more trustworthy the data is. Other KPIs should be understood with this measure in mind, bearing in mind that control loop KPI calculations exclude bad quality data samples.OPM-CLPM-Performance
Percentage Limits ExceededThis indicates the total percentage of time that the system is in Auto, Cascade, or Manual modes where the upper or lower limits for those modes have been exceeded.PercentageLimitsExceeded = (Total number of samples WHERE upper or lower limits exceeded in Auto, Cascade, or Manual modes / Total duration in Auto, Cascade, or Manual modes) * 100This gives a broad picture of the performance of the system. This should be low.

If this KPI is large, then the upper or lower control limits are being exceeded more than is healthy.

Examine the individual KPIs for each mode indicating that limits have been exceeded for a more precise indicator of what is contributing to the behavior of the system.

OPM-CLPM-Performance
Percentage Manual

This indicates the percentage of the samples of good quality within the data window for which the control mode used was Manual.

% Manual = Number of samples WHERE(Manual control mode AND samples of good quality) / Number of samples of good qualityA loop is typically set to Manual control mode if the Operator wants the ability to manually set MV values. For example, the plant may be in abnormal operating conditions, but not completely shutdown. For Manual control mode, the MV is set manually by the operator to make control changes. When a measured variable operates out of the limits, an operator personally implements a control change to restore the system to within operating limits. Ideally, the control loop should be in Manual mode as little as possible. OPM-CLPM-Performance
Percentage Manual LL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Manual and the PV was below the Lower SP Offset.% Manual LL Exceeded = Number of samples WHERE (Manual control mode AND PV < Lower SP Offset AND samples of good quality) / Number of samples of good qualityIf the PV violates the lower control limits while the loop is in Manual mode, this is undesirable and it means that the operator is not successfully controlling the loop to remain within acceptable control limits. In such a case, the loop should rather be set to Auto control mode so it can be automatically controlled to remain within acceptable control limits around a chosen SP. If the loop is working correctly, Auto control will generally be better than Manual control, unless the loop has tuning, design, or equipment problems.OPM-CLPM-Performance
Percentage Manual UL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Manual and the PV was above the Upper SP Offset.% Manual UL Exceeded = Number of samples WHERE (Manual control mode AND PV > Upper SP Offset AND samples of good quality) / Number of samples of good qualityIf the PV violates the upper control limits while the loop is in Manual mode, this is undesirable and it means that the operator is not successfully controlling the loop to remain within acceptable control limits. In such a case, the loop should rather be set to Auto control mode so it can be automatically controlled to remain within acceptable control limits around a chosen SP. If the loop is working correctly, Auto control will generally be better than Manual control, unless the loop has tuning, design, or equipment problems.OPM-CLPM-Performance
Percentage MV SaturationThis indicates the percentage of samples of good quality where the MV is saturated. The MV is considered saturated when it is at 0% or at 100%.Percentage MV Saturation = (Number of samples of good quality WHERE (MV is 0% or 100%) / Number of samples of good quality) * 100This gives an indication of how much MV is at one extreme or the other. This should be low.
If this KPI is large, one of the following is likely the cause of this:
  • The sensor, or FCE/Actuator is broken.
  • The SP is set at an unrealistic/unreachable value.
  • The FCE/Actuator is incorrectly sized.
OPM-CLPM-Performance
Percentage Not UtilizedThis indicates the percentage of samples of good quality where the loop is not being utilized. The loop is considered not utilized when the MV is at 0% or at 100% (saturated), or when the control mode is Manual.Percentage Not Utilized = (Number of samples of good quality WHERE (MV is 0% or MV is 100% or control mode is Manual) / Number of samples of good quality) * 100This gives an indication of how much MV is not being used effectively. This should be low.

If this KPI is large, one of the following is likely the cause of this:

  • The sensor, or FCE/Actuator is broken.
  • The SP is set at an unrealistic/unreachable value.
  • The FCE/Actuator is incorrectly sized.
  • The loop is in Manual mode for other reasons.
OPM-CLPM-Performance
Percentage ShutdownThis indicates the percentage of the samples of good quality within the data window for which the control mode used was Shutdown.% Shutdown = Number of samples WHERE (Shutdown control mode AND samples of good quality)/ Number of samples of good quality

In Shutdown control mode, the loop is switched off because the plant is in an abnormal operating mode. For example, the plant may be shut down for maintenance.

Shutdown mode means that the loop is off, and the plant is off or not in a condition to be automatically controlled. The CLPM solution excludes all data from loop KPI calculations during this time.

During CLPM deployment, an analytic is created that decides based on operational rules, when each control loop should be considered in Shutdown mode.

OPM-CLPM-Performance
Percentage Shutdown LL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Shutdown and the PV was below the Lower SP Offset.% Shutdown LL Exceeded = Number of samples WHERE (Shutdown control mode AND PV < Lower SP Offset AND samples of good quality) / Number of samples of good qualityIt is OK if a loop violates limits during Shutdown mode, since the loop is off and not meant to be controlling, and data is not used in KPI calculations.OPM-CLPM-Performance
Percentage Shutdown UL ExceededThis indicates the percentage of the samples of good quality within the data window for which the control mode was set to Shutdown and the PV was above the Upper SP Offset.% Shutdown UL Exceeded = Number of samples WHERE (Shutdown control mode AND PV > Upper SP Offset AND samples of good quality) / Number of samples of good qualityIt is OK if a loop violates limits during Shutdown mode, since the loop is off and not meant to be controlling, and data is not used in KPI calculations.OPM-CLPM-Performance
PV Error Absolute AverageThis gives the average of the absolute values of all PV Error (PV - SP) samples within the data window that are of good quality.PV Error Absolute Average = SUM(|PV Error Samples of good quality in window|) / Number of PV Error samples of good qualityThe closer this KPI is to zero the better. An absolute average of zero indicates that the loop is controlling exactly on the SP. The KPI gives an indication of how far away the PV is on average from the SP over the reporting period.OPM-CLPM-Performance_Ext
PV Error AverageThis gives the average of all PV Error (PV - SP) samples within the data window that are of good quality.PV Error Average = SUM (PV Error Samples of good quality in window) / Number of PV Error samples of good qualityThe closer this KPI is to zero the better. An average of zero indicates that the loop is on average controlling centered around the SP.OPM-CLPM-Performance_Ext
PV Error Standard DeviationThis gives the standard deviation of all PV Error (PV - SP) samples of good quality.PV Error Standard Deviation = SQUARE ROOT (SUM(PV Error - PV Error Average) ^2 for each PV Error sample of good quality) / Number of PV Error samples of good quality)This KPI gives an indication of the amount of variation in PV Error sample values of good quality over the reporting period.OPM-CLPM-Performance_Ext
PV VariabilityThis gives a ratio which is a measure of the standard deviation relative to the PV sample average, for PV samples of good quality within the reporting period. PV Variability = (PV Standard Deviation * 200) / |PV Average|This KPI gives an indication of how spread out or closely clustered the PV data samples are, expressed as a percentage. It is a measure of relative PV variability. This is also sometimes referred to as the coefficient of variation.OPM-CLPM-Performance_Ext
PV VarianceThis gives the variance of all PV samples of good quality over the reporting period.PV Variance = SUM((PV Sample - PV Average) ^2 for each PV sample of good quality) / Number of PV samples of good qualityThis KPI gives an indication of the amount of variation in PV sample values of good quality over the reporting period.OPM-CLPM-Performance_Ext
Reversal AmplitudeThis calculates the sum of all the changes in the MV relative to the number of times the MV changes direction. Only data of good quality is considered for the calculation of this value. Bad quality data is ignored.Reversal Amplitude

= SUM(|MV_ROC|) / Reversal Count

= SUM(|MV_ROC|) / COUNT(MV direction change)

The closer this KPI is to zero the better. A low value likely means that the system is responsive and smaller changes are made to keep the system on track. A large reversal amplitude likely indicates that the system is unresponsive and hence requires larger changes in the MV to keep it on track.OPM-CLPM-Performance_Ext
Reversal CountThis calculates the number of times that the MV changes direction over the reporting period.Reversal Count = COUNT(MV direction change)The closer this KPI is to zero the better. A large value for this KPI indicates that MV changes tend to overshoot the mark and require MV changes in the opposite direction to compensate.OPM-CLPM-Performance_Ext
Statistics PeriodThis is the time period in seconds over which the KPIs have been calculated.Statistics Period = End time - Start time, expressed in secondsThe time period in seconds over which the KPIs have been calculated.OPM-CLPM-Performance_Ext
Total PIDF ChangesThis indicates the total number of times that one of the P, I, D, or F (Proportional, Integral, Derivative, or Filter) values has changed inside the window of data.Total PIDF Changes = COUNT (All samples where P, I, D, or F values have changed)Different settings will change this KPI and can explain sudden changes in control loop performance. For example, there may have been some change in the loop tuning settings and that has affected loop performance.OPM-CLPM-Config_Change

Non-Aggregate KPIs

These non-aggregate KPIs are given for the data window.

KPIDescriptionFormulaInterpretationSource KPI Analytic
Lower SP ThresholdThis returns a dataset that is the set of all differences between the SP and the Lower SP Offset for each point in the data window where that difference has changed from the previous difference.

The quality of each datapoint in the dataset is the quality of the SP at that point in time.

This is used to produce a step graph indicating changes in the Lower SP Threshold.

For each sample in window, add a datapoint, IFF it differs from the previous datapoint:

SP-LowerSPOffset

where quality is WORST(SP,LowerSPOffset).

This returns a dataset that is the set of all differences between the SP and the Lower SP Offset for each point in the data window where that difference has changed from the previous difference.

This represents the acceptable lower control limit within which the PV should be controlled.

OPM-CLPM-PV_Statistics
PV ErrorThis returns a dataset that is the set of all differences between the PV and SP for each point in the data window.

The quality of each datapoint in the dataset is the worst quality of the PV and SP at that point in time.

This is used to produce the error histogram.

For each sample in window, add a datapoint: PV-SP, where quality is WORST(PV,SP).This returns a dataset that is the set of all differences between the PV and SP for each point in the data window.

Ideally, the PV Error should be zero.

A large positive or negative PV Error means that the control loop is not controlling the PV to the SP effectively.

OPM-CLPM-PV_Statistics
Upper SP ThresholdThis returns a dataset that is the set of all sums of the SP and the Upper SP Offset for each point in the data window where that sum has changed from the previous sum.

The quality of each datapoint in the dataset is the quality of the SP at that point in time.

This is used to produce a step graph indicating changes in the Upper SP Threshold.

For each sample in window, add a datapoint, IFF it differs from the previous datapoint:

SP+UpperSPOffset

where quality is WORST(SP,UpperSPOffset).

This returns a dataset that is the set of all sums of the SP and the Upper SP Offset for each point in the data window where that difference has changed from the previous difference.

This represents the acceptable upper control limit within which the PV should be controlled.

OPM-CLPM-PV_Statistics