Process Proportional + Integral + Derivative (PPID)

This information applies to the CompactLogix 5380P and ControlLogix 5580P controllers.
Use the Process Proportional + Integral + Derivative (PPID) instruction to manipulate the Control Variable (CV) in regulatory control loops in response to Process Variable (PV) readings and Setpoint (SP, the target PV) settings.
The CV is typically used as a cascade setpoint for a secondary, or inner, control loop or is sent to an Analog Output channel on an IO card.
The PPID instruction integrates functions of the existing PID, PIDE, and P_PIDE AOI into a single built-in instruction and adds additional features.
The PPID instruction:
  • Calculates CV with velocity PID algorithm. Velocity algorithm is also known as incremental algorithm. Velocity algorithm computes the CV value by summing
    D
    PTerm,
    D
    ITerm,
    D
    DTerm,
    D
    FF, and CV from the previous execution of the instruction. When Inp_UseCVPrev is set, CV previous is set equal to Inp_CVPrev. When Inp_UseFFPrev is set, previous FF is set equal to Inp_FFPrev. This lets you preset CV to a specified value before output CV value is computed, CV = CV previous +
    D
    PTerm +
    D
    ITerm +
    D
    DTerm +
    D
    FF. Velocity form of the PID algorithm supports bumpless transfer in parameter change.
  • Provides an option to suppress bumpless transfer in gain change. When this option is selected the PID calculation behaves as a position PID algorithm where control action changes with loop error and not error change.
  • Uses a two degrees of freedom PID formula for calculating CV with proportional PTerm action derived from weighted SP and PV difference (b*SP-PV), integral ITerm action derived from control error (SP-PV), and derivative DTerm action derived from change in weighted SP and PV difference (c*SP-PV). The change in weight setting in run-time is bumpless.
  • Uses an error-squared (option) algorithm with CV more aggressive when error rises. The use of error square is restricted to PTerm.
  • Provides Direct/Reverse action (option). The action is Direct when CV rises with PV increase (Cfg_CtrlAction=1). The action is Reverse if CV decreases with PV increase (Cfg_CtrlAction=0).
  • Allows deviation deadband. CV is not sensitive to loop error variation when within the band around zero error. Configured band levels allow for additional hysteresis. The deadband level for PV approaching SP (Cfg_DevDBEnter) may be set lower than deadband level for PV going away from SP (Cfg_DevDB). The active deadband status is set for PV within deadband. Provides an option to stop CV moves or just stop the integration while leaving proportional and derivative action live when in deadband (Cfg_UseIntegDevDB).
  • Displays engineering units on the
    Logix Designer
    application interface. SP and PV values are displayed and entered in PV engineering units. Val_CVSet for CV target and Val_CVOut for CV output are displayed and entered in CV engineering units. The PID algorithm uses all variables scaled to percent of span internally and these values are also available as outputs Val_PVPercent, Val_SPPercent, Val_EPercent, and Val_CVPercent.
  • Is configurable for Independent and Dependent gains. Interpretation of values stored in PGain, IGain and DGain tags depends on the instruction configuration.
    • Independent gains configuration: PGain = Kp … proportional gain, IGain = Ki … integral gain [1/minute], DGain = Kd … derivative gain [minutes].
    • Dependent gains configuration: PGain = K … controller gain, IGain = Ti … reset time [minutes], DGain = Td … rate time [minutes].
      Use independent gains when you want the three gains for the proportional, integral, and derivative terms to operate independently. Use dependent gains when you want an overall controller gain that affects all three terms (P, I, and D).
  • Provides optional derivative smoothing (derivative limit at high frequencies). A pure derivative gives a very large amplification of measurement noise. Both dependent and independent PID algorithms can be configured for limiting the derivative term gain at high frequencies.
  • Guarantees anti-windup. The PID algorithm is equipped with integral (reset) windup prevention (reset feedback). Internal windup when CV saturates is treated automatically. External windup of the inner loop indicated by Inp_WindupHi or Inp_WindupLo is also treated if the inputs are in use.
  • Allows external CV tracking (option). When Cfg_UseCVTrack is set or the inner loop is not available for the PPID instruction (Inp_InnerAvailable is false), the CV tracks Inp_CVTrack value. The option is useful when the inner (secondary) loop in cascade is not able to follow CV value calculated by this outer (primary) loop PID, and Inp_WindupHi or Inp_WindupLo is either not used or not true. Tracking is allowed with configured dynamics specified in Cfg_CVTrackGain. CVTrackGain is treated as tracking gain Kt (1/minute) for independent or tracking time constant Tt (minutes) for dependent gains.
  • Provides configured SP clamping and ramping: clamping (in PVEU) and ramping (in PVEU/second) of the setpoint at specified limits (separate increase and decrease rate of change limits).
  • Provides configured CV clamping and ramping: clamping (in CVEU) and ramping (in CVEU/second) of CV at specified limits (separate increase and decrease rate of change limits).
  • Enables CV Hand feedback.
  • Supports operation from these command sources: Hand, Maintenance, Override, and full loop control (Cascade, Auto with Setpoint, Manual with CV) from External, Program, and Operator.
  • Supports three automatic (Auto, Cascade, Cascade/Ratio) loop modes and one manual (Manual) loop mode.
  • In Auto loop mode, setpoint (SP) in engineering units (PVEU) is read from the Program, Operator, Override or External entry. You can also enter a setpoint target in PV engineering units (PVEU) and ramp time (seconds) and use a command to trigger a built-in setpoint ramp.
  • In Manual loop mode the control variable (CV) in engineering units is read from the Program, Operator, Override, or External entry.
  • Monitors interlock conditions which cause output CV and SP to shed. CV shed can be configured to hold the last good CV value or to use the configured safe value. SP is shed to current PV.
  • Monitors I/O communication faults.
  • Supports Power-up and Initialize operations. In Power-up, the SP, CV, and Loop modes are set to configured values.
  • Monitors alarm conditions for Interlock Trip, Loop Failure, High-High Deviation, High Deviation, Low Deviation, and Low-Low Deviation from the setpoint.
    • High-High Deviation status is raised when the difference between the setpoint and the process variable calculated as PV-SP exceeds configured thresholds.
    • High Deviation status is raised when the difference between the setpoint and the process variable calculated as PV-SP exceeds configured thresholds.
    • Low Deviation status is raised when the difference between the setpoint and the process variable calculated as PV-SP exceeds configured thresholds.
    • Low-Low Deviation status is raised when the difference between the setpoint and the process variable calculated as PV-SP exceeds configured thresholds.
    • Loop Failure status is raised when the PPID indicates a severe configuration error, such as invalid clamping limits, scaling limits, and deadbands. This status is also raised when PV quality is not good enough for the PID loop to work with, and when the I/O Fault input/status is true. This status is also raised when the hand feedback input is reported bad in hand.
    • Interlock Trip status is raised when an interlock not-OK condition causes the output CV to be changed to the configured Interlock CV value or held at its last value. If interlocks are not bypassed, a bypassable interlock or a non-bypassable interlock not-OK condition initiates an interlock trip. If interlocks are bypassed, only a non-bypassable interlock not-OK condition initiates an interlock trip.
Available Languages
Ladder Diagram
PPID_avail_ladder_v33
Function Block Diagram
PPID_avail_fbd_v33
Structured Text
PPID(PPID tag, BusObj);
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_PID
tag
Data structure required for proper operation of instruction.
BusObj
BUS_OBJ
tag
Bus component. May be null.
P_PID Structure
Public members are standard, visible tag members that are programmatically accessible. Private, or hidden, members are used in HMI faceplates and are not programmatically accessible. Private members are listed in separate tables after public members.
Public input member
Data Type
Default Value
Description
EnableIn
BOOL
True
Enable input.
Ladder Diagram:
Corresponds to the rung condition.
Default is true.
Inp_InitializeReq
BOOL
True
1 = Request to initialize the instruction. The instruction is normally initialized in instruction first run. Use this request to re-initialize. When Inp_InitializeReq = 1, power up configuration values are used. The instruction clears this operand automatically.
Default is true.
Inp_OwnerCmd
DINT
0
Owner device command:
0 = None,
Inp_OwnerCmd.10 = Operator Lock,
Inp_OwnerCmd.11 = Operator Unlock,
Inp_OwnerCmd.12 = Program Lock,
Inp_OwnerCmd.13 = Program Unlock,
Inp_OwnerCmd.14 = Acquire Maintenance,
Inp_OwnerCmd.15 = Release Maintenance,
Inp_OwnerCmd.16 = Acquire External,
Inp_OwnerCmd.17 = Release External,
Inp_OwnerCmd.29 = Echo.
Default is 0.
Inp_PV
REAL
0.0
Process Variable (PVEU).
Valid any float.
Default is 0.0.
Inp_CascSP
REAL
0.0
SP in Cascade loop mode, independent PV in Ratio loop mode (PVEU).
Valid any float.
Default is 0.0.
Inp_FF
REAL
0.0
FeedForward term (CVEU).
Valid any float between -(Cfg_CVEUMax-Cfg_CVEUMin) and (Cfg_CVEUMax-Cfg_CVEUMin).
Default is 0.0.
Inp_FFPrev
REAL
0.0
Previous scan FeedForward (CVEU) when Inp_UseFFPrev = 1.
Valid any float between -(Cfg_CVEUMax-Cfg_CVEUMin) and (Cfg_CVEUMax-Cfg_CVEUMin).
Default is 0.0.
Inp_CVTrack
REAL
0.0
CV to track if Cfg_UseCVTrack = 1 or if Inp_InnerAvailable = 0 (CVEU).
Valid any float.
Default is 0.0.
Inp_CVInitialVal
PVREAL
0.0
Value to initialize the CV to per request Inp_UseCVInitialVal=1 (CVEU).
Valid any float.
Default is 0.0.
Inp_CVPrev
REAL
0.0
Previous scan CV, Val_CVOut (CVEU).
Valid any float between Cfg_CVEUMin and Cfg_CVEUMax.
Default is 0.0.
Inp_UseFFPrev
BOOL
False
1 = Use Inp_FFPrev as previous FF value,
0 = Use last scan Inp_FF value as previous FF value.
Default is false.
Inp_UseCVInitialVal
BOOL
False
1 = Initialize CV to Inp_CVInitialVal.
Default is false.
Inp_UseCVPrev
BOOL
False
1 = Use Inp_CVPrev as previous CV value,
0 = Use last scan value.
Default is false.
Inp_WindupHi
BOOL
False
Windup high signal. When true, the CV cannot integrate in a positive direction. The signal is typically obtained from the Windup hi output from a inner loop.
Default is false.
Inp_WindupLo
BOOL
False
Windup low signal. When true, the CV cannot integrate in a negative direction. The signal is typically obtained from the Windup low output from a inner loop.
Default is false.
Inp_InnerAvailable
BOOL
True
1 = Inner loop is available.
0 = Inner loop is not available, PPID tracks Inp_CVTrack, typically inner loop SP or actuator position.
Default is true.
Inp_IntlkOK
BOOL
True
1 = Bypassable interlocks OK, CV can be set.
Default is true.
Inp_NBIntlkOK
BOOL
True
1 = Non-Bypassable interlocks OK, CV can be set.
Default is true.
Inp_IntlkAvailable
BOOL
False
1 = Interlock availability OK.
Default is false.
Inp_IntlkTripInh
BOOL
False
1 = Inhibit interlock trip status.
Default is false.
Inp_RdyReset
BOOL
False
1 = Related object, reset by this object, is ready to be reset. Ready for ORdy_Reset, enables HMI button.
Default is false.
Inp_CVIOFault
BOOL
False
1 = CV I/O communications status bad,
0 = OK.
Default is false.
Inp_PVBad
BOOL
False
1 = PV quality or PV I/O communications status bad,
0 = OK.
Default is false.
Inp_PVUncertain
BOOL
False
1 = PV value not reliable,
0 = OK.
Default is false.
Inp_PVSrcQ
SINT
0
Inp_PV source status and quality:
0 = Good, live, confirmed good,
1 = Good, live, assumed good,
2 = Good, no feedback, assumed good,
8 = Test, simulated,
9 = Test, loopback,
10 = Test, manually entered,
16 = Uncertain, live, off-spec,
17 = Uncertain, substituted at device,
18 = Uncertain, substituted at instruction,
19 = Uncertain, using last known good,
20 = Uncertain, using replacement value,
32 = Bad, signal failure,
33 = Bad, channel fault,
34 = Bad, module/communications fault,
35 = Bad, invalid configuration.
Default is 0.
Inp_PVNotify
SINT
0
Related PV object alarm priority and acknowledgement status:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Default is 0.
Inp_CVNotify
SINT
0
Related CV object alarm priority and acknowledgement status:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Default is 0.
Inp_CascSPNotify
SINT
0
Related Cascade SP object alarm priority and acknowledgement status:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Default is 0.
Inp_HiHiDevGate
BOOL
True
The gate input used for HiHi deviation status detection:
1 = The corresponding analog input threshold monitoring is enabled,
0 = Detection is disabled and the corresponding status output is forced off.
Default is true.
Inp_HiDevGate
BOOL
True
The gate input used for Hi deviation status detection:
1 = The corresponding analog input threshold monitoring is enabled,
0 = Detection is disabled and the corresponding status output is forced off.
Default is true.
Inp_LoDevGate
BOOL
True
The gate input used for Lo deviation status detection:
1 = The corresponding analog input threshold monitoring is enabled,
0 = Detection is disabled and the corresponding status output is forced off.
Default is true.
Inp_LoLoDevGate
BOOL
True
The gate input used for LoLo deviation status detection:
1 = The corresponding analog input threshold monitoring is enabled,
0 = Detection is disabled and the corresponding status output is forced off.
Default is true.
Inp_Hand
BOOL
False
1 = Acquire Hand,
0 = Release Hand.
Default is false.
Inp_HandFdbk
REAL
0.0
CV feedback used when owner is Hand (CVEU).
Valid any float.
Default is 0.0.
Default is false.
Inp_HandFdbkBad
BOOL
False
1 = CV hand feedback quality or CV hand feedback I/O communications status bad,
0 = OK.
Default is false.
Inp_Ovrd
BOOL
False
1 = Acquire Override (higher priority program logic),
0 = Release Override.
Default is false.
Inp_OvrdCmd
SINT
0
Loop mode command in Override:
0 = None,
1 = Manual,
2 = Auto,
3 = Cascade,
4 = Normal,
5 = Start SP ramp,
6 = Stop SP ramp.
Default is 0.
Inp_OvrdSP
REAL
0.0
Loop Auto SP in Override (PVEU).
Valid any float.
Default is 0.0.
Inp_OvrdSPTarget
REAL
0.0
Override setting for SP target in ramp wizard (PVEU).
Valid any float.
Default is 0.0.
Inp_OvrdSPRampTime
REAL
0.0
Override setting for time to reach SP target in ramp wizard (seconds).
Valid = 0.0 to 28800.0 seconds.
Default is 0.0.
Inp_OvrdRatio
REAL
1.0
Loop Ratio in Override (unitless).
Valid = 0.0 to maximum positive float.
Default is 1.0.
Inp_OvrdCV
REAL
0.0
Loop Manual CV in Override (CVEU).
Valid any float.
Default is 0.0.
Inp_ExtInh
BOOL
False
1 = Inhibit External acquisition,
0 = Allow External acquisition.
Default is false.
Inp_Reset
BOOL
False
1 = Reset shed latches and latched alarms whose conditions have returned to normal.
Default is false.
Cfg_AllowDisable
BOOL
True
1 = Allow Maintenance to disable alarms.
Default is true.
Cfg_AllowShelve
BOOL
True
1 = Allow Operator to shelve alarms.
Cfg_HasRatio
BOOL
False
1 = Cascade loop mode is Ratio,
0 = Cascade loop mode is Cascade.
Default is false.
Cfg_HasCasc
BOOL
False
1 = Enable the loop to be placed into Cascade/Ratio mode.
Default is false.
Cfg_HasAuto
BOOL
True
1 = Enable the loop to be placed into Auto mode.
Default is true.
Cfg_HasMan
BOOL
True
1 = Enable the loop to be placed into Manual mode.
Default is true.
Cfg_HasSPRamp
BOOL
False
1 = Enable the SP ramp wizard function.
Default is false.
Cfg_ExecTime
REAL
0.0
Execution period for PID algorithm (second).
Configuring the instruction for execution period = 0.0 (default) or period shorter than instruction scan time has no effect and the PID algorithm executes every scan. For the real execution period check Val_ExecTime.
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_PGain
REAL
0.0
Proportional gain Kp for independent gains or loop gain Kc for dependent gains (unitless).
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_IGain
REAL
0.0
Integral gain Ki (1/minute) for independent or reset time Ti (minutes/repeat) for dependent gains.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_DGain
REAL
0.0
Derivative gain Kd (minute) for independent or rate time Td (minute) for dependent gains.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_CVTrackGain
REAL
0.0
Tracking gain Kt (1/minute) for independent or tracking time constant Tt (minutes) for dependent gains for CV to track Inp_CVTrack if Cfg_UseCVTrack = 1.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_UseCVTrack
BOOL
False
1 = Use Inp_CVTrack reset feedback in tracking, e.g. if PPID output is significantly faster than actuator or inner loop or in override select control.
Cfg_PSPWeight
REAL
1.0
Weight on SP in proportional term in 2DOF PID, beta gain.
Valid = 0.0 to 1.5.
Default is 1.0.
Cfg_DSPWeight
REAL
0.0
Weight on SP in derivative term in 2DOF PID, gamma gain.
Valid = 0.0 to 1.5.
Default is 0.0.
Cfg_PVTrack
BOOL
False
1 = SP tracks PV in Manual,
0 = No PV tracking.
Default is false.
Cfg_GainBumpless
BOOL
True
1 = CV response to PGain and DGain change is bumpless,
0 = CV response to PGain and DGain change is not bumpless (like in position algorithm).
Default is true.
Cfg_PositionBump
BOOL
False
1 = Position form of PD algorithm without bumpless transfer from Manual to Auto or Cascade. Enabled only when Cfg_IGain = 0. Change of proportional gain is not bumpless.
0 = Velocity form of PID algorithm with bumpless transfer from Manual to Auto or Cascade.
Default is false.
Cfg_UseESquared
BOOL
False
1 = Use error squared for proportional action.
Default is false.
Cfg_CtrlAction
BOOL
False
1 = Control action on E = PV-SP, direct action
0 = Control action on E = SP-PV, reverse action.
Default is false.
Cfg_Dependent
BOOL
False
1 = Dependent gains equation,
0 = Independent gains equation.
Default is false.
Cfg_UseDSmoothing
BOOL
False
1 = Use derivative smoothing.
Default is false.
Cfg_DevDB
REAL
0.0
PV deviation deadband for PV going away from SP (PVEU).
Valid = 0.0 to maximum positive float.
Cfg_DevDBEnter
REAL
0.0
PV deviation deadband for PV approaching SP (PVEU).
Valid = 0.0 to Cfg_DevDB.
Cfg_UseIntegDevDB
BOOL
False
1 = Only integral term is suspended when PV deviation deadband status is active, proportional and derivative terms remain operational,
0 = All PID terms are suspended and CV does not move when PV deviation deadband status is active.
Default is false.
Cfg_SkipCVManLim
BOOL
True
1 = Skip CV clamping in Manual loop mode and for CV from shed,
0 = Always apply CV clamping.
Cfg_SkipCVManRoC
BOOL
True
1 = Skip CV rate-of-change limiting in Manual loop mode and for CV from shed,
0 = Always apply CV rate-of-change limiting.
Cfg_InitializeToMan
BOOL
False
1 = Go to Manual loop mode when initialization is requested (Inp_UseCVInitialVal=1).
Default is false.
Cfg_SetTrack
BOOL
True
1 = Program/Operator/External settings tracking,
0 = No settings tracking.
Default is true.
Cfg_SetTrackOvrdHand
BOOL
False
1 = Program/Operator/External settings track Override/Hand inputs (CV, SP, Ratio).
Default is false.
Cfg_HasIntlkObj
BOOL
False
1 = Tells HMI an interlock object (PINTLK) is connected to Inp_IntlkOK, InpNBIntlkOK, Inp_IntlkAvailable, Inp_IntlkTripInh and Inp_RdyReset.
Default is false.
Cfg_HasMoreObj
BOOL
False
1 = Tells HMI an object with more info is available.
Default is false.
Cfg_HasHistTrend
SINT
0
Has historical trend. This enables navigation to the device historical trend faceplate from the HMI.
0 = No external historical trend,
1 = Datalog historical trend,
2 = Historian historical trend.
Default is 0.
Cfg_HasCascSPNav
BOOL
False
1 = Tells HMI to enable navigation to a connected cascade SP object.
Default is false.
Cfg_HasPVNav
BOOL
False
1 = Tells HMI to enable navigation to a connected PV object.
Default is false.
Cfg_HasCVNav
BOOL
False
1 = Tells HMI to enable navigation to a connected CV object.
Default is false.
Cfg_HasOper
BOOL
True
1 = Operator (unlocked) exists, can be selected.
Default is true.
Cfg_HasOperLocked
BOOL
True
1 = Operator Locked exists, can be selected.
Default is true.
Cfg_HasProg
BOOL
True
1 = Program (unlocked) exists, can be selected.
Default is true.
Cfg_HasProgLocked
BOOL
True
1 = Program Locked exists, can be selected.
Default is true.
Cfg_HasExt
BOOL
False
1 = External exists, can be selected.
Default is false.
Cfg_HasMaint
BOOL
True
1 = Maintenance exists, can be selected.
Default is true.
Cfg_HasMaintOoS
BOOL
True
1 = Maintenance Out of Service exists, can be selected.
Default is true.
Cfg_OvrdOverLock
BOOL
True
1 = Override supersedes Program/Operator Lock,
0 = Do not override Lock.
Default is true.
Cfg_ExtOverLock
BOOL
False
1 = External supersedes Program/Operator Lock,
0 = Do not override Lock.
Default is false.
Cfg_eKeepLM
SINT
0
Loop mode ownership:
0 = Follows command source,
1 = Operator,
2 = Program,
3 = External.
Default is 0.
Cfg_eKeepCV
SINT
0
CV ownership:
0 = Follows command source,
1 = Operator,
2 = Program,
3 = External.
Default is 0.
Cfg_eKeepSP
SINT
0
SP ownership:
0 = Follows command source,
1 = Operator,
2 = Program,
3 = External.
Default is 0.
Cfg_eKeepRatio
SINT
0
Ratio ownership:
0 = Follows command source,
1 = Operator,
2 = Program,
3 = External.
Default is 0.
Cfg_ProgPwrUp
BOOL
False
1 = Power up to Program,
0 = Power up to Operator.
Default is false.
Cfg_ProgNormal
BOOL
False
Normal source:
1 = Program if no requests,
0 = Operator if no requests.
Default is false.
Cfg_PCmdPriority
BOOL
False
Command priority:
1 = Program commands win,
0 = Operator commands win.
Default is false.
Cfg_PCmdProgAsLevel
BOOL
False
1 = PCmd_Prog used as Level (1 = Prog, 0 = Oper).
Default is false.
Cfg_PCmdLockAsLevel
BOOL
False
1 = PCmd_Lock used as Level (1 = Lock, 0 = Unlock).
Default is false.
Cfg_ExtAcqAsLevel
BOOL
False
1 = XCmd_Acq used as Level (XCmd_Acq = 1 acquire external command, XCmd_Acq = 0 release external command).
Default is false.
Cfg_OvrdIntlk
BOOL
False
1 = Override bypasses (ignores) bypassable interlocks.
0 = Override abides by all interlock conditions.
Default is false.
Cfg_SPFailLatch
BOOL
False
1 = Latch in SP fail shed action until Reset,
0 = Return when SP is good.
Default is false.
Cfg_PVFailLatch
BOOL
False
1 = Latch in PV fail shed action until Reset,
0 = Return when PV is good.
Default is false.
Cfg_CVFailLatch
BOOL
False
1 = Latch in CV fail shed action until Reset,
0 = Return when CV is good.
Default is false.
Cfg_LockLM
BOOL
False
Lock loop mode:
1 = Locked in loop mode configured as Normal (see Cfg_NormLM),
0 = Not locked.
Default is false.
Cfg_NormLM
SINT
1
Loop mode defined as Normal:
0 = Disable Normal selection,
1 = Manual,
2 = Auto,
3 = Cascade.
Default is 1.
Cfg_PwrUpLM
SINT
4
Loop mode defined for Powerup:
0 = No change - loop mode, CV and SP are initialized using last (powerdown) values,
1 = Manual,
2 = Auto,
3 = Cascade,
4 = Normal.
Default is 4.
Cfg_PVFailTrigger
SINT
1
PV fail status response on PV quality:
0 = PV fail response on Inp_PVBad OR Inp_PVSrcQ >= 32 (PV bad),
1 = PV fail response on Inp_PVBad OR Inp_PVSrcQ >= 17 AND Inp_PVSrcQ <> 18,
2 = PV fail response on Inp_PVBad OR Inp_PVUncertain OR Inp_PVSrcQ >= 16 AND Inp_PVSrcQ <> 18.
Default is 1.
Cfg_IntlkTripSPAction
SINT
0
Interlock Trip SP action:
0 = None,
1 = Hold last good,
2 = Use Cfg_SPIntlk,
3 = Set SP to current PV.
Default is 0.
Cfg_SPFailSPAction
SINT
1
SP Fail SP action:
1 = Hold last good,
2 = Use Cfg_SPIntlk,
3 = Set SP to current PV.
Default is 1.
Cfg_PVFailSPAction
SINT
0
PV Fail SP action:
0 = None,
1 = Hold last good,
2 = Use Cfg_SPIntlk.
Default is 0.
Cfg_CVFailSPAction
SINT
0
CV Fail SP action:
0 = None,
1 = Hold last good,
2 = Use Cfg_SPIntlk,
3 = Set SP to current PV.
Default is 0.
Cfg_IntlkTripCVAction
SINT
2
Interlock trip CV action:
0 = None,
1 = Hold last good,
2 = Use Cfg_CVIntlk.
Default is 2.
Cfg_SPFailCVAction
SINT
1
SP Fail CV action:
0 = None,
1 = Hold last good,
2 = Use Cfg_CVIntlk.
Default is 1.
Cfg_PVFailCVAction
SINT
1
PV Fail CV action:
1 = Hold last CV,
2 = Use Cfg_CVIntlk.
Default is 1.
Cfg_CVFailCVAction
SINT
1
CV Fail CV action:
1 = Hold last good,
2 = Use Cfg_CVIntlk.
Default is 1.
Cfg_IntlkTripLMAction
SINT
0
Interlock trip loop mode action:
0 = None,
1 = Manual only,
2 = Auto or Manual only.
Default is 0.
Cfg_SPFailLMAction
SINT
0
SP Fail loop mode action:
0 = None,
1 = Manual only,
2 = Auto or Manual only.
Default is 0.
Cfg_PVFailLMAction
SINT
0
PV Fail loop mode action:
0 = none,
1 = Manual only,
2 =Auto or Manual only.
Default is 0.
Cfg_CVFailLMAction
SINT
0
CV Fail loop mode action:
0 = None,
1 = Manual only,
2 = Auto or Manual only.
Default is 0.
Cfg_PVDecPlcs
SINT
2
Number of decimal places for display of PV / SP (up to six).
Default is 2.
Cfg_CVDecPlcs
SINT
2
Number of decimal places for display of CV (up to six).
Default is 2.
Cfg_RatioDecPlcs
SINT
2
Number of decimal places for display of Ratio (up to six).
Default is 2.
Cfg_RatioLoLim
REAL
0.0
Minimum allowed Ratio value (unitless).
Valid any float less than or equal to Cfg_RatioHiLim.
Default is 0.0.
Cfg_RatioHiLim
REAL
1.0
Maximum allowed Ratio value (unitless).
Valid any float greater than or equal to Cfg_RatioLoLim.
Default is 1.0.
Cfg_SPLoLim
REAL
0.0
Minimum allowed SP value (PVEU).
Valid any float less than or equal to Cfg_SPHiLim and greater than or equal to Cfg_PVEUMin.
Default is 0.0.
Cfg_SPHiLim
REAL
100.0
Maximum allowed SP value (PVEU).
Valid any float greater than or equal to Cfg_SPLoLim and less than or equal to Cfg_PVEUMax.
Default is 100.0.
Cfg_SPRoCIncrLim
REAL
0.0
Maximum allowed SP rate of change increasing value (PVEU/second). The SP rate of change is unlimited when increasing if Cfg_SPRoCIncrLim = 0.0.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_SPRoCDecrLim
REAL
0.0
Maximum allowed SP rate of change decreasing value (PVEU/second). The SP rate of change is unlimited when decreasing if Cfg_SPRoCDecrLim = 0.0.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_SkipSPRoCLim
BOOL
False
1 = Skip setpoint RoC limiting in interlock, maintenance and override.
Default is false.
Cfg_SPRampMaxDev
REAL
100.0
If absolute value of deviation exceeds this value, pause SP ramp, 0.0 = Never pause (PVEU).
Valid = 0.0 to maximum positive float.
Default is 100.0.
Cfg_PVEUMin
REAL
0.0
PV minimum value for scaling from engineering units to %, PV at 0% (PVEU).
Valid any float less than Cfg_PVEUMax.
Default is 0.0.
Cfg_PVEUMax
REAL
100.0
PV maximum value for scaling from engineering units to %, PV at 100% (PVEU).
Valid any float greater than Cfg_PVEUMin.
Default is 100.0.
Cfg_CVEUMin
REAL
0.0
CV minimum value for scaling from % to engineering units (CVEU).
Valid any float less than Cfg_CVEUMax.
Default is 0.0.
Cfg_CVEUMax
REAL
100.0
CV maximum value for scaling from % to engineering units (CVEU).
Valid any float greater than Cfg_CVEUMin.
Cfg_CVLoLim
REAL
0.0
Minimum allowed CV value (CVEU).
Valid any float less than or equal to Cfg_CVHiLim and greater than or equal to Cfg_CVEUMin.
Default is 0.0.
Cfg_CVHiLim
REAL
100.0
Maximum allowed CV value (CVEU).
Valid any float greater than or equal to Cfg_CVLoLim and less than or equal to Cfg_CVEUMax.
Default is 100.0.
Cfg_CVRoCIncrLim
REAL
0.0
Maximum allowed CV rate of change increasing value (CVEU/second). The CV rate of change is unlimited when increasing if Cfg_CVRoCIncrLim = 0.0
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_CVRoCDecrLim
REAL
0.0
Maximum allowed CV rate of change decreasing value (CVEU/second). The CV rate of change is unlimited when decreasing if Cfg_CVRoCDecrLim = 0.0.
Valid = 0.0 to maximum positive float.
Default is 0.0.
Cfg_MaxInactiveCV
REAL
0.0
When Val_CVOut is greater than this value, set Sts_Active for HMI (CVEU).
Valid any float.
Default is 0.0.
Cfg_SPIntlk
REAL
0.0
SP value to use with interlock / bad value SP action (PVEU). Valid any float between Cfg_PVEUMin and Cfg_PVEUMax.
Cfg_CVIntlk
REAL
0.0
CV value to use with interlock / bad value CV action (CVEU). Valid any float between Cfg_CVEUMin and Cfg_CVEUMax.
Cfg_SPPwrUp
REAL
0.0
Loop SP on Powerup (PVEU) used when Cfg_PwrUpLM is not 0. The value is clamped to the SP range (Cfg_SPLoLim, Cfg_SPHiLim).
Valid any float between Cfg_PVEUMin and Cfg_PVEUMax.
Cfg_CVPwrUp
REAL
0.0
Loop CV on Powerup (CVEU) used when Cfg_PwrUpLM is not 0. Value may be clamped to the configured limits (Cfg_CVLoLim, CfgHiLim) in cascade or auto, and in manual if so configured.
Valid any float between Cfg_CVEUMin and Cfg_CVEUMax.
Cfg_CVPwrUpSel
SINT
0
Selection of Powerup (first run) CV in Auto or Cascade.
0 = Ignore Inp_InnerAvailable and always use Cfg_CVPwrUp or last (Powerdown) CV (if Cfg_PwrpUpLM = 0),
1 = Process Inp_InnerAvailable.
Default is false.
Cfg_HiHiDevLim
REAL
1.5e+38
High-High PV deviation status threshold (PVEU).
Valid = 0.0 to maximum positive float.
Default is 1.5e+38.
Cfg_HiHiDevDB
REAL
0.0
High-High PV deviation status deadband (PVEU).
Valid = 0.0 to Cfg_HiHiDevLim.
Default is 0.0.
Cfg_HiHiDevGateDly
REAL
0.0
High-High PV deviation status gate delay (second).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_HiDevLim
REAL
1.5e+38
High PV deviation status threshold (PVEU).
Valid = 0.0 to maximum positive float.
Default is 1.5e+38.
Cfg_HiDevDB
REAL
0.0
High PV deviation status deadband (PVEU).
Valid = 0.0 to Cfg_HiDevLim.
Default is 0.0.
Cfg_HiDevGateDly
REAL
0.0
High PV deviation status gate delay (second).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_LoDevLim
REAL
-1.5e+38
Low PV deviation status threshold (PVEU).
Valid = -maximum positive float to 0.0.
Default is -1.5e+38.
Cfg_LoDevDB
REAL
0.0
Low PV deviation status deadband (PVEU).
Valid = 0.0 to abs(Cfg_LoDevLim).
Default is 0.0.
Cfg_LoDevGateDly
REAL
0.0
Low PV deviation status gate delay (second).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_LoLoDevLim
REAL
-1.5e+38
Low-Low PV deviation status threshold (PVEU).
Valid = -maximum positive float to 0.0.
Default is -1.5e+38.
Cfg_LoLoDevDB
REAL
0.0
Low-Low PV deviation status deadband (PVEU).
Valid = 0.0 to abs(Cfg_LoLoDevLim).
Default is 0.0.
Cfg_LoLoDevGateDly
REAL
0.0
Low-Low PV deviation status gate delay (second).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_CnfrmReqd
SINT
0
Operator command confirmation required. Represents the type of command confirmation required.
0 = None,
1 = Command confirmation required,
2 = Performer e-signature required,
3 = Performer and approver e-signature required.
Default is 0.
PSet_Ratio
REAL
1.0
Program setting for Ratio, loop mode Cascade/Ratio and Ratio enabled (unitless).
Valid = 0.0 to maximum positive float.
Default is 1.0.
PSet_SP
REAL
0.0
Program setting for SP, loop mode Auto (PVEU).
Valid any float.
Default is 0.0.
PSet_SPTarget
REAL
0.0
Program setting for SP target in ramp wizard (PVEU).
Valid any float.
Default is 0.0.
PSet_SPRampTime
REAL
0.0
Program setting for time to reach SP target in ramp wizard (second).
Valid = 0.0 to 28800.0 seconds.
Default is 0.0.
PSet_CV
REAL
0.0
Program setting for CV when loop mode is Manual (CVEU).
Valid any float.
Default is 0.0.
PSet_Owner
DINT
0
Program owner request ID (non-zero) or release (zero).
Default is 0.
XSet_Ratio
REAL
1.0
External setting for Ratio, loop mode Cascade/Ratio and Ratio enabled (unitless).
Valid = 0.0 to maximum positive float.
Default is 1.0.
XSet_SP
REAL
0.0
External setting for SP, loop mode Auto (PVEU).
Valid any float.
Default is 0.0.
XSet_SPTarget
REAL
0.0
External setting for SP target in ramp wizard (PVEU).
Valid any float.
Default is 0.0.
XSet_SPRampTime
REAL
0.0
External setting for time to reach SP target in ramp wizard (seconds).
Valid = 0.0 to 28800.0 seconds.
Default is 0.0.
XSet_CV
REAL
0.0
External setting for CV, loop mode Manual (CVEU).
Valid any float.
Default is 0.0.
PCmd_Casc
BOOL
False
Program command to select Cascade/Ratio loop mode. The instruction clears this operand automatically.
Default is false.
PCmd_Auto
BOOL
False
Program command to select Auto loop mode. The instruction clears this operand automatically.
Default is false.
PCmd_Man
BOOL
False
Program command to select Manual loop mode. The instruction clears this operand automatically.
Default is false.
PCmd_NormLM
BOOL
False
Program command to select loop mode defined as Normal, see Cfg_NormLM. The instruction clears this operand automatically.
Default is false.
PCmd_SPRampStart
BOOL
False
Program command to initiate SP ramping. The instruction clears this operand automatically.
Default is false.
PCmd_SPRampStop
BOOL
False
Program command to stop SP ramping. The instruction clears this operand automatically.
Default is false.
PCmd_Oper
BOOL
False
Program command to select Operator (Program to Operator). The instruction clears this operand automatically.
Default is false.
PCmd_Prog
BOOL
False
Program command to select Program (Operator to Program). The instruction clears this operand automatically.
Default is false.
PCmd_Lock
BOOL
False
Program command to lock Program (disallow Operator). The instruction clears this operand automatically if Cfg_PCmdLockAsLevel = 0.
Default is false.
PCmd_Unlock
BOOL
False
Program command to unlock Program (allow Operator to acquire). The instruction clears this operand automatically.
Default is false.
PCmd_Normal
BOOL
False
Program command to select Normal command source (Operator or Program). The instruction clears this operand automatically.
Default is false.
PCmd_Reset
BOOL
False
Program command to reset all alarms and latched shed conditions requiring reset. The instruction clears this operand automatically.
Default is false.
XCmd_Casc
BOOL
False
External command to select Cascade/Ratio loop mode. The instruction clears this operand automatically.
Default is false.
XCmd_Auto
BOOL
False
External command to select Auto loop mode. The instruction clears this operand automatically.
Default is false.
XCmd_Man
BOOL
False
External command to select Manual loop mode. The instruction clears this operand automatically.
Default is false.
XCmd_NormLM
BOOL
False
External command to select loop mode defined as Normal, see Cfg_NormLM. The instruction clears this operand automatically.
Default is false.
XCmd_SPRampStart
BOOL
False
External command to initiate SP ramping. The instruction clears this operand automatically.
Default is false.
XCmd_SPRampStop
BOOL
False
External command to stop SP ramping. The instruction clears this operand automatically.
Default is false.
XCmd_Acq
BOOL
False
External command to acquire ownership (Operator/Program/Override/Maintenance to External). The instruction clears this operand automatically if Cfg_ExtAcqAsLevel = 0.
Default is false.
XCmd_Rel
BOOL
False
External command to release ownership if Cfg_ExtAcqAsLevel = 0 (External to Operator/Program/Override/Maintenance). The instruction clears this operand automatically.
Default is false.
XCmd_Reset
BOOL
False
External command to reset all alarms and latched shed conditions. The instruction clears this operand automatically.
Default is false.
XCmd_ResetAckAll
BOOL
False
External command to acknowledge and reset all alarms and latched shed conditions. The instruction clears this operand automatically.
Default is false.
Public output member
Data Type
Description
EnableOut
BOOL
Enable output. This output state always reflects EnableIn input state.
Val_PV
REAL
Value of loop PV (PVEU).
Val_Ratio
REAL
Value of loop Ratio (unitless).
Val_SPSet
REAL
Value of selected SP after clamping and before ramping (PVEU).
Val_SP
REAL
Value of SP being used after clamping and ramping (PVEU).
Val_SPTarget
REAL
Accepted setting for SP ramp target, endpoint for ramp wizard (PVEU).
Val_SPRampTime
REAL
Accepted setting for SP ramp time, time to reach target for ramp wizard (second).
Val_SPRampRoC
REAL
Calculated value of SP rate of change for ramping, from ramp wizard (PVEU/second).
Val_SPRoCIncr
REAL
Current value of SP rate of change limit increasing (PVEU/second). 0.0 = rate of change not limited.
Val_SPRoCDecr
REAL
Current value of SP rate of change limit decreasing (PVEU/second). 0.0 = rate of change not limited.
Val_E
REAL
Loop error, SP-PV for reverse action Cfg_CtrlAction = 0, PV-SP for direct action Cfg_CtrlAction = 1 (PVEU).
Val_CVSet
REAL
Loop CV after clamping and before ramping (CVEU).
Val_CVOut
REAL
Loop CV after clamping and ramping (CVEU).
Val_PVPercent
REAL
Loop PV (percent of span).
Val_SPPercent
REAL
Loop SP (percent of span).
Val_EPercent
REAL
Loop error, SP-PV for reverse action Cfg_CtrlAction = 0, PV-SP for direct action Cfg_CtrlAction = 1 (percent of span).
Val_CVOutPercent
REAL
Loop CV after ramping and clamping (percent of span).
Val_ExecTime
REAL
Actual PID algorithm execution period (second).
Out_Reset
BOOL
1 = Reset command has been received and accepted.
Out_OwnerSts
DINT
Status of command source, owner command handshake and ready status:
0 = None,
.10 = Operator Lock,
.11 = Operator Unlock,
.12 = Program Lock,
.13 = Program Unlock,
.14 = Acquire Maintenance,
.15 = Release Maintenance,
.16 = Acquire External,
.17 = Release External,
.18 = Has Maintenance,
.19 = External Override Lock,
.20 = Has External,
.21 = Has Operator,
.22 = Has Operator Locked,
.23 = Has Program,
.24 = Has Program Locked,
.29 = Echo,
.30 = Not Ready.
Sts_Initialized
BOOL
1 = Instruction is initialized. Use Inp_InitializeReq to reinitialize.
SrcQ_IO
SINT
Source and quality of primary I/O PV quality (enumerated):
0 = Good, live, confirmed good,
1 = Good, live, assumed good,
2 = Good, no feedback, assumed good,
8 = Test, virtualized,
9 = Test, loopback,
10 = Test, manually entered,
16 = Uncertain, live, off-spec,
17 = Uncertain, substituted at device or bus,
18 = Uncertain, substituted at instruction,
19 = Uncertain, using last known good,
20 = Uncertain, using replacement value,
32 = Bad, signal failure,
33 = Bad, channel fault,
34 = Bad, module or communication fault,
35 = Bad, invalid configuration.
SrcQ
SINT
Source and quality of primary PV and CV value or status (enumerated):
0 = Good, live, confirmed good
1 = Good, live, assumed good
2 = Good, no feedback, assumed good
8 = Test, virtualized
9 = Test, loopback
10 = Test, manually entered
16 = Uncertain, live, off-spec
17 = Uncertain, substituted at device or bus
18 = Uncertain, substituted at instruction
19 = Uncertain, using last known good
20 = Uncertain, using replacement value
32 = Bad, signal failure
33 = Bad, channel fault
34 = Bad, module or communication fault
35 = Bad, invalid configuration
Sts_eSts
SINT
Loop mode:
0 = Unknown,
1 = Manual,
2 = Auto,
3 = Cascade (no Ratio),
4 = Ratio.
Sts_eFault
SINT
Loop fault:
0 = none,
1 = PV uncertain,
2 = Low PV deviation,
3 = High PV deviation,
4 = Low-Low PV deviation,
5 = High-High PV deviation,
6 = PV substituted,
7 = Interlock trip,
8 = SP fail,
9 = PV fail,
10 = CV fail,
11 = Configuration error.
Sts_eState
SINT
Internal logic state for animating state diagram on faceplate.
0 = Manual,
1 = PV deviation in deadband,
2 = PV deviation not in deadband,
3 = SP ramping,
4 = CV ramping,
5 = Ratio clamped,
6 = SP clamped,
7 = CV clamped,
8 = Windup Lo,
9 = Windup Hi,
10 = SP held,
11 = SP set to IntlkSP,
12 = CV held,
13 = CV set to IntlkCV,
14 = Hand,
15 = Initializing.
Sts_eNotify
SINT
Highest severity alarm status. All alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyAll
SINT
Highest severity alarm status. All alarm status enumerated values including related objects for CV, PV, SP, CascSP:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyHiHiDev
SINT
High-High PV deviation alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyHiDev
SINT
High PV deviation alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyLoDev
SINT
Low PV deviation alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyLoLoDev
SINT
Low-Low PV deviation alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyFail
SINT
Fail alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_eNotifyIntlkTrip
SINT
Interlock trip alarm status enumerated values:
0 = Not in alarm, acknowledged,
1 = Not in alarm, unacknowledged or reset required,
2 = Low severity alarm, acknowledged,
3 = Low severity alarm, unacknowledged,
4 = Medium severity alarm, acknowledged,
5 = Medium severity alarm, unacknowledged,
6 = High severity alarm, acknowledged,
7 = High severity alarm, unacknowledged,
8 = Urgent severity alarm, acknowledged,
9 = Urgent severity alarm, unacknowledged.
Sts_UnackAlmCount
DINT
Count of unacknowledged alarms.
Sts_Casc
BOOL
1 = Loop is in Cascade/Ratio mode.
Sts_Auto
BOOL
1 = Loop is in Auto mode.
Sts_Man
BOOL
1 = Loop is in Manual mode.
Sts_NormLM
BOOL
1 = Loop is in Normal loop mode configured in Cfg_NormLM.
Sts_Initializing
BOOL
1 = CV is initializing because of request Inp_UseCVInitialVal or when Inp_InnerAvailable=0.
Sts_WindupHi
BOOL
1 = This loop winding up High, usually connects to Inp_WindupHi of outer loop.
Sts_WindupLo
BOOL
1 = This loop winding up Low, usually connects to Inp_WindupLo of outer loop.
Sts_RatioClamped
BOOL
1 = Selected Ratio is being clamped, used in faceplate animation.
Sts_IntlkSP
BOOL
1 = SP value is being set by shed to Interlock SP.
Sts_SPHeld
BOOL
1 = SP value is being set by shed to hold last good SP.
Sts_SPShedPV
BOOL
1 = SP value is being set by shed to current PV.
Sts_SPShed
BOOL
1 = SP value from Shed, 0 = SP from Program, Operator, Override (Auto), Casc SP Input (Cascade) or PV Track (Manual).
Sts_SPTrackPV
BOOL
1 = SP value is being set by PV tracking in Manual loop mode.
Sts_SPHiClamped
BOOL
1 = Selected SP is being clamped at high limit.
Sts_SPLoClamped
BOOL
1 = Selected SP is being clamped at low limit.
Sts_SPClamped
BOOL
1 = Selected SP is being clamped, for faceplate animation.
Sts_SPRampingUp
BOOL
1 = SP is ramping up toward Val_SPSet.
Sts_SPRampingDown
BOOL
1 = SP is ramping down toward Val_SPSet.
Sts_SPRamping
BOOL
1 = SP is ramping toward Val_SPSet, 0 = Ramp complete.
Sts_SPRampWizardInProgress
BOOL
1 = SP is ramping toward SP target set by the owner in ramp wizard, 0 = Ramp complete.
Sts_SkipSPRoCLim
BOOL
1 = SP rate limiting is being skipped, for faceplate animation.
Sts_DevDBAct
BOOL
1 = PV deviation deadband active.
Sts_PVUncertain
BOOL
1 = PV input value quality is uncertain.
Sts_PVBad
BOOL
1 = PV input value, communications, quality or EU limit is bad.
Sts_SPBad
BOOL
1 = Cascade SP input value quality is bad.
Sts_FFBad
BOOL
1 = Feedforward term Inp_FF value is invalid.
Sts_FFPrevBad
BOOL
1 = Feedforward term Inp_FFPrev value is invalid.
Sts_CVInfNaN
BOOL
1 = CV value equal to +/- infinity or NaN detected.
Sts_CVBad
BOOL
1 = CV value quality is bad or invalid or CV comms fault.
Sts_CVPrevBad
BOOL
1 = Inp_CVPrev value is invalid.
Sts_HandFdbkBad
BOOL
1 = Hand FB (Tieback) value quality is bad or invalid or communication fault.
Sts_IntlkCV
BOOL
1 = CV value is being set by shed to Interlock CV.
Sts_CVHeld
BOOL
1 = CV value is being set by shed to hold last good CV.
Sts_CVShed
BOOL
1 = CV from shed, 0 = CV from Program, Operator, Override (Manual), or PID (Auto, Cascade).
Sts_CVHiClamped
BOOL
1 = CV is being clamped at high limit.
Sts_CVLoClamped
BOOL
1 = CV is being clamped at low limit.
Sts_CVClamped
BOOL
1 = Selected CV is being clamped, used in faceplate animation.
Sts_CVRampingUp
BOOL
1 = CV is ramping up toward Val_CVSet.
Sts_CVRampingDown
BOOL
1 = CV is ramping down toward Val_CVSet.
Sts_CVRamping
BOOL
1 = CV is ramping toward Val_CVSet, 0 = Ramp complete.
Sts_Active
BOOL
1 = CV is greater than Cfg_MaxInactiveCV, show graphic symbol as active.
Sts_Available
BOOL
1 = PID loop can be acquired by Program and is available for control.
Sts_CascAvailable
BOOL
1 = PID inner loop is available for cascade control with an outer loop. 0 = PID inner loop is not available, initialize outer loop to Val_SP.
Sts_ExtAvailable
BOOL
1 = PID is available for external control. 0 = PID is not available, initialize outer loop to Val_SP.
Sts_IntlkAvailable
BOOL
1 = Interlock availability OK. Device can be acquired by program and is available for control when interlocks are OK.
Sts_Bypass
BOOL
1 = Bypassable interlocks are bypassed.
Sts_BypActive
BOOL
1 = Interlock bypassing is active (bypassed or Maintenance).
Sts_NotRdy
BOOL
1 = PPID is not ready, see detail bits for reason.
Sts_NrdyCfgErr
BOOL
1 = PPID is not ready: Configuration error.
Sts_NrdyInit
BOOL
1 = PPID is not ready while CV is initialized (Inp_UseCVInitVal = 1).
Sts_NrdyIntlk
BOOL
1 = PPID is not ready: Interlock Not OK (Shed requires reset).
Sts_NrdyFail
BOOL
1 = PPID is not ready: Fail status is on (Shed requires reset).
Sts_NrdyCVFail
BOOL
1 = PPID is not ready: CV Fail (Shed requires reset).
Sts_NrdyPVFail
BOOL
1 = PPID is not ready: PV Fail (Shed requires reset).
Sts_NrdySPFail
BOOL
1 = PPID is not ready: SP Fail (Shed requires reset).
Sts_NrdyOoS
BOOL
1 = PPID is not ready: Out of Service.
Sts_MaintByp
BOOL
1 = Device has a Maintenance bypass function active.
Sts_NrdyInner
BOOL
1 = Inner loop object is not available (Inp_InnerAvailable = 0) for this PPID.
Sts_Err
BOOL
1 = Error in PPID configuration: see detail Err bits for reason.
Sts_ErrRatioLim
BOOL
1 = Error in PPID configuration: Ratio clamping limits invalid.
Cfg_RatioLoLim > Cfg_RatioHiLim.
Sts_ErrSPLim
BOOL
1 = Error in PPID configuration: SP clamping limits invalid.
Cfg_SPLoLim < Cfg_PVEUMin or
Cfg_SPHiLim > Cfg_PVEUMax or
Cfg_SPLoLim > Cfg_SPHiLim.
Sts_ErrCVLim
BOOL
1 = Error in PPID configuration: CV clamping limits invalid.
Cfg_CVLoLim < Cfg_CVEUMin or
Cfg_CVHiLim > Cfg_CVEUMax or
Cfg_CVLoLim > Cfg_CVHiLim.
Sts_ErrPVEU
BOOL
1 = Error in PPID configuration: PV scaling limits invalid. Cfg_PVEUMin >= Cfg_PVEUMax or Cfg_PVEUMin is +-Inf.
Sts_ErrCVEU
BOOL
1 = Error in PPID configuration: CV scaling limits invalid. Cfg_CVEUMin >= Cfg_CVEUMax or Cfg_CVEUMin is +-Inf.
Sts_ErrDevDB
BOOL
1 = Error in PPID configuration: PV deviation deadband invalid. Cfg_DevDBEnter > Cfg_DevDB, or Cfg_DevDB < 0, or Cfg_DevDBEnter < 0.
Sts_ErrExecTime
BOOL
1 = Error in PPID configuration: Execution time invalid, Cfg_ExecTime < 0.0 or Cfg_ExecTime > 2147483.0 seconds.
Sts_ErrPGain
BOOL
1 = Error in PPID configuration: PGain invalid, Cfg_PGain < 0.
Sts_ErrIGain
BOOL
1 = Error in PPID configuration: IGain invalid, Cfg_IGain < 0.
Sts_ErrDGain
BOOL
1 = Error in PPID configuration: DGain invalid, Cfg_DGain < 0.
Sts_ErrCVTrackGain
BOOL
1 = Error in PPID configuration: CV TrackGain invalid, Cfg_CVTrackGain < 0.
Sts_ErrPSPWeight
BOOL
1 = Error in PPID configuration: SP weight in proportional term invalid, Cfg_PSPWeight < 0 or Cfg_PSPWeight > 1.5.
Sts_ErrDSPWeight
BOOL
1 = Error in PPID configuration: SP weight in derivative term invalid, Cfg_DSPWeight < 0 or Cfg_DSPWeight > 1.5.
Sts_ErrSPRoCIncrLim
BOOL
1 = Error in PPID configuration: Maximum allowed SP rate of change increasing value invalid, Cfg_SPRoCIncrLim < 0.
Sts_ErrSPRoCDecrLim
BOOL
1 = Error in PPID configuration: Maximum allowed SP rate of change decreasing value invalid, Cfg_SPRoCDecrLim < 0.
Sts_ErrCVRoCIncrLim
BOOL
1 = Error in PPID configuration: Maximum allowed CV rate of change increasing value invalid, Cfg_CVRoCIncrLim < 0.
Sts_ErrCVRoCDecrLim
BOOL
1 = Error in PPID configuration: Maximum allowed CV rate of change decreasing value invalid, Cfg_CVRoCDecrLim < 0.
Sts_ErrSPIntlk
BOOL
1 = Error in PPID configuration: SP value to use with Interlock or bad value SP action invalid, value out of scale, Cfg_SPIntlk > Cfg_PVEUMax or < Cfg_PVEUMin.
Sts_ErrCVIntlk
BOOL
1 = Error in PPID configuration: CV value to use with Interlock or bad value CV action invalid, value out of scale, Cfg_CVIntlk > Cfg_CVEUMax or < Cfg_CVEUMin.
Sts_ErrSPPwrUp
BOOL
1 = Error in PPID configuration: SP value to use in Powerup invalid, value out of scale, Cfg_SPPwrUp > Cfg_PVEUMax or < Cfg_PVEUMin.
Sts_ErrCVPwrUp
BOOL
1 = Error in PPID configuration: CV value to use in Powerup invalid, value out of scale, Cfg_CVIntlk > Cfg_CVEUMax or < Cfg_CVEUMin.
Sts_ErrAlm
BOOL
1 = Error in PPID configuration: At least one Logix tag-based alarm has invalid settings.
Sts_ErrHiHiDevLim
BOOL
1 = Error in PPID configuration: High-High PV deviation threshold invalid, Cfg_HiHiDevLim < 0.
Sts_ErrHiHiDevGateDly
BOOL
1 = Error in PPID configuration: Invalid High-High PV deviation gate delay timer preset (use 0.0 to 2147483.0).
Sts_ErrHiHiDevDB
BOOL
1 = Error in PPID configuration: High-High PV deviation deadband invalid, Cfg_HiHiDevDB < 0 or Cfg_HiHiDevDB > Cfg_HiHiDevLim.
Sts_ErrHiDevLim
BOOL
1 = Error in PPID configuration: High PV deviation threshold invalid, Cfg_HiDevLim < 0.0.
Sts_ErrHiDevGateDly
BOOL
1 = Error in PPID configuration: Invalid High PV deviation gate delay timer preset (use 0.0 to 2147483.0).
Sts_ErrHiDevDB
BOOL
1 = Error in PPID configuration: High PV deviation deadband invalid, Cfg_HiDevDB < 0 or Cfg_HiDevDB > Cfg_HiDevLim.
Sts_ErrLoDevLim
BOOL
1 = Error in PPID configuration: Low PV deviation threshold invalid, Cfg_LoDevLim > 0.
Sts_ErrLoDevGateDly
BOOL
1 = Error in PPID configuration: Invalid Low PV deviation gate delay timer preset (use 0.0 to 2147483.0).
Sts_ErrLoDevDB
BOOL
1 = Error in PPID configuration: Low PV deviation deadband invalid, Cfg_LoDevDB < 0, or > -Cfg_LoDevLim.
Sts_ErrLoLoDevLim
BOOL
1 = Error in PPID configuration: Low-Low PV deviation threshold invalid, Cfg_LoLoDevLim > 0.0.
Sts_ErrLoLoDevGateDly
BOOL
1 = Error in PPID configuration: Invalid Low-Low PV deviation gate delay timer preset (use 0.0 to 2147483.0).
Sts_ErrLoLoDevDB
BOOL
1 = Error in PPID configuration: Low-Low PV deviation deadband invalid, Cfg_LoLoDevDB < 0, or > -Cfg_LoLoDevLim.
Sts_eSrc
INT
The current command source enumerated values:
0 = Logic not in use,
4 = Hand,
8 = Maintenance,
16 = Override,
32 = Program,
33 = Program locked,
34 = Program by default (Normal),
64 = Operator,
65 = Operator locked,
66 = Operator by default (Normal),
128 = Maintenance Out of Service,
129 = Programmed Out of Service (rung false),
256 = External.
Sts_bSrc
INT
Active selection bitmap (for HMI totem pole with command source request selection):
Sts_bSrc.0: Hand,
Sts_bSrc.1: Programmed Out of Service (rung false),
Sts_bSrc.2: Maintenance Out of Service,
Sts_bSrc.3: Maintenance,
Sts_bSrc.4: Override,
Sts_bSrc.5: External,
Sts_bSrc.6: Program locked,
Sts_bSrc.7: Program,
Sts_bSrc.8: Operator locked,
Sts_bSrc.9: Operator.
Sts_Hand
BOOL
1 = Hand is selected, supersedes OoS, Maint, Ovrd, Ext, Prog, Oper.
Sts_OoS
BOOL
1 = Out of Service is selected, supersedes Maint, Ovrd, Ext, Prog, Oper.
Sts_Maint
BOOL
1 = Maintenance is selected, supersedes Ovrd, Ext, Prog, Oper.
Sts_Ovrd
BOOL
1 = Override is selected, supersedes Ext, Prog, Oper.
Sts_Ext
BOOL
1 = External is selected, supersedes Prog, Oper.
Sts_Prog
BOOL
1 = Program is selected.
Sts_ProgLocked
BOOL
1 = Program is selected and locked.
Sts_Oper
BOOL
1 = Operator is selected.
Sts_OperLocked
BOOL
1 = Operator is selected and locked.
Sts_ProgOperSel
BOOL
Program/Operator selection (latch) state: 1 = Program, 0 = Operator.
Sts_ProgOperLock
BOOL
Program/Operator lock (latch) state: 1 = Locked, 0 = Unlocked.
Sts_Normal
BOOL
1 = Owner selection equals what is configured as Normal (Prog or Oper).
Sts_ExtReqInh
BOOL
1 = External request inhibited.
Sts_ProgReqInh
BOOL
1 = Program request inhibited, cannot get to Program from current owner.
Sts_MAcqRcvd
BOOL
1 = Maintenance acquire command received this scan.
Sts_Alm
BOOL
1 = An alarm is active.
Sts_AlmInh
BOOL
1 = An alarm is shelved or disabled.
Sts_HiHiDevCmp
BOOL
1 = PV deviation is above High-High limit, (Val_PV-Val_SP)>Cfg_HiHiDevLim.
Sts_HiHiDevGate
BOOL
1 = PV deviation High-High gate is open.
Sts_HiHiDev
BOOL
1 = PV deviation is above High-High limit, (Val_PV-Val_SP)>Cfg_HiHiDevLim, for gate open.
There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_HiHiDev.AlarmElement
Sts_HiDevCmp
BOOL
1 = PV deviation is above High limit, (Val_PV-Val_SP)>Cfg_HiDevLim.
Sts_HiDevGate
BOOL
1 = PV deviation High gate is open.
Sts_HiDev
BOOL
1 = PV deviation is above High limit, (Val_PV-Val_SP)>Cfg_HiDevLim, for gate open.
There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_HiDev.AlarmElement
Sts_LoDevCmp
BOOL
1 = PV deviation is below Low limit, (Val_PV-Val_SP)<Cfg_LoDevLim.
Sts_LoDevGate
BOOL
1 = PV deviation Low gate is open.
Sts_LoDev
BOOL
1 = PV deviation (loop error) is below Low limit, (Val_PV-Val_SP)<Cfg_LoDevLim, for gate open.
There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_LoDev.AlarmElement
Sts_LoLoDevCmp
BOOL
1 = PV deviation is below Low-Low limit, (Val_PV-Val_SP)<Cfg_LoLoDevLim.
Sts_LoLoDevGate
BOOL
1 = PV deviation Low-Low gate is open.
Sts_LoLoDev
BOOL
1 = PV deviation (loop error) is below Low-Low limit, (Val_PV-Val_SP)<Cfg_LoLoDevLim, for gate open.
There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_LoLoDev.AlarmElement
Sts_Fail
BOOL
1 = Loop failure: PV bad, SP bad, CV bad or Hand feedback bad statuses are on or are latched on without reset. There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_Fail.AlarmElement
Sts_IntlkTrip
BOOL
1 = Interlock Not OK caused loop output to hold or change. There is a predefined default discrete tag-based alarm for the status. Set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PPIDTag.@Alarms.Alm_IntlkTrip.AlarmElement
Sts_RdyReset
BOOL
1 = A latched alarm or shed condition is ready to be reset.
Sts_RdyAck
BOOL
1 = An alarm is ready to be acknowledged.
XRdy_Acq
BOOL
1 = Ready for XCmd_Acq, enable HMI button.
XRdy_Rel
BOOL
1 = Ready for XCmd_Rel, enable HMI button.
XRdy_Casc
BOOL
1 = Ready for XCmd_Casc, enable HMI button.
XRdy_Auto
BOOL
1 = Ready for XCmd_Auto, enable HMI button.
XRdy_Man
BOOL
1 = Ready for XCmd_Man, enable HMI button.
XRdy_NormLM
BOOL
1 = Ready for XCmd_NormLM, enable HMI button.
XRdy_SPRampStart
BOOL
1 = Ready for XCmd_SPRampStart, enable HMI button.
XRdy_SPRampStop
BOOL
1 = Ready for XCmd_SPRampStop, enable HMI button.
XRdy_Reset
BOOL
1 = Ready for XCmd_Reset, enable HMI button.
XRdy_ResetAckAll
BOOL
1 = Ready for XCmd_ResetAckAll, enable HMI button.
Val_Owner
DINT
Current object owner ID, 0 = Not owned.
Private input member
Data Type
Default Value
Description
CmdSrc
P_COMMAND_SOURCE
Control or Command Source Selection.
OCmd_SPRampStart
BOOL
0
Operator command to initiate SP ramping. The instruction clears this operand automatically.
Default is 0.
OCmd_SPRampStop
BOOL
0
Operator command to stop SP ramping. The instruction clears this operand automatically.
Default is 0.
OSet_Ratio
REAL
1.0
Operator setting for Ratio, loop mode Cascade/Ratio and Ratio enabled (unitless).
Valid = 0.0 to maximum positive float.
Default is 1.0.
OSet_SP
REAL
0.0
Operator setting for Setpoint, loop mode Auto (PVEU).
Valid any float.
Default is 0.0.
OSet_SPTarget
REAL
0.0
Operator setting for Setpoint ramp target, endpoint for ramp wizard (PVEU).
Valid any float.
Default is 0.0.
OSet_SPRampTime
REAL
0.0
Operator setting for Setpoint ramp time, time to reach target for ramp wizard (seconds).
Valid = 0.0 to 28800.0 seconds.
Default is 0.0.
OSet_CV
REAL
0.0
Operator setting for CV, loop mode Manual (CVEU).
Valid any float.
Default is 0.0.
MCmd_Bypass
BOOL
0
Maintenance command to bypass all bypassable interlocks. The instruction clears this operand automatically.
Default is 0.
MCmd_Check
BOOL
0
Maintenance command to check, not bypass, all interlocks. The instruction clears this operand automatically.
Default is 0.
MCmd_OoS
BOOL
0
Maintenance command to select Out of Service. The instruction clears this operand automatically.
Default is 0.
MCmd_IS
BOOL
0
Maintenance command to select In Service. The instruction clears this operand automatically.
Default is 0.
MCmd_Acq
BOOL
0
Maintenance command to acquire ownership (Operator/Program/External/Override to Maintenance). The instruction clears this operand automatically.
Default is 0.
MCmd_Rel
BOOL
0
Maintenance command to release ownership (Maintenance to Operator/Program/External/Override). The instruction clears this operand automatically.
Default is 0.
OCmd_Oper
BOOL
0
Operator command to select Operator (Program to Operator). The instruction clears this operand automatically.
Default is 0.
OCmd_Prog
BOOL
0
Operator command to select Program (Operator to Program). The instruction clears this operand automatically.
Default is 0.
OCmd_Lock
BOOL
0
Operator command to lock Operator (disallow Program). The instruction clears this operand automatically.
Default is 0.
OCmd_Unlock
BOOL
0
Operator command to unlock or release (allow Program to acquire) ownership. The instruction clears this operand automatically.
Default is 0.
OCmd_Normal
BOOL
0
Operator command to select Normal (Operator or Program). The instruction clears this operand automatically.
Default is 0.
OCmd_Auto
BOOL
0
Operator command to select Automatic loop mode. The instruction clears this operand automatically.
Default is 0.
OCmd_Casc
BOOL
0
Operator command to select Cascade/Ratio loop mode. The instruction clears this operand automatically.
Default is 0.
OCmd_Man
BOOL
0
Operator command to select Manual loop mode. The instruction clears this operand automatically.
Default is 0.
OCmd_NormLM
BOOL
0
Operator command to select loop mode configured as Normal (see Cfg_NormLM). The instruction clears this operand automatically.
Default is 0.
OCmd_Reset
BOOL
0
Operator command to reset all alarms and latched shed conditions. The instruction clears this operand automatically.
Default is 0.
OCmd_ResetAckAll
BOOL
0
Operator command to acknowledge and reset all alarms and latched shed conditions. The use of OCmd_ResetAckAll is restricted to HMI. The instruction clears this operand automatically.
Default is 0.
Private output member
Data Type
Description
HMI_BusObjIndex
DINT
HMI bus object index.
Default is 0.
MRdy_Bypass
BOOL
1 = Ready for MCmd_Bypass, enable HMI button.
MRdy_Check
BOOL
1 = Ready for MCmd_Check, enable HMI button.
MRdy_OoS
BOOL
1 = Ready for MCmd_OoS, enable HMI button.
MRdy_IS
BOOL
1 = Ready for MCmd_IS, enable HMI button.
MRdy_Acq
BOOL
1 = Ready for MCmd_Acq, enable HMI button.
MRdy_Rel
BOOL
1 = Ready for MCmd_Rel, enable HMI button.
ORdy_Oper
BOOL
1 = Ready for OCmd_Oper, enable HMI button.
ORdy_Prog
BOOL
1 = Ready for OCmd_Prog, enable HMI button.
ORdy_Lock
BOOL
1 = Ready for OCmd_Lock, enable HMI button.
ORdy_Unlock
BOOL
1 = Ready for OCmd_Unlock, enable HMI button.
ORdy_Normal
BOOL
1 = Ready for OCmd_Normal, enable HMI button.
ORdy_Auto
BOOL
1 = Ready for OCmd_Auto, enables HMI button.
ORdy_Casc
BOOL
1 = Ready for OCmd_Casc, enables HMI button.
ORdy_CV
BOOL
1 = Ready for OSet_CV, enables data entry field.
ORdy_Man
BOOL
1 = Ready for OCmd_Man, enables HMI button.
ORdy_NormLM
BOOL
1 = Ready for OCmd_NormLM, enables HMI button.
ORdy_Ratio
BOOL
1 = Ready for OSet_Ratio, enables data entry field.
ORdy_SP
BOOL
1 = Ready for OSet_SP, enables data entry field.
ORdy_SPRampStart
BOOL
1 = Ready for OCmd_SPRampStart, enables HMI button.
ORdy_SPRampStop
BOOL
1 = Ready for OCmd_SPRampStop, enables HMI button.
ORdy_SPTarget
BOOL
1 = Ready for OSet_SPTarget, enables data entry field.
ORdy_SPRampTime
BOOL
1 = Ready for OSet_SPRampTime, enables data entry field.
ORdy_Reset
BOOL
1 = Ready for OCmd_Reset, enables HMI button.
ORdy_ResetAckAll
BOOL
1 = At least one alarm or latched shed condition requires Reset or Acknowledgement.
Public InOut member
Data Type
Description
BusObj
BUS_OBJ
Bus component
BUS_OBJ Structure
The BUS_OBJ structure links the process PID instruction to other instructions in a complex control strategy, typically into a hierarchy. A Bus Object rolls up status and alarm information from lower-level devices to higher-level control and fans out commands from higher-level control to lower-level instructions. Items link to the bus by referencing a single member of the BUS_OBJ array associated with the bus.
This parameter links the instruction to an external tag that contains necessary data for the instruction to operate. The external tag must be of the data type shown, or may be NULL. If NULL, the Bus functions of this instruction are not available.
Members
Data Type
Description
Inp_Cmd
DINT
Input to assert commands
Out_Cmd
DINT
Resultant commands
Inp_CmdLLH
DINT
Input for level normally high commands
Out_CmdLLH
DINT
Resultant line level high commands
Inp_Sts
DINT
Input to assert status
Out_Sts
DINT
Resultant status
Inp_CmdAck
DINT
Input to assert a command acknowledgement
Out_CmdAck
DINT
Resultant command acknowledgements
Inp_SeverityMax
DINT
Input: maximum alarm severity
Out_SeverityMax
DINT
Resultant of maximum alarm severity
Cfg_CmdMask
DINT
Propagation mask for commands
Cfg_CmdLLHMask
DINT
Propagation mask for line level high commands
Cfg_StsMask
DINT
Propagation mask for status
Ref_Index
DINT
Bus array index
Alarms
Discrete tag-based alarms are defined for these members.
Member
Alarm Name
Description
Sts_Fail
Alm_Fail
Instruction Failure.
Raised when the PPID instruction reports an Instruction Fault. The Fault is reported under any of these conditions:
  • Setpoint (SP) bad quality, Sts_SPBad = 1,
  • Process variable (PV) bad quality, Sts_PVBad = 1,
  • Control variable (CV) bad quality, Sts_CVBad = 1,
  • Hand feedback (HandFdbk) bad quality, Sts_HandFdbkBad = 1.
Sts_IntlkTrip
Alm_IntlkTrip
Interlock Trip alarm.
Raised when non-bypassable interlocks are not OK or bypassable interlocks are not OK when not bypassed. NAND(Inp_NBIntlkOK,(OR(Inp_IntlkOK,Stst_BypActive))).
Sts_HiHiDev
Alm_HiHiDev
High-High Deviation.
Raised when the amount by which the PV exceeds the setpoint or reference is above the High-High Deviation threshold. The threshold, deadband, gating, and timing are set in configuration.
Sts_HiDev
Alm_HiDev
High Deviation.
Raised when the amount by which the PV exceeds the setpoint or reference is above the High Deviation threshold. The threshold, deadband, gating, and timing are set in configuration.
Sts_LoDev
Alm_LoDev
Low Deviation.
Raised when the amount by which the PV exceeds the setpoint or reference is below the Low Deviation threshold. (Since the threshold is a negative number, this reading is the amount the PV falls below the setpoint or reference.) The threshold, deadband, gating, and timing are set in configuration.
Sts_LoLoDev
Alm_LoLoDev
Low-Low Deviation.
Raised when the amount by which the PV exceeds the setpoint or reference is below the Low-Low Deviation threshold. (Since the threshold is a negative number, this reading is the amount the PV falls below the setpoint or reference.) The threshold, deadband, gating, and timing are set in configuration.
Mark the alarm as used or unused and set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format: PPIDTag.@Alarms.AlarmName.AlarmElement.
There are Program, Operator, and External commands that enable the Reset and Reset & Acknowledge of all alarms of the instruction (Alarm Set) at the same time. This diagram shows how alarm condition interact with alarm command.
PPID_alarmoperation1_v33
These diagrams explain how alarm condition high-high deviation, high deviation, low deviation, low-low deviation, interlock trip and fail are derived.
PPID_alarmoperation2_v33
PPID_alarmoperation3_v33
PPID_alarmoperation4_v33
PPID_alarmoperation5_v33
PPID_alarmoperation6_v33
PPID_alarmoperation7_v33
Operation
In principle the PID core algorithm calculates CV with a formula configured for dependent gains,
PPID_equation5_v33
where K is controller gain [-], Ti is reset time [minutes], Td is rate time [minutes]. Alternatively the instruction is configured for independent gains,
PPID_equation6_v33
where K
P
is proportional gain [-], K
I
is integral gain [1/minute], and K
D
is derivative gain [minutes]. Use independent gains when you want the three gains for the proportional, integral and derivative terms to operate independently.
This principle diagram illustrates additional configuration options with derivative smoothing and weighted setpoint used in error calculations entering proportional and derivative term, and error squared in proportional term and CV tracking:
PPID_operation1_v33
The following section uses exact tag names from P_PID structure. Variables without a prefix, such as SP, PV, CVPrev, CVTrack, FF, FFPrev, and CtrlAction, are internal variables used in calculation. Variables with prefix Inp_, Val_, of data type REAL are in engineering units. Variables without prefix of data type REAL are in % of span.
Ts [second] is a current period of PID algorithm execution, i.e. time elapsing from the previous scan of the PPID instruction.
d is a one-scan delay operator. For example:
PPID_operation2_v33
Variables entering the PID formula must be in percent of span so the PID gains do not depend on engineering units used for PV and CV. Scaling of these parameters is calculated as Perc=min(100,max(0,(EU-EUMin)/(EUMax-EUMin)*100)).
  • Val_SP,
  • Inp_PV,
  • Inp_CVPrev,
  • Inp_CVTrack,
  • Cfg_CVHiLim,
  • Cfg_LoLim,
  • Cfg_CVRoCIncrLim,
  • Cfg_CVRoCDecrLim
Scaling of Inp_FF and Inp_FFPrev is calculated as Perc=min(100,max(-100,(EU-EUMin)/(EUMax-EUMin)*100)).
Reverse/Direct control action affects loop error sign that will be used in further calculations:
PPID_operation4_v33
Loop error calculations:
PPID_operation5_v33
Velocity PID algorithm
This diagram of the velocity PID algorithm describes the CV calculation. Additional detailed diagrams in this section describe all PPID configuration options.
PPID_operation6_v33
PPID_operation7_v33
PPID_operation8_v33
Calculation of derivative term:
Modified error calculation:
E
c
(k)
= Cfg_DSPCoef(k) *
SP(k)
PV(k)
E
c
(k)
= Cfg_DSPCoef(k) *
SP(k
1)
PV(k
1)
∆E
c
(k)
=
E
c
(k)
E
c
(k
1)
= (Cfg_DSPCoef(k) *
SP(k)
PV(k))
(Cfg_DSPCoef(k) *
SP(k
1)
PV(k
1))
∆E
c
(k
1) = E
c
(k
1)
E
c
(k
2)
=
(Cfg_DSPCoef(k) *
SP(k
1)
PV(k
1))
(Cfg_DSPCoef(k) *
SP(k
2)
PV(k
2))
Contribution of derivative term if Cfg_UseDSmooting=0, Cfg_Dependent=1 and Cfg_GainBumpless=1.
dD(k)
= Cfg_PGain(k) * Cfg_DGain(k) * (∆
E
c
(k)
– ∆
E
c
(k
1))
Contribution of derivative term if Cfg_UseDSmooting=0, Cfg_Dependent=1 and Cfg_GainBumpless=0.
dD(k)
= Cfg_PGain(k) * Cfg_DGain(k) * ∆
E
c
(k)
– Cfg_PGain(k–1) * Cfg_DGain(k–1) * ∆
E
c
(k
1)
Contribution of derivative term if Cfg_UseDSmooting=0, Cfg_Dependent=0 and Cfg_GainBumpless=1.
dD(k)
= Cfg_DGain(k) * (∆
Ec(k)
– ∆
E
c
(k
1))
Contribution of derivative term if Cfg_UseDSmooting=0, Cfg_Dependent=0 and Cfg_GainBumpless=0.
dD(k)
= Cfg_DGain(k) * ∆
Ec(k)
– Cfg_DGain(k–1) * ∆
Ec(k–1)
If derivative filter is enabled (Cfg_UseDSmooting=1), the calculation is as follows.
DCoef
parameter for dependent gains Cfg_Dependent=1.
PPID_equation1_v33
For independent gains Cfg_Dependent=0.
PPID_equation2_v33
Contribution of derivative term if Cfg_UseDSmooting=1 and Cfg_GainBumpless=1.
PPID_equation3_v33
Contribution of derivative term if Cfg_UseDSmooting=1 and Cfg_GainBumpless=0.
PPID_equation4_v33
Feedforward term.
PPID_operation9_v33
PPID_operation10_v33
PPID_operation11_v33
The windup prevention mechanism monitors the internal CV value and drives the integral term. The windup prevention mechanism uses these rules:
  • If the internal CV is above the currently applied upper limit, do not integrate upward.
  • If the internal CV is within the currently applied limits, integrate but do not violate limits.
  • If the internal CV is below the currently applied lower limit, do not integrate downward.
PPID_operation12_v33
Position PID algorithm
The PPID instruction is configured for the position form of the PD algorithm without bumpless transfer from Manual to Auto or Cascade if Cfg_PositionBump = 1. This option is selected when Cfg_PositionBump = 1 and Cfg_IGain = 0 and change of proportional gain is not bumpless even if Cfg_GainBumpless =1. This feature can also be applied to the velocity PID algorithm to behave as it would work on error and not error change.
NOTE:
The feedforward is relative to CVEUMin, though if Cfg_PositionBump = 1 the control action is calculated internally as Val_CVOutPercent = Cfg_PGain*Val_EPercent+Inp_FF/(Cfg_CVEUMax-Cfg_CVEUMin)*100 plus optional derivative term.
Deviation deadband
CV is not sensitive to loop error variation when within the band around zero error. Configured band levels allow for additional hysteresis. Deadband level for PV approaching SP (Cfg_DevDBEnter) may be set lower than deadband level for PV going away from SP (Cfg_DevDB). Active deadband status (Sts_DevDBAct) is set for PV within deadband. An option to stop CV moves or just stop the integration while leaving proportional and derivative action live when in deadband is provided (Cfg_UseIntegDevDB).
PPID_deviationdeadband_v33
SP handling
The PPID instruction checks the setpoint for validity before the SP value is provided to the PID algorithm for processing. SP fails if:
  • SP clamping limits are invalid (Sts_ErrSPLim=1), or
  • PV scaling limits are invalid (Sts_ErrPVEU=1), or
  • The loop mode is Cascade and cascade SP is NaN or Inf, or
  • Cascade is Ratio (Cfg_HasRatio=1) and ratio clamping limits are invalid.
SP value (Val_SPSet) is shed to the configured setpoint value Cfg_SPIntlk and the status flag is set (Sts_IntlkSP=1) if:
  • Interlock trips and the follow up action is to use Cfg_SPIntlk as the setpoint value(Cfg_IntlkTripSPAction=2), or
  • SP fails and the instruction is configured to follow with using Cfg_SPIntlk as the setpoint (Cfg_SPFailSPAction=2), or
  • PV fails and the instruction is configured to use Cfg_SPIntlk as the setpoint value (Cfg_PVFailSPAction=2), or
  • CV fails and the instruction is configured to use Cfg_SPIntlk as the setpoint value (Cfg_CVFailSPAction=2).
PPID_SPhandling1_v33
SP value holds, shed to the current SP value and the status flag is set (Sts_SPHeld=1), if:
  • Interlock trips and the follow up action is to leave the value unchanged (Cfg_IntlkTripSPAction=1), or
  • SP fails and the instruction is configured to follow with the setpoint not changed (Cfg_SPFailSPAction=1), or
  • PV fails and the instruction is configured to follow with the setpoint not changed (Cfg_PVFailSPAction=1), or
  • CV fails and the instruction is configured to follow with the setpoint not changed (Cfg_CVFailSPAction=1) and higher shed priority is not applied (Sts_IntlkSP=0).
PPID_SPhandling2_v33
SP value sets to the current PV value (Val_SPSet=Val_PV) and the status flag is set (Sts_SPShedPV=1) if:
  • Interlock trips and the follow up action is to leave the value unchanged (Cfg_IntlkTripSPAction=3), or
  • SP fails and the instruction is configured to follow with the setpoint not changed (Cfg_SPFailSPAction=3), or
  • CV fails and the instruction is configured to follow with the setpoint not changed (Cfg_CVFailSPAction=3) and higher shed priority is not applied (Sts_IntlkSP=0 & Sts_SPHeld=0) and PV is good (Sts_PVBad=0).
PPID_SPhandling3_v33
Shed conditions win over other SP selections, in Auto from Program, Operator, Override SP, in Cascade from CascSP, in Manual from PV to track.
If SP is not from shed and SP clamping limits are valid, other sources for SP value are checked.
If the loop is not Cascade and Operator has SP, OSet_SP is used.
If the loop is not Cascade and Program has SP, PSet_SP is used.
If the loop is not Cascade and External has SP, XSet_SP is used.
If the loop is not Cascade and Override is selected, Inp_OvrdSP is used.
For the loop in Cascade Inp_CascSP × Val_Ratio is used. If Cascade is not Ratio Val_Ratio=1.
The instruction is ready to receive a new SP from the operator (ORdy_SP) if:
  • Tracking is not enabled (Cfg_SetTrack=0), or
  • Operator has loop mode in Auto, or Operator has loop mode in Manual and SP does not track PV in Manual (Cfg_PVTrack=0), or
  • Command source is Hand in Auto, or command source is Hand in Manual and SP does not track PV in Manual (Cfg_PVTrack=0), or
  • Command source is Override and SP is not configured for tracking in Override (Cfg_SetTrackOvrdHand=0).
SP tracks PV value (Val_PV) and sets tracking status Sts_SPTrackPV=1 if loop mode is Manual, and instruction is configured for tracking in Manual (Cfg_PVTrack=1), and no SP shed condition is active (Sts_SPShed=0), and PV is not bad (Sts_PVBad=0).
SP is clamped at Cfg_SPHiLim and Cfg_SPLoLim and clamping status is set when clamped (Sts_SPClamped=1) if SP is not held by shed (Sts_SPHeld=0), and SP is not set to interlock SP by shed (Sts_IntlkSP=0), and SP clamping limits are valid (Sts_ErrSPLim=0).
SP ramp wizard
SP ramp wizard allows Operator/Program/External/Override to enter the SP target and time to reach target (ramp time) and calculate SP moves to reach entered target in entered time when starting from current SP when the wizard is commanded to start. Ramping characteristic is defined by the SP ramp target (SPTarget) and SP ramp time (SPRampTime) as described below.
SP target and ramp time entry is permitted (ORdy_SPTarget=1, ORdy_SPRampTime=1) and Val_SPTarget copied to Val_SPSet if:
  • Setpoint ramp wizard is permitted (Cfg_HasSPRamp=1), and Program/Operator/External setting is not tracked (Cfg_SetTrack=0), or
  • Operator has SP in Auto, or command source is Hand in Auto loop mode.
PPID_SPrampwizard1_v33
PPID_SPrampwizard2_v33
SP ramping
Setpoint ramping prevents both CV spikes and bumps by eliminating sudden setpoint changes. Although setpoint ramping can be an advantage for single loop control or for the primary (outer) controller of a cascade configuration, neither setpoint ramping nor proportional-on-PV should be used on the secondary (inner) controller of a cascade loop, as that would degrade the responsiveness of the secondary loop.
SP ramping is skipped, SP target (Val_SPSet) is used directly for final setpoint (Val_SP), skip status is set Sts_SkipSPRoCLim=1, and ramp reported complete Sts_SPRamping=0 under these conditions:
  • Setpoint clamping limits are invalid, Sts_ErrSPLim=1, or
  • PPID is Out of Service, or
  • PPID is configured to skip RoC limiting Cfg_SkipSPRoCLim=1 and the PPID is in Interlock/Maintenance/Override, or
  • SP value tracks PV value in Manual loop mode (Sts_SPTrackPV=1), or
  • Current value of SP rate of change limit increasing is zero (Val_SPRoCIncr=0) and current SP target (Val_SPSet) is above current SP, or
  • Current value of SP rate of change limit decreasing is zero (Val_SPRoCDecr=0) and current SP target (Val_SPSet) is below current SP.
SP ramping executes if these bullets are all true:
  • not skipped (Sts_SkipSPRoCLim=0),
  • the setpoint has not reached its target Val_SPSet,
  • absolute value of loop deviation (|Val_E|) does not exceed configured maximum ramp deviation, |Val_E|≤ Cfg_SPRampMaxDev.
If |Val_E|> Cfg_SPRampMaxDev, then actual RoC limits Val_SPRoCDecr and Val_SPRoCIncr are set to zero and the SP does not change.
PPID_SPramping2_v33
SP scaling
If PV scaling limits are valid (Sts_ErrPVEU=0) SP in PVEU is scaled to percent used in PID calculation, SP = (SPEU-Cfg_PVEUMin)/(Cfg_PVEUMax-Cfg_PVEUMin)×100.
Ratio selection and clamping
The PPID instruction is ready for the Operator to enter a Ratio if the Cascade loop mode is Ratio (Cfg_HasRatio=1), ratio clamping limits are not invalid, and the PPID instruction is not configured for tracking, or Operator has Ratio, or in Hand.
If the PPID instruction allows Cascade-Ratio (Cfg_HasRatio=1) and ratio clamping limits are not invalid, then the source for Ratio is selected based on the command source:
  • PSet_Ratio if Program has Ratio,
  • OSet_Ratio if Operator has Ratio,
  • XSet_Ratio if External has Ratio,
  • Inp_OvrdRatio if Override is selected.
If the PPID instruction allows Cascade-Ratio (Cfg_HasRatio=1) and ratio clamping limits are not invalid, Ratio is clamped at Cfg_RatioHiLim and Cfg_RatioLoLim. If clamping is active Sts_RatioClamped is set.
If the loop does not have Ratio or Ratio clamping limits are invalid, the Ratio is set to 1.0 (Val_Ratio = 1.0).
SP and Ratio tracking for bumpless transfer
Val_SPSet is copied back to all inactive SP settings to allow bumpless transfer when the SP owner changes.
SP tracking is applied if PPID is configured for it (Cfg_SetTrack=1) and:
  • Loop mode is not in Override nor Hand, or
  • Loop mode is in Override or Hand and PPID is configured to track in Override and Hand loop mode (Cfg_SetTrackOvrdHand=1), or
  • Loop mode is in Cascade, or
  • Loop mode is in Manual and Cfg_PVTrack=1.
This diagram shows the main steps in SP processing before the SP value enters the PID formula for calculating CV.
PPID_SPscaling_v33
CV handling
CV selection in Manual
In Manual loop mode, if CV clamping limits are valid, the CV is selected from the active source (Program/ Operator/ External/ Override). If Program has CV, PSet_CV is selected, and so on. The PPID instruction is ready for OSet_CV (ORdy_CV=1) under the following conditions: operator entry is not configured for tracking in Program/Operator/External (Cfg_SetTrack=0), or command source is Hand or Override and operator entry is not configured for tracking in Hand or Override (Cfg_SetTrackOvrdHand=0).
CV shed
Val_CVSet holds the last good CV value and the CV value replacement status is set (Sts_CVHeld=1) when
  • Interlock trips and CV action is configured for last good CV value (Cfg_IntlkTripCVAction=1), or
  • SP fails and follow up action on CV is configured for last good CV value (Cfg_SPFailCVAction=1) and the loop mode is Auto or Cascade or SP did not fail in previous scan (SP fail rising edge), or
  • PV fails and follow up action on CV is configured for last good CV value (Cfg_PVFailCVAction=1) and the loop mode is Auto or Cascade or PV did not fail in previous scan (PV fail rising edge), or
  • PV substituted at PAI (Inp_PVSrcQ=18) and the loop mode is Auto or Cascade, or
  • CV fails and follow up action on CV is configured for last good CV value (Cfg_CVFailCVAction=1) and the loop mode is Auto or Cascade or CV did not fail in previous scan (CV fail rising edge).
For Sts_CVHeld=1 the CV is not updated.
NOTE:
When PV, CV, or SP fails, the last good CV value stays at output, but it can be still overwritten in Manual loop mode.
PPID_CVshed1_v33
Val_CVSet sets to Cfg_CVIntlk and the CV value replacement status is set (Sts_IntlkCV=1) when:
  • Interlock trips and CV action is configured for Cfg_CVIntlk (Cfg_IntlkTripCVAction=2), or
  • SP fails and follow up action on CV is configured for Cfg_CVIntlk (Cfg_SPFailCVAction=2) and loop mode is Auto or Cascade or SP did not fail in previous scan (SP fail rising edge), or
  • PV fails and follow up action on CV is configured for Cfg_CVIntlk (Cfg_PVFailCVAction=2) and loop mode is Auto or Cascade or PV did not fail in previous scan (PV fail rising edge), or
  • CV fails and follow up action on CV is configured for Cfg_CVIntlk (Cfg_CVFailCVAction=2), and loop mode is Auto or Cascade or CV did not fail in previous scan (CV fail rising edge), or
  • PPID is out of service.
    NOTE:
    When PV, CV, or SP fails, the Cfg_CVIntlk value stays at output, but it can be still overwritten in Manual loop mode.
PPID_CVshed2_v33
If CV value is being set by shed, to interlock CV or hold last good CV value, Sts_CVShed=1.
CV clamping
If CV clamping limits are valid (Sts_ErrCVLim=0) and the loop mode is not Manual, or is Manual but the configuration is set not to skip CV clamping (Cfg_SkipCVManLim=0), the calculated or set value of CV (CVSet) is clamped at Cfg_CVHiLim and Cfg_CVLoLim. The corresponding status bits (Sts_CVHiClamped, Sts_CVLoClamped, and Sts_CVClamped) are set if the CV is clamped.
CV rate of change limiting
If the PPID instruction is not configured to skip CV RoC limiting in Manual (Cfg_SkipCVManRoC=0) and the loop mode is Manual and PPID is configured for RoC limiting (Cfg_CVRoCIncrLim>0, Cfg_CVRoCDecrLim>0) and the target value of CV is greater than CVOut_previous+Cfg_CVRoCIncrLim*Ts (Ts is current PPID scan time), the CVOut is calculated as CVOut= CVOut_previous+Cfg_CVRoCIncrLim*Ts. If the target value of CV is lower than CVOut_previous-Cfg_CVRoCDecrLim*Ts (Ts is current PPID scan time) then CVOut= CVOut_previous-Cfg_CVRoCDecrLim*Ts. If ramping is active, status bits are set (Sts_CVRampingUp/Sts_CVRampingDown=1, Sts_CVRamping=1). The status bits are cleared if CVOut reaches the target. If ramping is not active the CV target is copied to CVOut.
CV output in percent
CVOut, which is calculated in Auto/Cascade or entered from various sources in Manual, is scaled to percent and made available as Val_CVOutPercent. Val_CVOutPercent=0 if CV scaling limits are invalid.
This diagram shows the main steps in CV processing.
PPID_CVclamping_v33
Interlock handling
Maintenance commands to bypass or check bypassable interlocks are processed. Interlock bypassing is active if requested (MCmd_Bypass=1). The bypassing request remains active (Sts_Bypass=1) until a maintenance command to check bypassable alarms (MCmd_Check=1) is received. Bypassing is active (Sts_BypActive=1) if requested (Sts_Bypass=1), or in Maintenance (Sts_Maint=1), or in Override (Sts_Ovrd) if the instruction is configured for bypassing interlocks in Override (Cfg_OvrdIntlk). If an Interlock is NOT OK (bypassable or not), and if any action is configured on the Interlock, the Interlock NOT OK latch is shed.
Initialization and Powerup
The instruction must be initialized to execute properly. The instruction is normally initialized automatically in the instruction first run (for example, after power up). Re-initialization can be requested any time by setting Inp_InitializeReq = 1. This operand is cleared in the instruction automatically. For proper initialization, when adding the instruction while performing an online edit of the code, make sure that Inp_InitializeReq = 1 (default value). Action performed in initialization:
  • Owner command set to None,
  • Override command set to None,
  • Maintenance commands to bypass and check interlocks are cleared,
  • Operator, Program and External commands are cleared,
  • latched shed faults are cleared,
  • all timers are reset.
This section defines PPID actions on Loop mode, SP and CV in initialization (Power up).
Loop mode handling in Power up Normal:
  • Normal loop mode is disabled (Cfg_NormLM=0) if loop mode defined as normal is invalid (Cfg_NormLM<0 | >3), or normal loop mode is set Cascade but the instruction does not allow Cascade in configuration (Cfg_HasCasc ≠ 1 & Cfg_NormLM = 3),
  • Loop mode is set to Manual if loop mode for Power up (Cfg_PwrUpLM) is Normal and normal loop mode is Manual, or loop mode for Power up in Manual,
  • Loop mode is set to Auto if normal loop mode for Power up is Normal and normal loop mode is Auto, or loop mode for Power up in Auto,
  • Loop mode is set to Cascade if normal loop mode for Power up is Normal and normal loop mode is Cascade, or loop mode for Power up in Cascade.
Cascade SP handling in Power up:
  • Inp_CascSP = Cfg_SPPwrUp if loop mode in Powerup (Cfg_PwrUpLM) is explicitly provided as Manual/ Auto/ Cascade/ Normal and the Cascade loop mode is not Ratio, or Val_Ratio = 0,
  • Inp_CascSP = Cfg_SPPwrUp × Val_Ratio if loop mode in Powerup is explicitly provided as Manual/ Auto/ Cascade/ Normal and the Cascade loop mode is Ratio and Val_Ratio ≠ 0.
SP handling in Power up. All SP inputs, interval SP values, and output SP values are overwritten by SP value configured for Power up:
  • Cfg_SPPwrUp → PSet_SP, OSet_SP, XSet_SP, Inp_OvrdSP,
  • Cfg_SPPwrUp → PSet_SPTarget, OSet_SPTarget, XSet_SPTarget, Inp_OvrdSPTarget,
  • Cfg_SPPwrUp → Val_SPTarget, Val_SPSet, Val_SP.
PPID_interlockhandling1_v33
CV handling in Power up. All CV inputs, internal CV values, and output CV values are overwritten by CV value configured for Power up:
  • Cfg_CVPwrUp → PSet_CV, OSet_CV, XSet_CV, Inp_OvrdCV, Inp_CVPrev, Val_CVSet, Val_CVOut.
The powerup CV, CV clamping, and CV rate of change limiting work together. If the powerup CV is set below the minimum CV clamping limit, the CV will start from the Cfg_CVPwrUp value and gradually ramp up to the minimum CV clamping limit on powerup.
PPID_interlockhandling2_v33
When in Auto or Cascade, CV can be initialized by inner loop CV set in Inp_CVTrack if Inp_InnerAvailable=0 and Cfg_CVPwrupSel=1. If Cfg_CVPwrupSel=0 then Inp_InnerAvailable is ignored in first run and Cfg_CVPwrup is used as initial CV.
If the loop mode was not zero for Power up (Cfg_PwrUpLM) and multiple loop modes were set internally, the instruction makes sure only one loop mode is set at a time, using this order of priority: Manual, then Auto, then Cascade. If the Powerup loop mode is 0, the loop mode, CV, and SP are left in their last (powerdown) states. Once initialization is complete the initialization request is cleared and the instruction is reported initialized (Sts_Initialized = 1).
Configuration error report
Selected parameters with Cfg_ prefix and data type REAL are examined in a validity check to prevent false actions. An error bit specific to a particular parameter is set if the value is not valid. If an error bit is set, the global error (Sts_Err) is reported and a Fail alarm is raised.
PPID_interlockhandling3_v33
The PPID instruction ensures a valid number of decimal places for PV and CV display in the HMI. Cfg_xxDecPlcs =2 if an invalid number is entered. The PPID instruction ensures valid action on SP/PV/CV fail. Cfg_SPFailSPAction = 1, Cfg_PVFailPVAction = 1, and Cfg_CVFailCVAction = 1 for any invalid number entered. The PPID instruction ensures valid Keep configuration on eKeepLM, CV, Ratio and SP. Cfg_eKeepxx = 0 (follows command source) if an invalid value is entered.
CV, SP, Ratio, Loop Mode ownership
Owned by Operator
The CV is owned by Operator if:
  • The current command source is Operator (Sts_Oper=1) and the configuration is set to follow the command source (Cfg_eKeepCV=0), or
  • the command source is Operator/Program/External and the configuration keeps the CV for Operator (Cfg_eKeepCV=1),
  • or the command source is Maintenance (Sts_Maint=1).
The loop mode is owned by Operator if:
  • The current owner is Operator (Sts_Oper=1) and the configuration is set to follow the command source (Cfg_eKeepLM=0), or
  • the owner is Operator/Program/External and the configuration keepd the loop mode for Operator (Cfg_eKeepLM=1), or
  • the owner is Maintenance (Sts_Maint=1).
The Ratio is owned by Operator if:
  • The current owner is Operator (Sts_Oper=1) and the configuration is set to follow the command source (Cfg_eKeepRatio=0), or
  • the owner is Operator/Program/External and the configuration keeps the Ratio for Operator (Cfg_eKeepRatio=1), or
  • the owner is Maintenance (Sts_Maint=1).
The SP is owned by Operator if:
  • The current owner is Operator (Sts_Oper=1) and the configuration is set to follow the command source (Cfg_eKeepSP=0), or
  • the owner is Operator/Program/External and the configuration keeps the SP for Operator (Cfg_eKeepSP=1), or
  • the owner is Maintenance (Sts_Maint=1).
Owned by Program
The CV is owned by Program if:
  • The current owner is Program (Sts_Prog=1) and the configuration is set to follow the command source (Cfg_eKeepCV=0), or
  • the owner is Operator/Program/External and the configuration keeps the CV for Program (Cfg_eKeepCV=2).
The loop mode is owned by Program if:
  • The current owner is Program (Sts_Prog=1) and the configuration is set to follow the command source (Cfg_eKeepLM=0), or
  • the owner is Operator/Program/External and the configuration keeps the loop mode for Program (Cfg_eKeepLM=2).
The Ratio is owned by Program if:
  • The current owner is Program (Sts_Prog=1) and the configuration is set to follow the command source (Cfg_eKeepRatio=0), or
  • the owner is Operator/Program/External and the configuration keeps the Ratio for Program (Cfg_eKeepRatio=2).
The SP is owned by Program if:
  • The current owner is Program (Sts_Prog=1) and the configuration is set to follow the command source (Cfg_eKeepSP=0), or
  • the owner is Operator/Program/External and the configuration keeps the SP for Program (Cfg_eKeepSP=2).
Owned by External
The CV is owned by External if:
  • The current owner is External (Sts_Ext=1) and the configuration is set to follow the command source (Cfg_eKeepCV=0), or
  • the owner is Operator/Program/External and the configuration keeps the CV for External (Cfg_eKeepCV=3).
The Loop mode is owned by External if:
  • The current owner is External (Sts_Ext=1) and the configuration is set to follow the command source (Cfg_eKeepLM=0), or
  • the owner is Operator/Program/External and the configuration keeps the loop mode for External (Cfg_eKeepLM=3).
The Ratio is owned by External if:
  • The current owner is External (Sts_Ext=1) and the configuration is set to follow the command source (Cfg_eKeepRatio=0), or
  • the owner is Operator/Program/External and the configuration keeps the Ratio for External (Cfg_eKeepRatio=3).
The SP is owned by External if:
  • The current owner is Program (Sts_Prog=1) and the configuration is set to follow the command source (Cfg_eKeepSP=0), or
  • the owner is Operator/Program/External and the configuration keeps the SP for External (Cfg_eKeepSP=3).
PPID statuses
PV bad status
The Process variable fails in case of invalid PV scaling limits, and the PV is reported bad at source via Inp_PVBad input or quality index Inp_PVSrcQ. The PV cannot be used in PID calculations if the source quality is bad. The PV is also treated as failing if the PV is live but reported uncertain or just off-spec and the PPID is configured for treating this situation as unacceptable (Cfg_PVFailTrigger=1 or 2).
PPID_PVbadstatus_v33
SP bad status
Setpoint fails if:
  • SP clamping limits are invalid (Sts_ErrSPLim=1), or
  • PV limits used in scaling are invalid (Sts_ErrPVEU=1, Max<=Min).
The failure occurs because SP is derived from PV if the loop mode is Ratio, or ratio clamping limits are invalid when the loop mode is Ratio (Sts_ErrRatioLim=1 & Cfg_HasRatio=1 & loop mode is Cascade).
PPID_SPbadstatus_v33
CV bad status
CV is bad if:
  • Inp_CVIOFault=1, or
  • CV clamping limits are invalid (Sts_ErrCVLim=1), or
  • CV scaling limits are invalid (Sts_ErrCVEU=1),or
  • Hand feedback is bad and the PPID is in Hand mode.
PPID_CVbadstatus_v33
Loop failure status
Loop failure (Sts_Fail) is set if SP, PV, or CV fails and failure shed is latched. If Sts_Fail is set the loop cannot operate normally.
PPID_LoopFailStatus_v33
Windup status
Windup status High (Sts_WindupHi) is set if:
  • Selected SP is clamped at high limit (Sts_SPHiClamped=1), or
  • CV is clamped at high limit (Sts_CVHiClamped=1) if the PPID is configured for reverse control action (Cfg_CtrlAction=0), or
  • CV is clamped at low limit (Sts_CVLoClamped=1) if the PPID is configured for direct control action (Cfg_CtrlAction=1).
PPID_windupstatus_v33
Windup status Low (Sts_WindupLo) is set if:
  • Selected SP is clamped at low limit (Sts_SPLoClamped=1), or
  • CV is clamped at low limit (Sts_CVLoClamped=1) if the PPID is configured for reverse control action (Cfg_CtrlAction=0), or
  • CV is clamped at high limit (Sts_CVHiClamped=1) if the PPID is configured for direct control action (Cfg_CtrlAction=1).
PPID_windupstatus2_v33
Active status
Status CV active (Sts_Active) is set if Val_CVOut is greater than Cfg_MaxInactiveCV. The HMI graphic symbol, for example, valve open, is shown for Sts_Active=1, and the inactive HMI graphic symbol, for example, valve closed, is shown when Sts_Active=0.
Not ready status
The PPID instruction is not ready (Sts_NotRdy=1) under these conditions:
  • PPID is out of service (Sts_NrdyOoS=1), or
  • PPID goes to Manual loop mode when initialized and Inp_CVInitialVal is used to initialize CV (Sts_NrdyInit=1), or
  • PPID configuration error (Sts_NRdyCfgErr=1), or Interlock not OK (Sts_NrdyIntlk=1), or
  • Inner object to this PPID, typically PID of the secondary loop, is not available (Inp_InnerAvailable=0) for Auto or Cascade mode of the PPID (Sts_Auto=1 | Sts_Casc=1), or
  • Loop fails (Sts_Fail=1) because of PV/SP/CV bad value or communication failure, or Hand feedback value is invalid.
PPID_notreadystatus_v33
Available statuses
The PPID instruction is available (Sts_Available=1) to other objects when in Program mode, not in the first scan, and generally ready for control.
Inner loop is available for cascade control (Sts_CascAvailable=1) when in Cascade mode, not in the first scan, and generally ready for control.
Inner loop is available for external control (Sts_ExtAvailable=1) when in External mode, not in the first scan, and generally ready for control.
This diagram shows the conditions required for the instruction to be generally ready for control.
PPID_availablestatuses_v33
Configuration of strings for HMI
Configure strings for HMI faceplates, as seen in
FactoryTalk View
, and for the
Logix Designer
configuration dialog box. The strings are set to extended properties of tag items. Configure strings in the
Logix Designer
application only.
  • Description
  • Label for graphic symbol
  • Display Library for HMI Faceplate call-up
  • Instruction name
  • Area name
  • URL link
  • Path to an object with more information
  • Path to an object providing Cascade SP
  • Path to an object providing PV
  • Path to an object consuming CV
  • PV/SP engineering units
  • CV engineering units
Command source
The instruction uses these command sources. The command sources are prioritized in order from highest to lowest in this table.
Command source
Description
Hand
Hardwired logic or other logic outside the instruction owns control of the device. The instruction tracks the state of the device for bumpless transfer back to one of the other command sources.
While in Hand mode the PID algorithm does not compute the change in CV.
Val_CVOut = Inp_HandFdbk (Inp_Tieback), regardless of the control mode. Hand mode is typically used to indicate that control of the final control element was taken over by a field hand/auto station.
Set Inp_Hand to request hand mode. This value is usually read as a digital input from a hand/auto station.
(Highest Priority command source)
Out-of-Service
The instruction is disabled and has no owner.
Maintenance
Maintenance owns control of the device and supersedes Operator, Program, External and Override control. Operator commands and settings from the HMI are accepted. Bypassable interlocks are bypassed, and device timeout checks are not processed.
Override
Priority logic owns control of the device and supersedes Operator, Program and External control. Override Input (Inp_OvrdCmd) is accepted. If so configured, bypassable interlocks are bypassed.
External
External logic owns control of the device. External commands (XCmd_) are accepted.
Program locked
Program logic owns control of the device. Program commands (PCmd_) are accepted. Operator cannot take from Program. Override cannot take from Program unless Cfg_OvrdOverLock = 1.
Program
Program logic owns control of the device. Program commands (PCmd_) are accepted.
Operator locked
The Operator owns control of the device. Operator commands (OCmd_) from the HMI are accepted. Program cannot take from Operator. Override cannot take from Operator unless Cfg_OvrdOverLock = 1.
Operator
The Operator owns control of the device. Operator commands (OCmd_) from the HMI are accepted.
(Lowest Priority command source)
The instruction enables or disables these operations:
  • Maintenance Out-of-Service exists
  • Maintenance exists
  • External exists
  • Program (unlocked) exists
  • Program locked exists
  • Operator (unlocked) exists
  • Operator locked exists
  • PCmd_Lock used as a Level (1 = Lock, 0 = Unlock)
  • XCmd_Acq used as a Level (1 = Acquire External, 0 = Release External)
The instruction checks for invalid configurations of control and forces the nearest valid configuration.
The core control model arbitrates the source of the commands and parameters that the receiving function accepts. The core control model determines if the source is:
  • A programmatic entity which resides entirely within the processing environment, or
  • An external interface entity which issues commands and parameters external and asynchronously to the processing environment.
Locking a control source prevents the other control source from acquiring privilege.
Core command source model
The core command source model consists of these control sources:
  • Oper
  • OperLocked
  • Prog
  • ProgLocked
The control model defaults to this configuration. Other control sources may be present in the model but act as overriding control sources, acting independent of the base Operator/Program state machine.
Enabling control sources in configuration
The individual control sources may be enabled or disabled by the user. The default configuration uses the entire base model; upon power-up of the processing environment the control source will be the designated default. Some combinations of enabled control sources are disallowed as they are either unnecessary or could create unintended changes.
Ownership default and priority
Configuration allows a user to specify whether Operator or Program will be the power-up default and specify whether Operator or Program commands will win when simultaneously asserted.
Automatic reset of commands
All commands are treated as one-shot-latched. This means that all commands are automatically cleared when the instruction executes and processes them.
Changing destination states
Under certain configurations the destination command source for some commands may change. This is in keeping with the intent of the command. For example, if the Prog is disabled, the destination of the OCmd_Prog command is directed to the ProgLocked state instead of the Prog state. This maintains the intent of the OCmd_Prog command: the operator entity wishes to place the function in control of the program. If the command was eliminated then there would be no way to accomplish this. This is only done in configurations where it would cause no conflict or race condition, but serves to preserve as much user functionality as is practical.
Higher priority command sources
These higher priority command sources operate independently within the model: External, Override, Maintenance, Out-of-Service, In-Service, and Hand.
Command source processing and ownership arbitration
Maintenance and operator commands (MCmd_OoS, MCmd_IS, MCmd_Acq, MCmd_Rel, OCmd_Oper, OCmd_Prog, Ocmd_Lock, OCmd_Unlock, OCmd_Normal) are forwarded to the contained PCmdSrc instruction.
Maintenance and ready bits (MRdy_OoS, MRdy_IS, MRdy_Acq, MRdy_Rel, ORdy_Oper, ORdy_Prog, ORdy_Lock, ORdy_Unlock, ORdy_Normal) are copied from the contained PCmdSrc instruction in response.
The instruction sets ownership (Val_Owner) according to the order in which requests are received. If the requestor supplies a non-zero owner ID (PSet_Owner) and the current owner is none (Val_Owner = 0), the instruction assigns ownership to the requesting ID.
Monitor the PPID 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
The PID algorithm is only scanned at the configured execution rate Cfg_ExecTime. Configuring the instruction for execution period = 0.0 (default) or for a period shorter than the instruction scan time has no effect and the PID algorithm executes every scan. For the real execution period check Val_ExecTime.
Ladder Diagram
Condition/State
Action Taken
Prescan
Rung-condition-out is cleared to false.
Sts_eSrc is set to 0. Sts_bSrc is set to 0.
Instruction first run
All commands that are automatically cleared each execution are cleared and ignored.
The Program/Operator selection is set based on the configuration (Cfg_ProgPwrUp).
The Program or Operator lock selection is set to unlocked.
Loop mode is set according to configuration (Cfg_PwrUpLM). Initial value pf SP and CV are set according to Cfg_SPPwrUp and Cfg_CVPwrUp and selected loop mode. If Cfg_PwrUpLM=0 (no change), SP and CV initial values are equal to values from last scan (e.g. before power down).
PSet_Owner and Sts_Owner are set to 0.
Rung-condition-in is false
The instruction is put Out of Service if Inp_Hand=0. The output is de-energized. All alarms are cleared.
Command source selection processing proceeds as normal except that all ownership status bits (Sts_Maint, Sts_Ovrd, Sts_Ext, Sts_Prog and Sts_Oper) are cleared to 0. When rung-condition-in becomes true, the instruction takes into account the commands received and sets the active command source accordingly.
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
See Prescan in the Ladder Diagram table.
Instruction first run
See Instruction first run in the Ladder Diagram table.
Instruction first scan
See Instruction first run in the Function Block Diagram table.
EnableIn is false
See Rung-condition-in is false in the Ladder Diagram table.
EnableIn is true
See Rung-condition-in is true in the Ladder Diagram table.
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 Ladder Diagram table.
Instruction first run
See Instruction first run in the Ladder Diagram table.
EnableIn is true
See Rung-condition-in is true in the Ladder Diagram table.
Postscan
EnableIn and EnableOut bits are cleared to false.
Examples
Example 1: PID feedback control
This example demonstrates wiring analog input and analog output instructions with a PPID instruction.
Pressure system tank level control is considered as an example of wiring analog input and analog output instruction(s) with a PPID instruction. Consider a section of water distribution system with a station pumping water from a collector tank to a tank maintaining system pressure at distribution nodes. Due to demand variation water level fluctuates so the system pressure varies. The PPID instruction helps stabilize the pressure by measuring and processing the water level as a process variable. PPID calculates the reference speed for a motor driving a pump to compensate for demand variations. The actual motor rpm is measured and fed back to the controller. This feedback enables the control scheme to read the actual motor speed when the service personnel takes over the control and manipulates with pump directly from the control panel (motor is in Hand). Components of the PID loop should track the actual rpm and be ready to take over control without any bump.
Analog input module provides level in raw units and fault signals processed by the PAI instruction (LI_30). Level in engineering units (LI_30.Val), level signal quality (LI_30.SrcQ) and alarm notification (LI_30.Sts_eNotifyAll) are wired to corresponding inputs of a PPID (LIC_31.Inp_PV, LIC_31.Inp_PVSrcQ, LIC_31.Inp_PVNotify). PPID is configured so the proper response occurs when the level signal is not reliable and should not enter PID formula for CV calculation. Set Cfg_PVFailTrigger to properly classify PV source quality. Use Cfg_PVFailSPAction, Cfg_PVFailCVAction, and Cfg_PVFailLMAction to specify the setpoint value, the value of the control variable, and the loop mode the PPID instruction uses if the PV source quality is reported as bad.
The PPID instruction should receive a signal indicating whether the downstream object driven by the PPID (the analog output instruction SZ_31 driving a motor) is active and is responding properly to the PPID instruction CV. In other words, the PPID instruction should receive a signal if the control loop is not open.
If the CV output of SZ_31 saturates (SZ_31.Sts_WindupHi=1 or SZ_31.Sts_WindupLo=1), the PPID instruction is out of control. To prevent windup, SZ_31.Sts_WindupHi and SZ_31.Sts_WindupLo are wired to LIC_31.Inp_WindupHi and LIC_31.Inp_WindupLo.
If the pump motor, the device driven by SZ_31, is in failure (M31_Fail=1), the loop is also open and both SZ_31 and LIC_31 should follow the actual device status to avoid any bump when put back in control. Actual motor rpm is measured, the rpm raw signal is scaled to engineering units by analog input instruction SI_31, and scaled value of rpm (SI_31.Val) is wired as a feedback signal to SZ_31.Inp_PosFdbk.
If service personnel have the pump motor in hand mode (M31_Hand=1), actual speed is provided separately in the M31_Fdbk tag, wired to SZ_31.Inp_HandFdbk.
Device status is collected in analog output instruction SZ_31 and communicated upstream to the PPID instruction. The PPID instruction should be informed that the control loop is open somewhere downstream and thus the SZ_31 is not available for LIC_31. Wire SZ_31.Sts_Available to LIC_31.Inp_InnerAvailable to pass the information to the PPID. Actual speed reference should be provided to PPID for tracking purposes when control loop opens. Wire SZ_31.Val_CVOut to LIC_31.Inp_CVTrack. Other downstream problems like communication or device fault should also be fed back to the PPID so the instruction takes a configured action in response. Merge SZ_31.Sts_IOFault with SZ_31.Sts_DeviceFault, wire the result to LIC_31.Inp_CVIOFault and use LIC_31.Cfg_CVFailSPAction and LIC_31.Cfg_CVFailCVAction to configure the PPID for the follow up action.
Finally update the alarm notification for the PPID and propagate the highest severity notification from SZ_31 upstream. Wire SZ_31.Sts_eNotifyAll to LIC_31.Inp_CVNotify.
PPID_example1diagram_v33
The example is shown in all three language editors.
Ladder Diagram
PPID_example1ladder1_v33
PPID_example1ladder2_v33
PPID_example1ladder3_v33
Function Block Diagram
PPID_example1FBD_v33
Structured Text
LI_30.Inp_PVData := LI_30_raw;
LI_30.Inp_ModFault := LevelAnalogModuleFault;
LI_30.Inp_OutOfSpec := LevelOutOfSpec;
PAI(LI_30,0);
LIC_31.Inp_PV := LI_30.Val;
LIC_31.Inp_CVTrack := SZ_31.Val_CVOut;
LIC_31.Inp_PVSrcQ := LIC_31.Inp_PVSrcQ;
LIC_31.Inp_PVNotify := LI_30.Sts_eNotifyAll;
LIC_31.Inp_CVNotify := SZ_31.Sts_eNotifyAll;
LIC_31.PSet_SP := LIC_31_SP;
LIC_31.Inp_WindupHi := SZ_31.Sts_WindupHi;
LIC_31.Inp_WindupLo := SZ_31.Sts_WindupLo;
LIC_31.Inp_CVIOFault := SZ_31.Sts_IOFault OR SZ_31.Sts_DeviceFault;
PPID(LIC_31,0);
SI_31.Inp_PVData := SI_31_raw;
PAI(SI_31,0);
SZ_31.PSet_CV := LIC_31.Val_CVOut;
SZ_31.Inp_PosFdbk := SI_31.Val;
SZ_31.Inp_HandFdbk := M31_Fdbk;
SZ_31.Inp_DeviceFault := M31_Fail;
SZ_31.Inp_Hand := M31_Hand;
PAO(SZ_31,0);
SZ_31_raw := SZ_31.Out_CVData;
Example 2: Cascade control
Cascade control is useful when externally-caused upsets to the controlled variable occur often, which then cause upsets to the process variable you are trying to control. For example, try to control the temperature of liquid in a tank by varying the amount of steam fed into a heating jacket around the tank. If the steam flow suddenly drops because of an upstream process, the temperature of the liquid in the tank eventually drops and the PPID instruction then opens the steam valve to compensate for the drop in temperature.
PPID_example2diagram_v33
In this example, a cascaded loop provides better control by opening the steam valve when the steam flow drops before the liquid temperature in the tank drops. To implement a cascaded loop, use a PPID instruction to control the steam valve opening based on a process variable signal from a steam flow transmitter. This is the inner loop of the cascaded pair. A second PPID instruction (called the outer or primary loop) uses the liquid temperature as a process variable and sends its CV output into the setpoint of the inner loop. In this manner, the outer temperature loop asks for a certain amount of steam flow from the inner steam flow loop. The steam flow loop is then responsible for providing the amount of steam requested by the temperature loop in order to maintain a constant liquid temperature.
For a cascaded pair of loops to work correctly, the inner loop must have a faster process response than the primary loop. This is because the inner loop’s process must be able to compensate for any upsets before these upsets affect the outer loop’s process. In this example, if steam flow drops, the steam flow must be able to increase as a result of the inner controller’s action before the liquid temperature is affected.
To set up a pair of cascaded PPID instructions, set the Cfg_HasCasc input parameter in the inner loop. This allows the inner loop to be placed into Cascade/Ratio mode. Next, wire the Val_CVOut from the outer loop into the Inp_CascSP parameter on the inner loop. The Inp_CascSP value is used as the SP on the inner loop when the inner loop is placed into Cascade/Ratio mode. The engineering unit range of the Val_CVOut on the outer loop should match the engineering unit range of the PV on the inner loop. This lets the outer loop scale its 0-100% value of CV into the matching engineering units used for the setpoint on the inner loop.
The PPID instruction has several other features to more effectively support cascade control. Wire the Sts_CascAvailable output on the inner loop PPID into the Inp_InnerAvailable input on the outer loop PPID and wire the Val_SP output of the inner into the Inp_CVTrack input on the outer. This sets the Val_CVOut value of the outer loop to track the SP of the inner loop when the inner loop is not in Cascade/Ratio mode. This allows a bumpless transfer when you place the inner loop back into Cascade/Ratio mode. Also, wire the Sts_WindupHi and Sts_WindupLo outputs on the inner loop into the Inp_WindupHi and Inp_WindupLo inputs on the outer loop. This causes the outer loop to stop increasing or decreasing, as appropriate, its Val_CVOut value if the inner loop hits a SP limit or CV limit and eliminates any windup on the outer loop if these conditions occur.
The example is shown in FBD in two versions, with minimum wiring and extended wiring. The extended wiring shows passing alarm notification between outer and inner PID and makes signal quality input pins visible for immediate use in the application.
Function Block Diagram
PPID_example2FBD1_v33
PPID_example2FBD2_v34
Example 3: Ratio control
Ratio control is typically used to add a fluid in a set proportion to another fluid. For example, if you want to add two reactants (say A and B) to a tank in a constant ratio, and the flow rate of reactant A may change over time because of some upstream process upsets, you can use a ratio controller to automatically adjust the rate of reactant B addition. In this example, reactant A is often called the uncontrolled or wild flow since it is not controlled by the PPID instruction. The flow of reactant B is then called the controlled flow.
PPID_example3diagram_v33
To perform ratio control with a PPID instruction, set the Cfg_HasCasc and Cfg_HasRatio input parameters. Wire the uncontrolled flow into the Inp_CascSP input parameter. When in Cascade/Ratio mode, the uncontrolled flow is multiplied by either the OSet_Ratio, when in Operator control, or the PSet_Ratio, when in Program control, and the resulting value is used by the PPID instruction as the setpoint.
The example is shown in FBD.
Function Block Diagram
PPID_example3FBD_v33
Example 4: Feedforward control
Feedforward control is a disturbance rejection strategy to deal with load change. Rather than rely on feedback to make corrective changes to a process only after some load change has driven the process variable away from setpoint, control schemes with feedforward monitor the relevant load(s) and use that information to preemptively make stabilizing changes to the final control element such that the process variable will not be affected.
Consider a control system manipulating steam flow to the heat exchanger to maintain the discharge temperature of the oil at a constant setpoint value. The outlet temperature will suffer temporary deviations from setpoint if load conditions change. The feedback control system may be able to eventually bring the exiting oil’s temperature back to setpoint, but it cannot begin corrective action until after a load has driven the oil temperature off setpoint. To improve control, build feedforward action and feedback action into the design. The feedforward action allows the control system to take corrective action in response to load changes before the process variable is affected.
In this example, the dominant load in the system is oil flow rate, caused by changes in demand at the combustion furnace where the oil is being used as fuel. Adapting this control system to include feedforward requires installing an oil flow transmitter and a gain/bias function providing feedforward action to the PID controller maintaining temperature. With feedforward control action in place, the steam flow rate immediately changes with oil flow rate, preemptively compensating for the increased or decreased heat demand of the oil. The time constant of the process with regard to steam flow changes is greater than the time constant of the process with regard to oil flow changes.
Oil flow is a wild variable. The feedforward control system can only manipulate the steam valve position in response to oil flow. The best method to help control it is to speed up the time constant of the steam flow variable, which the system can influence. The solution is to wire the output of the user-specified lead function FY_32 to Inp_FF of the PPID.
PPID_example4diagram_v33
Now, when the oil flow rate to this heat exchanger suddenly increases, the lead function will add a surge to the feedforward signal, quickly opening the steam valve and sending a surge of steam to the exchanger to help overcome the naturally sluggish response of the oil temperature to changes in steam flow. The feedforward action won’t be perfect with this lead function added, but it will be substantially better than if there was no dynamic compensation added to the feedforward signal.
The example is shown in FBD.
Function Block Diagram
PPID_example4FBD_v33
Example 5: Split-range control
Split-range control allows using a single PID Control Variable to drive more than one final control element. An application example is shown in the following figure.
PPID_example5diagram_v33
At CV=0 (Val_CVOut=0), both valves are closed. When the CV is positive, the pressurizing valve is open and the vent valve is kept closed. If the PPID instruction is configured with CV scaling limits Cfg_CVEUMax=100 and Cfg_CVEUMin=-100, then at CV=100 the pressurizing valve is wide open. When the CV is negative, the vent valve is open and the pressurizing valve is closed. At CV=-100, vent is wide open. CV splitting is done with the Process Analog Fanout (PFO) instruction.
Configure PPID with Cfg_CVEUMin=-100, Cfg_CVEUMax=100 and PFO with Cfg_CVEUMin=-100, Cfg_CVEUMax=100, Cfg_CV1Ratio=1, Cfg_CV1Offset=0, Cfg_CV1HiLim=100, Cfg_CV1LoLim=0, Cfg_CV2Ratio=-1, Cfg_CV2Offset=0, Cfg_CV2HiLim=100, Cfg_CV2LoLim=0.
The PPID instruction must receive an indication whether its downstream object can be controlled. If the downstream object is not ready for the PPID instruction, the instruction should track what the downstream block defines for the situation. Wire the negation of the initialization request (Out_CVInitializeReq) received by the PFO instruction from its downstream object to Inp_InnerAvailable of the PPID instruction. In addition, wire the PFO instruction’s Out_CVInitializationVal to Inp_CVTrack of the PPID instruction. The PPID instruction will track this value when the downstream block is not ready for PPID control. The PPID instruction goes back to control without any bump if the downstream object becomes available again.
The example is shown in FBD.
Function Block Diagram
PPID_example5FBD_v33
Example 6: Override-select control
Consider the oil pipeline pump station in the figure below. In this example, the system measures suction pressure (41) and discharges pressure (73) and motor current (60). To control discharge pressure, use the variable-speed drive on the pump. The challenge is that if the suction pressure goes low, the pump cavitates. If the motor current goes too high, the drive trips and pressure upset is sent down the line. Both constraints act in the same direction. If the suction pressure goes low, the pump needs to slow down until it recovers. If the motor current goes high, slowing down the pump reduces the power, and so reduces the motor current.
PPID_example6diagram_v33
The Primary loop is the station discharge pressure. Suction pressure and motor current are Override loops. The low-select picks the lowest CV to send to the drive speed reference. Suction pressure and motor current loops’ setpoints are set to the constraint threshold (where to start acting). When a constraint is approached, that loop’s error gets small, its output drops, and it is selected. The selected CV is fed back to all three loops. The control scheme takes the advantage of using Inp_CVTrack for tracking final CV.
Recommended setting of the tracking parameter:
  • Dependent gains (Cfg_Dependent = 1). Set Cfg_CVTrackGain = Cfg_IGain.
  • Independent gains (Cfg_Dependent = 0). Set Cfg_CVTrackGain = Cfg_IGain/Cfg_PGain.
This setting leads to a steady state difference between selected (active) CV and unselected (tracking) CV equal to Cfg_PGain x Error which keeps proper leeway for the selected controller to control without unnecessarily frequent switching to another controller.
The example is shown in FBD.
Function Block Diagram
PPID example 6 FBD
Example 7: PID gain scheduling
Consider the oil pipeline pump station in the figure below. In this example, the system measures suction pressure (41) and discharges pressure (73) and motor current (60). To control discharge pressure, use the variable-speed drive on the pump. The challenge is that if the suction pressure goes low, the pump cavitates. If the motor current goes too high, the drive trips and pressure upset is sent down the line. Both constraints act in the same direction. If the suction pressure goes low, the pump needs to slow down until it recovers. If the motor current goes high, slowing down the pump reduces the power, and so reduces the motor current.
In this example the gain scheduling technique is used to compensate for changes in process dynamics on-the-fly. Standard temperature controller TIC_41 reads outlet temperature TT_41 (PV) and calculates reference for steam flow control loop (CV) to keep product temperature at the setpoint. PPID is configured with dependent gains (TIC_41.Cfg_Dependent=1) and the overall gain TIC_41.Cfg_PGain changes with product flow FT_40. Formula for PGain calculation is application specific. In this example PGain is calculated in PIDGainScheduler AOI as a linear function of product flowrate with bias.
PPID_example7diagram_v33
The example is shown in FBD.
Function Block Diagram
PPID_example7FBD_v33
Provide Feedback
Have questions or feedback about this documentation? Please submit your feedback here.