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 summingDPTerm,DITerm,DDTerm,DFF, 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 +DPTerm +DITerm +DDTerm +DFF. 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 theLogix Designerapplication 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
Function Block Diagram
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:
|
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.
These diagrams explain how alarm condition high-high deviation, high deviation, low deviation, low-low deviation, interlock trip and fail are derived.
Operation
In principle the PID core algorithm calculates CV with a formula configured for dependent gains,
where K is controller gain [-], Ti is reset time [minutes], Td is rate time [minutes]. Alternatively the instruction is configured for independent gains,
where K
P
is proportional gain [-], KI
is integral gain [1/minute], and KD
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:
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:
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:
Loop error calculations:
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.
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) * (Cfg_DSPCoef(k) *
SP(k)
– PV(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))
–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.For independent gains Cfg_Dependent=0.
Contribution of derivative term if Cfg_UseDSmooting=1 and Cfg_GainBumpless=1.
Contribution of derivative term if Cfg_UseDSmooting=1 and Cfg_GainBumpless=0.
Feedforward term.
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.
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).
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).
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).
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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).
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.
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.
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).
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).
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.
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.
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.
The example is shown in all three language editors.
Ladder Diagram
Function Block Diagram
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.
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
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.
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
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.
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
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.
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
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.
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
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.
The example is shown in FBD.
Function Block Diagram
Provide Feedback