Process Analog Fanout (PFO)

This information applies to the CompactLogix 5380P and ControlLogix 5580P controllers.
The Process Analog Fanout (PFO) instruction sends one primary analog output signal to multiple secondary users or devices. Each secondary output has configurable gain, offset, and clamping limits.
The Process Analog Fanout (PFO) instruction:
  • Receives an input-controlled variable (CV) from a primary PID loop or analog output.
  • Applies rate-of-change limiting to the input signal.
  • Calculates outputs for up to eight secondary devices. Each secondary output has its own ratio (slope) and offset (intercept) from the rate-limited primary input. The ratios and offsets are configured values.
  • Applies minimum and maximum clamping limits to each output (secondary) CV.
  • Provides for initialization of each of its secondary CV outputs based on a request bit and a requested value from the secondary. When a particular output CV comes out of initialization, it is ramped from the initialization value to its calculated value using a configured takeup rate.
  • Provides for initialization of the primary when all secondaries have requested initialization. The initialization value sent to the primary can be a fixed, configured value or a calculated value based on the CV1 (Output 1) requested initialization value, accounting for the CV1 gain and offset. Thus CV1 is the priority output.
Available Languages
Ladder Diagram
PFO_avail_ladder_v33
Function Block Diagram
PFO_avail_FBD_v33
Structured Text
PFO (PFO tag);
Operands
IMPORTANT:
Unexpected operation may occur if:
  • Output tag operands are overwritten.
  • Members of a structure operand are overwritten.
  • Except when specified, structure operands are shared by multiple instructions.
There are data conversion rules for mixing numeric data types within an instruction. See Data conversions.
Configuration Operands
Operand
Type
Format
Description
PlantPAx Control
P_ANALOG_FANOUT
tag
Data structure required for proper operation of instruction.
P_ANALOG_FANOUT Structure
Public members are standard, visible tag members that are programmatically accessible. Private, hidden members are used in HMI faceplates and are not programmatically accessible. Private members are listed in separate tables after public members.
Public Input Members
Data Type
Description
EnableIn
BOOL
Enable input. Ladder Diagram: Corresponds to the rung condition.
Default is true.
Inp_InitializeReq
BOOL
1 = Request to initialize the instruction. The instruction is normally initialized in instruction first run. Use this request when reinitialization is needed. The instruction clears this operand automatically.
Default is true.
Inp_CV
REAL
Input CV from upstream block's output (engineering units).
Default is 0.0.
Inp_CV1InitializationVal
REAL
Initialization value from downstream block #1 (Out 1 engineering units). Valid = any float.
Default is 0.0.
Inp_CV2InitializationVal
REAL
Initialization value from downstream block #2 (Out 2 engineering units). Valid = any float.
Default is 0.0.
Inp_CV3InitializationVal
REAL
Initialization value from downstream block #3 (Out 3 engineering units). Valid = any float.
Default is 0.0.
Inp_CV4InitializationVal
REAL
Initialization value from downstream block #4 (Out 4 engineering units). Valid = any float.
Default is 0.0.
Inp_CV5InitializationVal
REAL
Initialization value from downstream block #5 (Out 5 engineering units). Valid = any float.
Default is 0.0.
Inp_CV6InitializationVal
REAL
Initialization value from downstream block #6 (Out 6 engineering units). Valid = any float.
Default is 0.0.
Inp_CV7InitializationVal
REAL
Initialization value from downstream block #7 (Out 7 engineering units). Valid = any float.
Default is 0.0.
Inp_CV8InitializationVal
REAL
Initialization value from downstream block #8 (Out 8 engineering units). Valid = any float.
Default is 0.0.
Inp_CV1InitializeReq
BOOL
Initialize request from downstream block #1 1 = set Out_CV1 to Inp_CV1InitializationVal.
Default is false.
Inp_CV2InitializeReq
BOOL
Initialize request from downstream block #2 1 = set Out_CV2 to Inp_CV2InitializationVal.
Default is false.
Inp_CV3InitializeReq
BOOL
Initialize request from downstream block #3 1 = set Out_CV3 to Inp_CV3InitializationVal.
Default is false.
Inp_CV4InitializeReq
BOOL
Initialize request from downstream block #4 1 = set Out_CV4 to Inp_CV4InitializationVal.
Default is false.
Inp_CV5InitializeReq
BOOL
Initialize request from downstream block #5 1 = set Out_CV5 to Inp_CV5InitializationVal.
Default is false.
Inp_CV6InitializeReq
BOOL
Initialize request from downstream block #6 1 = set Out_CV6 to Inp_CV6InitializationVal.
Default is false.
Inp_CV7InitializeReq
BOOL
Initialize request from downstream block #7 1 = set Out_CV7 to Inp_CV7InitializationVal.
Default is false.
Inp_CV8InitializeReq
BOOL
Initialize request from downstream block #8 1 = set Out_CV8 to Inp_CV8InitializationVal.
Default is false.
Cfg_HasCV2
BOOL
1 = Output CV #2 is connected.
Default is true.
Cfg_HasCV3
BOOL
1 = Output CV #3 is connected.
Default is false.
Cfg_HasCV4
BOOL
1 = Output CV #4 is connected.
Default is false.
Cfg_HasCV5
BOOL
1 = Output CV #5 is connected.
Default is false.
Cfg_HasCV6
BOOL
1 = Output CV #6 is connected.
Default is false.
Cfg_HasCV7
BOOL
1 = Output CV #7 is connected.
Default is false.
Cfg_HasCV8
BOOL
1 = Output CV #8 is connected.
Default is false.
Cfg_FixedInitializationVal
REAL
Fixed initialization value (in Inp_CV engineering units), used if Cfg_UseFixedInitialization = 1. Valid = any float.
Default is 0.0.
Cfg_UseFixedInitialization
BOOL
1 = Use Cfg_UseFixedInitialization to initialize primary, 0 = use Inp_CV1InitializationVal.
Default is false.
Cfg_ShedHold
BOOL
1 = Hold output on Inf / NaN input, 0 = copy Inf / NaN through.
Default is false.
Cfg_HasMoreObj
BOOL
1 = Tells HMI an object with more information is available.
Default is false.
Cfg_HasCVNav
BOOL
1 = Tells HMI to enable navigation to a connected CV object.
Default is false.
Cfg_HasNav
SINT
Set bits indicate which navigation buttons are enabled .0=CV1, .1=CV2, ... .7=CV8.
Default is 0.
Cfg_CVEUMin
REAL
Input CV minimum in engineering units (for scaling). Valid = any float not equal to Cfg_CVEUMax.
Default is 0.0.
Cfg_CVEUMax
REAL
Input CV maximum in engineering units (for scaling). Valid = any float not equal to Cfg_CVEUMin.
Default is 100.0.
Cfg_CVLoLim
REAL
Input CV minimum, Lo clamp (Inp engineering units). Valid = any float less than or equal to Cfg_CVHiLim.
Default is 0.0.
Cfg_CVHiLim
REAL
Input CV maximum, Hi clamp (Inp engineering units). Valid = any float greater than or equal to Cfg_CVLoLim.
Default is 100.0.
Cfg_CVRoCLim
REAL
Program setting for input CV rate of change limit, increase or decrease (Inp engineering units/seconds). Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_CV1Ratio
REAL
Configuration for CV1 ratio (m in mx+b). Valid = any float.
Default is -2.0.
Cfg_CV1Offset
REAL
Configuration for CV1 offset (b in mx+b). Valid = any float.
Default is 100.0.
Cfg_CV1LoLim
REAL
Output CV #1 minimum in engineering units (for clamping). Valid = any float, Cfg_CV1LoLim<= Cfg_CV1HiLim.
Default is 0.0.
Cfg_CV1HiLim
REAL
Output CV #1 maximum in engineering units (for clamping). Valid = any float, Cfg_CV1HiLim>= Cfg_CV1LoLim.
Default is 100.0.
Cfg_CV1TakeupRate
REAL
Rate (engineering units/seconds) at which CV1 bias is taken up after Inp_CV1InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV2Ratio
REAL
Configuration for CV2 ratio (m in mx+b). Valid = any float.
Default is 2.0.
Cfg_CV2Offset
REAL
Configuration for CV2 offset (b in mx+b). Valid = any float.
Default is -100.0.
Cfg_CV2LoLim
REAL
Output CV #2 minimum in engineering units (for clamping). Valid = any float, Cfg_CV2LoLim<= Cfg_CV2HiLim.
Default is 0.0.
Cfg_CV2HiLim
REAL
Output CV #2 maximum in engineering units (for clamping). Valid = any float, Cfg_CV2HiLim>= Cfg_CV2LoLim.
Default is 100.0.
Cfg_CV2TakeupRate
REAL
Rate (engineering units/seconds) at which CV2 bias is taken up after Inp_CV2InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV3Ratio
REAL
Configuration for CV3 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV3Offset
REAL
Configuration for CV3 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV3LoLim
REAL
Output CV #3 minimum in engineering units (for clamping). Valid = any float, Cfg_CV3LoLim<= Cfg_CV3HiLim.
Default is 0.0.
Cfg_CV3HiLim
REAL
Output CV #3 maximum in engineering units (for clamping). Valid = any float, Cfg_CV3HiLim>= Cfg_CV3LoLim.
Default is 100.0.
Cfg_CV3TakeupRate
REAL
Rate (engineering units/seconds) at which CV3 bias is taken up after Inp_CV3InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV4Ratio
REAL
Configuration for CV4 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV4Offset
REAL
Configuration for CV4 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV4LoLim
REAL
Output CV #4 minimum in engineering units (for clamping). Valid = any float, Cfg_CV4LoLim<= Cfg_CV4HiLim.
Default is 0.0.
Cfg_CV4HiLim
REAL
Output CV #4 maximum in engineering units (for clamping). Valid = any float, Cfg_CV4HiLim>= Cfg_CV4LoLim.
Default is 100.0.
Cfg_CV4TakeupRate
REAL
Rate (engineering units/seconds) at which CV4 bias is taken up after Inp_CV4InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV5Ratio
REAL
Configuration for CV5 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV5Offset
REAL
Configuration for CV5 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV5LoLim
REAL
Output CV #5 minimum in engineering units (for clamping). Valid = any float, Cfg_CV5LoLim<= Cfg_CV5HiLim.
Default is 0.0.
Cfg_CV5HiLim
REAL
Output CV #5 maximum in engineering units (for clamping). Valid = any float, Cfg_CV5HiLim>= Cfg_CV5LoLim.
Default is 100.0.
Cfg_CV5TakeupRate
REAL
Rate (engineering units/seconds) at which CV5 bias is taken up after Inp_CV5InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV6Ratio
REAL
Configuration for CV6 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV6Offset
REAL
Configuration for CV6 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV6LoLim
REAL
Output CV #6 minimum in engineering units (for clamping). Valid = any float, Cfg_CV6LoLim<= Cfg_CV6HiLim.
Default is 0.0.
Cfg_CV6HiLim
REAL
Output CV #6 maximum in engineering units (for clamping). Valid = any float, Cfg_CV6HiLim>= Cfg_CV6LoLim.
Default is 100.0.
Cfg_CV6TakeupRate
REAL
Rate (engineering units/seconds) at which CV6 bias is taken up after Inp_CV6InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV7Ratio
REAL
Configuration for CV7 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV7Offset
REAL
Configuration for CV7 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV7LoLim
REAL
Output CV #7 minimum in engineering units (for clamping). Valid = any float, Cfg_CV7LoLim<= Cfg_CV7HiLim.
Default is 0.0.
Cfg_CV7HiLim
REAL
Output CV #7 maximum in engineering units (for clamping). Valid = any float, Cfg_CV7HiLim>= Cfg_CV7LoLim.
Default is 100.0.
Cfg_CV7TakeupRate
REAL
Rate (engineering units/seconds) at which CV7 bias is taken up after Inp_CV7InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CV8Ratio
REAL
Configuration for CV8 ratio (m in mx+b). Valid = any float.
Default is 1.0.
Cfg_CV8Offset
REAL
Configuration for CV8 offset (b in mx+b). Valid = any float.
Default is 0.0.
Cfg_CV8LoLim
REAL
Output CV #8 minimum in engineering units (for clamping). Valid = any float, Cfg_CV8LoLim<= Cfg_CV8HiLim.
Default is 0.0.
Cfg_CV8HiLim
REAL
Output CV #8 maximum in engineering units (for clamping). Valid = any float, Cfg_CV8HiLim>= Cfg_CV8LoLim.
Default is 100.0.
Cfg_CV8TakeupRate
REAL
Rate (engineering units/seconds) at which CV8 bias is taken up after Inp_CV8InitializeReq = 0. Valid = 0.0 to maximum positive float.
Default is 1.0.
Cfg_CVDecPlcs
SINT
Number of decimal places for CV display (0...6).
Default is 0.
Public Output Members
Data Type
Description
EnableOut
BOOL
Enable output. This output state always reflects EnableIn input state.
Out_CV1
REAL
Output to downstream block #1 (out 1 engineering units).
Out_CV2
REAL
Output to downstream block #2 (out 2 engineering units).
Out_CV3
REAL
Output to downstream block #3 (out 3 engineering units).
Out_CV4
REAL
Output to downstream block #4 (out 4 engineering units).
Out_CV5
REAL
Output to downstream block #5 (out 5 engineering units).
Out_CV6
REAL
Output to downstream block #6 (out 6 engineering units).
Out_CV7
REAL
Output to downstream block #7 (out 7 engineering units).
Out_CV8
REAL
Output to downstream block #8 (out 8 engineering units).
Out_CVInitializationVal
REAL
Initialization value to upstream block (Inp_CV engineering units).
Out_CVInitializeReq
BOOL
Initialization request to upstream block (1 = initialize).
Val_CVEUMin
REAL
Minimum of scaled range = minimum (Cfg_CVEUMin, Cfg_CVEUMax).
Val_CVEUMax
REAL
Maximum of scaled range = maximum (Cfg_CVEUMin, Cfg_CVEUMax).
Val_InpCV
REAL
Value of Inp_CV, not clamped or ramped (engineering units).
Val_CV
REAL
Value of CV after clamping and ramping (engineering units).
Val_MinCVIn1
REAL
Input CV at minimum of CV1 output (for HMI use).
Val_MaxCVIn1
REAL
Input CV at maximum of CV1 output (for HMI use).
Val_MinCVIn2
REAL
Input CV at minimum of CV2 output (for HMI use).
Val_MaxCVIn2
REAL
Input CV at maximum of CV2 output (for HMI use).
Val_MinCVIn3
REAL
Input CV at minimum of CV3 output (for HMI use).
Val_MaxCVIn3
REAL
Input CV at maximum of CV3 output (for HMI use).
Val_MinCVIn4
REAL
Input CV at minimum of CV4 output (for HMI use).
Val_MaxCVIn4
REAL
Input CV at maximum of CV4 output (for HMI use).
Val_MinCVIn5
REAL
Input CV at minimum of CV5 output (for HMI use).
Val_MaxCVIn5
REAL
Input CV at maximum of CV5 output (for HMI use).
Val_MinCVIn6
REAL
Input CV at minimum of CV6 output (for HMI use).
Val_MaxCVIn6
REAL
Input CV at maximum of CV6 output (for HMI use).
Val_MinCVIn7
REAL
Input CV at minimum of CV7 output (for HMI use).
Val_MaxCVIn7
REAL
Input CV at maximum of CV7 output (for HMI use).
Val_MinCVIn8
REAL
Input CV at minimum of CV8 output (for HMI use).
Val_MaxCVIn8
REAL
Input CV at maximum of CV8 output (for HMI use).
Sts_Initialized
BOOL
1 = Instruction is initialized. Use Inp_InitializeReq to reinitialize.
Sts_CVInfNaN
BOOL
1 = Inp_CV is infinite or not a number (1.$, 1.#NaN).
Sts_CVLimited
BOOL
1 = Output CV clamped at configured maximum/minimum.
Sts_CV1InitializationInfNaN
BOOL
1 = Inp_CV1InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV1Limited
BOOL
1 = Output CV1 clamped at configured maximum/minimum.
Sts_CV2InitializationInfNaN
BOOL
1 = Inp_CV2InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV2Limited
BOOL
1 = Output CV2 clamped at configured maximum/minimum.
Sts_CV3InitializationInfNaN
BOOL
1 = Inp_CV3InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV3Limited
BOOL
1 = Output CV3 clamped at configured maximum/minimum.
Sts_CV4InitializationInfNaN
BOOL
1 = Inp_CV4InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV4Limited
BOOL
1 = Output CV4 clamped at configured maximum/minimum.
Sts_CV5InitializationInfNaN
BOOL
1 = Inp_CV5InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV5Limited
BOOL
1 = Output CV5 clamped at configured maximum/minimum.
Sts_CV6InitializationInfNaN
BOOL
1 = Inp_CV6InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV6Limited
BOOL
1 = Output CV6 clamped at configured maximum/minimum.
Sts_CV7InitializationInfNaN
BOOL
1 = Inp_CV7InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV7Limited
BOOL
1 = Output CV7 clamped at configured maximum/minimum.
Sts_CV8InitializationInfNaN
BOOL
1 = Inp_CV8InitializationVal is infinite or not a number (1.$, 1.#NaN).
Sts_CV8Limited
BOOL
1 = Output CV8 clamped at configured maximum/minimum.
Sts_Err
BOOL
1 = Error in configuration: See detail bits (Sts_Errxxx) for reason.
Sts_ErrLim
BOOL
1 = Error in configuration: CV clamp limits crossed (maximum<minimum).
Sts_ErrEU
BOOL
1 = Error in configuration: CV scale EU minimum = maximum.
Sts_ErrCV1Lim
BOOL
1 = Error in configuration: CV1 clamp limits crossed (maximum<minimum).
Sts_ErrCV2Lim
BOOL
1 = Error in configuration: CV2 clamp limits crossed (maximum<minimum).
Sts_ErrCV3Lim
BOOL
1 = Error in configuration: CV3 clamp limits crossed (maximum<minimum).
Sts_ErrCV4Lim
BOOL
1 = Error in configuration: CV4 clamp limits crossed (maximum<minimum).
Sts_ErrCV5Lim
BOOL
1 = Error in configuration: CV5 clamp limits crossed (maximum<minimum).
Sts_ErrCV6Lim
BOOL
1 = Error in configuration: CV6 clamp limits crossed (maximum<minimum).
Sts_ErrCV7Lim
BOOL
1 = Error in configuration: CV7 clamp limits crossed (maximum<minimum).
Sts_ErrCV8Lim
BOOL
1 = Error in configuration: CV8 clamp limits crossed (maximum<minimum).
Initialization
The instruction is normally initialized in the instruction first run. Request re-initialization by setting Inp_InitializeReq = 1. For proper initialization, when adding the instruction while performing an online edit of the code, make sure that Inp_InitializeReq = 1, the default value.
Configuration of Strings for HMI
Configure strings for HMI faceplates (FT View) and for the
Logix Designer
configuration dialog box. The strings are set to extended properties of tag items. Configure the strings in
Logix Designer
only.
  • Description
  • Label for graphic symbol
  • Display Library for HMI Faceplate call-up
  • Instruction name
  • Area name
  • URL link
  • CV Units
  • Output CV Label CV1
  • Output CV Label CV2
  • Output CV Label CV3
  • Output CV Label CV4
  • Output CV Label CV5
  • Output CV Label CV6
  • Output CV Label CV7
  • Output CV Label CV8
  • CV1 EU (Engineering Units)
  • CV2 EU
  • CV3 EU
  • CV4 EU
  • CV5 EU
  • CV6 EU
  • CV7 EU
  • CV8 EU
  • Allow Navigation Object Tag Name Input CV
  • Allow Navigation Object Tag Name CV1
  • Allow Navigation Object Tag Name CV2
  • Allow Navigation Object Tag Name CV3
  • Allow Navigation Object Tag Name CV4
  • Allow Navigation Object Tag Name CV5
  • Allow Navigation Object Tag Name CV6
  • Allow Navigation Object Tag Name CV7
  • Allow Navigation Object Tag Name CV8
Monitor the PFO Instruction
Use the operator faceplate from the PlantPAx library of Process objects for monitoring.
Affects Math Status Flags
No.
Major/Minor Faults
None specific to this instruction. See Index Through Arrays for array-indexing faults.
Execution
Ladder Diagram
Condition/State
Action Taken
Prescan
Rung-condition-out is cleared to false.
Instruction first run
The instruction executes normally.
Rung-condition-in is false
Rung-condition-out is cleared to false.
Rung-condition-in is true
Set rung-condition-out to rung-condition-in.
The instruction executes.
Postscan
Rung-condition-out is cleared to false.
Function Block Diagram
Condition/State
Action Taken
Prescan
EnableOut is cleared to false.
Instruction first run
The instruction executes normally.
Instruction first scan
See Instruction first run in the Function Block Diagram table.
EnableIn is false
EnableOut is cleared to false.
EnableIn is true
EnableOut is set to true.
The instruction executes.
Postscan
EnableIn and EnableOut bits are cleared to false.
Structured Text
In Structured Text, EnableIn is always true during normal scan. The instruction executes when it is in the control path activated by the logic.
Condition/State
Action Taken
Prescan
See Prescan in the Function Block Diagram table.
Instruction first run
See Instruction first run in the Function Block Diagram table.
EnableIn is true
See EnableIn is true in the Function Block Diagram table.
Postscan
See Postscan in the Function Block Diagram table.
Example
In this example, the PFO instruction to implement a split range PID control strategy to control temperature of a processing vessel. The heat exchanger to the vessel jacket is fed by a steam valve to heat or a glycol valve to cool. One PID controls the temperature. The example assumes that the relative process gain between each valve and the temperature is the same.
Ladder Diagram
PFO_example_ladder_v33
Function Block Diagram
PFO_example_FBD_v33
Structured Text
TI0921.Inp_PVData:=I_TE0921;
PAI(TI0921);
TIC0921.PV:= TI0921.Val;
TIC0921.PVFault:=TI0921.Sts_PVUncertain;
PIDE(TIC0921);
TY0921.Inp_CV:=TIC0921.CVEU;
TIC0921.CVInitReq:=TY0921.Out_CVInitializeReq;
TIC0921.CVInitValue:=TY0921.Out_CVInitializationVal;
O_TV0921A:=TY0921.Out_CV1;
O_TV0921B:=TY0921.Out_CV2;
PFO(TY0921);
Provide Feedback
Have questions or feedback about this documentation? Please submit your feedback here.