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
Function Block Diagram
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
Function Block Diagram
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