Moving Standard Deviation (MSTD)

This information applies to the CompactLogix 5370, ControlLogix 5570, CompactGuardLogix 5370, GuardLogix 5570, CompactGuardLogix 5380, CompactLogix 5380, CompactLogix 5480, ControlLogix 5580, and GuardLogix 5580 controllers.
The Moving Standard Deviation (MSTD) instruction calculates a moving standard deviation and average for the In signal.
Available Languages
Ladder Diagram
This instruction is not available in ladder diagram logic.
Function Block
MSTD_FBD_avail_v31
Structured Text
MSTD(MSTD_tag, StorageArray);
Operands
Function Block
Operand
Type
Format
Description
block tag
MOVING_STD_DEV
structure
MSTD structure
StorageArray
REAL
array
Holds the In samples. This array must be at least as large as NumberOfSamples.
MOVING_STD_DEV Structure
Input Parameter
Data Type
Description
EnableIn
BOOL
Enable input. If cleared, the instruction does not execute and outputs are not updated.
Default is set.
In
REAL
The analog signal input to the instruction.
Valid = any float
Default = 0.0
InFault
BOOL
Bad health indicator for the input. If In is read from an analog input, then InFault is normally controlled by fault status on the analog input. When set, InFault indicates the input signal has an error, the instruction sets the appropriate bit in Status, and the instruction holds Out and Average at their current values. When InFault transitions from set to cleared, the instruction initializes the averaging algorithm and continues executing.
Default is cleared.
Initialize
BOOL
Initialize input to the instruction. When set, the instruction sets Out = 0.0 and Average = In, except when InFault is set, in which case, the instruction holds both Out and Average at their current values. When Initialize transitions from set to cleared, the instruction initializes the standard deviation algorithm and continues executing.
Default is cleared.
SampleEnable
BOOL
Enable for taking a sample of In. When set, the instruction enters the value of In into the storage array and calculates a new Out and Average value. When SampleEnable is cleared and Initialize is cleared, the instruction holds Out and Average at their current values.
Default is cleared.
NumberOfSamples
DINT
The number of samples to be used in the calculation. If this value is invalid, the instruction sets the appropriate bit in Status and the instruction holds Out and Average at their current values. When NumberOfSamples becomes valid again, the instruction initializes the standard deviation algorithm and continues executing.
Valid = 1 to size of the storage array
Default = 1
Output Parameter
Data Type
Description
EnableOut
BOOL
Indicates if instruction is enabled. Cleared to false if Out overflows
Out
REAL
The calculated output of the algorithm.
Average
REAL
The calculated average of the algorithm.
Status
DINT
Status of the function block.
InstructFault (Status.0)
BOOL
The instruction detected one of the following execution errors. This is not a minor or major controller error. Check the remaining status bits to determine what occurred.
InFaulted (Status.1)
BOOL
In health is bad. InFault is set.
NumberOfSampInv (Status.2)
BOOL
NumberOfSamples invalid or not compatible with array size.
Structured Text
Operand
Type
Format
Description
block tag
MOVING_STD_DEV
structure
MSTD structure
StorageArray
REAL
array
Holds the In samples. This array must be at least as large as NumberOfSamples.
See Structured Text Syntax for more information on the syntax of expressions within structured text.
Description
The MSTD instruction supports any input queue length. Each scan, if SampleEnable is set, the instruction enters the value of In into a storage array. When the storage array is full, each new value of In causes the oldest entry to be deleted.
The MSTD instructions uses these equations for the outputs:
Condition
Action
Average
MSTD_fbd_eq1
Out
MSTD_fbd_eq2
The instruction will not place an invalid In value (NAN or Plus or Minus sign INF) into the storage array. When In is invalid, the instruction sets Out = In, sets Average = In, and logs an overflow minor fault, if this reporting is enabled. When In becomes valid, the instruction initializes the standard deviation algorithm and continues executing.
You can make runtime changes to the NumberOfSamples parameter. If you increase the number, the instruction incrementally processes new data from the current sample size to the new sample size. If you decrease the number, the instruction re-calculates the standard deviation from the beginning of the sample array to the new NumberOfSamples value.
Initializing the Standard Deviation Algorithm
Certain conditions, such as instruction first scan and instruction first run, require the instruction to initialize the standard deviation algorithm. When this occurs, the instruction considers the StorageArray empty and incrementally processes samples from 1 to the NumberOfSamples value. For example:
MSTD_fbd_STDAlgorithm_eq
Affects Math Status Flags
No
Major/Minor Faults
None specific to this instruction. See Common Attributes for operand-related faults.
Execution
Function Block
Condition/State
Action Taken
Prescan
EnableIn and EnableOut bits are cleared to false.
Tag.EnableIn is false
EnableIn and EnableOut bits are cleared to false.
Tag.EnableIn is true
EnableIn and EnableOut bits are set to true.
The instruction executes.
Instruction first run
Initialize the previous Output and Average.
Instruction first scan
Initialize Out to zero.
Initialize Average to Input
Initialize the instruction algorithm.
Postscan
EnableIn and EnableOut bits are cleared to false.
Structured Text
Condition/State
Action Taken
Prescan
See Prescan in the Function Block table.
Normal Execution
See Tag.EnableIn is true in the Function Block table.
Postscan
See Postscan in the Function Block table.
Example
Each scan that SampleEnable is set, the instruction places the value of In into array storage, calculates the standard deviation of the values in array storage, and places the result in Out. Out becomes an input parameter for function_block_C.
Function Block
MSTD_FBD_ex_v31
Structured Text
MSTD_01.In := input_value;
MSTD_01.SampleEnable := enable_sample;
MSTD(MSTD_01,storage);
deviation := MSTD_01.Out;
Provide Feedback
Have questions or feedback about this documentation? Please submit your feedback here.