Process Discrete Output (PDO)

This information applies to the CompactLogix 5380P and ControlLogix 5580P controllers.
The Process Discrete Output (PDO) instruction drives a discrete (true / false) output, monitors discrete inputs serving as feedbacks from a device driven by the discrete output, and checks for alarm conditions. Use the PDO instruction for a channel of a discrete output module. Use the PDO instruction with any discrete (BOOL) signal.
The PDO instruction:
  • Controls one discrete output, with configurable text labels for the On and Off states of the output.
  • Provides Operator, Program and External commands to set the output state to On or Off, to pulse the output On once, to pulse the output Off once, or to set the output to a continuous pulsing operation. Pulse times (on-time and off-time) are configurable.
  • Monitors two discrete feedback inputs, monitoring the actual position of the device.
  • Detects failure to reach the target state, after a configurable time, and alarms the failure when the feedback inputs are used. Optionally sheds to the de-energized state on a feedback failure.
  • Monitors Permissive conditions that enable commanding the device to the On state.
  • Monitors Interlock conditions that return the device to its de-energized Off state.
  • Provides virtualization of a normally working device, while holding the output to the real device de-energized, for use in testing or operator training.
  • Monitors I/O status and alarms on an I/O fault. Optionally sheds to the de-energized state on an I/O fault condition.
  • Operates in Operator, Program, External, Override, Maintenance, Out of Service and Hand command sources.
  • Provides an Available status, when in Program command source and operating normally, for use by higher-level automation logic to determine if the logic is able to manipulate the discrete output.
Available Languages
Ladder Diagram
PDO_avail lang_LD
Function Block Diagram
PDO_avai lang_fbd
Structured Text
PDO(PDO 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_DISCRETE_OUTPUT
tag
Data structure required for proper operation of instruction.
BusObj
BUS_OBJ
tag
Bus component. May be null.
P_DISCRETE_OUTPUT 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 Members
Data Type
Description
EnableIn
BOOL
Enable input.
Ladder Diagram:
Corresponds to the rung condition.
Default is true.
Inp_InitializeReq
BOOL
1 = Request to initialize the instruction. The instruction is normally initialized in instruction first run. Use this request to re-initialize. The instruction clears this operand automatically.
Default is true.
Inp_OwnerCmd
DINT
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_OnFdbkData
BOOL
On feedback from device. 1 = Device confirmed On.
Default is false.
Inp_OffFdbkData
BOOL
Off feedback from device. 1 = Device confirmed Off.
Default is false.
Inp_IOFault
BOOL
Indicates the IO data is inaccurate.
0 = The IO data is good,
1 = The IO data is bad, causing fault.
This input sets Sts_IOFault, if the device is not virtual, which raises IOFault Alarm.
Default is false.
Inp_PermOK
BOOL
1 = On permissives OK, device can turn On.
Default is true.
Inp_NBPermOK
BOOL
1 = Non-bypassable On permissives OK, device can turn On.
Default is true.
Inp_IntlkOK
BOOL
1 = Interlocks OK, device can turn On and stay On.
Default is true.
Inp_NBIntlkOK
BOOL
1 = Non-bypassable interlocks OK, device can turn On and stay On.
Default is true.
Inp_IntlkAvailable
BOOL
1 = Interlock Availability OK.
Default is false.
Inp_IntlkTripInh
BOOL
1 = Inhibit Interlock Trip Status
Default is false.
Inp_RdyReset
BOOL
1 = Related object, reset by this object, is ready to be reset.
Default is false.
Inp_Hand
BOOL
1 = Acquire Hand (typically permanently set to local),
0 = Release Hand.
Default is false.
Inp_Ovrd
BOOL
1 = Acquire Override (higher priority program logic),
0 = Release Override
Default is false.
Inp_OvrdCmd
SINT
Override device command:
0 = None,
1 = Off,
2 = On,
3 = Pulse off,
4 = Pulse on,
5 = Pulse continuously.
Default is 0.
Inp_ExtInh
BOOL
1 = Inhibit External acquisition,
0 = Allow External acquisition.
Default is false.
Inp_HornInh
BOOL
1 = Inhibit audible alert, 0 = Allow audible alert.
Default is false.
Inp_Reset
BOOL
1 = Reset shed latches and cleared alarms.
Default is false.
Cfg_HornOnChange
BOOL
0 = Horn on energize only. 1 = Horn on any state change.
Default is false.
Cfg_ExtOffPrio
BOOL
1 = XCmd_Off any time, 0 = XCmd_Off only when External selected.
Default is false.
Cfg_XCmdResets
BOOL
1 = New device XCmd resets shed latches and cleared alarms,
0 = XCmdReset required.
Default is false.
Cfg_AllowDisable
BOOL
1 = Allow Maintenance to disable alarms.
Default is true.
Cfg_AllowShelve
BOOL
1 = Allow Operator to shelve alarms.
Default is true.
Cfg_HasPulse
BOOL
1 = Enable pulsing functions,
0 = On/Off only.
Default is false.
Cfg_CompletePulse
BOOL
1 = Finish pulse in progress when commanded On or Off,
0 = Switch immediately to On or Off state when commanded.
Default is false.
Cfg_FdbkFail
BOOL
1 = Both feedbacks On are invalid,
0 = Both feedbacks Off are invalid.
Default is false.
Cfg_HasOnFdbk
BOOL
1 = Device provides an On feedback signal.
Default is false.
Cfg_HasOffFdbk
BOOL
1 = Device provides an Off feedback signal.
Default is false.
Cfg_UseOnFdbk
BOOL
1 = Use Device On feedback for failure checking.
Default is false.
Cfg_UseOffFdbk
BOOL
1 = Use Device Off feedback for failure checking.
Default is false.
Cfg_OperOffPrio
BOOL
1 = OCmd_Off has priority, accepted any time,
0 = OCmd_Off only in Operator and Maintenance command sources.
Default is false.
Cfg_OCmdResets
BOOL
1 = New Operator state command resets fault,
0 = Reset required to clear fault.
Default is false.
Cfg_ShedOnIOFault
BOOL
1 = Go to Off state and alarm on IO fault,
0 = Alarm only on IO fault.
Important
: If a condition is configured to shed the device to the Off state on a fault, a reset is required to clear the shed fault to command the device to a state other than Off.
Default is true.
Cfg_ShedOnFail
BOOL
1 = Go to Off state and alarm on Fail to reach position,
0 = Alarm only on Fail.
Important
: If a condition is configured to shed the device to the Off state on a fault, a reset is required to clear the shed fault to command the device to a state other than Off.
Default is true.
Cfg_HasPermObj
BOOL
1 = Tells HMI a permissive object (for example, P_Perm) is used for Inp_PermOK and navigation to the permissive object’s faceplate is enabled.
Important
: The name of the Permissive object in the controller must be this instruction’s name with the suffix _Perm. For example, if the PDO instruction has the name PDOut123, then its Permissive object must be named PDOut123_Perm.
Default is false.
Cfg_HasIntlkObj
BOOL
1 = Tells HMI an interlock object (for example, P_Intlk) is used for Inp_IntlkOK and navigation to the interlock object’s faceplate is enabled.
Important
: The name of the interlock object in the controller must be this PDO object’s name with the suffix _Intlk. For example, if the PDO instruction has the name PDOut123, then its interlock object must be named PDOut123_Intlk.
Default is false.
Cfg_HasMoreObj
BOOL
1 = Tells HMI an object with more info is available.
Default is false.
Cfg_HasOper
BOOL
1 = Operator (unlocked) exists, can be selected.
Default is true.
Cfg_HasOperLocked
BOOL
1 = Operator Locked exists, can be selected.
Default is true.
Cfg_HasProg
BOOL
1 = Program (unlocked) exists, can be selected.
Default is true.
Cfg_HasProgLocked
BOOL
1 = Program Locked exists, can be selected.
Default is true.
Cfg_HasExt
BOOL
1 = External exists, can be selected.
Default is false.
Cfg_HasMaint
BOOL
1 = Maintenance exists, can be selected.
Default is true.
Cfg_HasMaintOoS
BOOL
1 = Maintenance Out of Service exists, can be selected.
Default is true.
Cfg_OvrdOverLock
BOOL
1 = Override supersedes Program/Operator Lock,
0 = Do not override Lock.
Default is true.
Cfg_ExtOverLock
BOOL
1 = External supersedes Program/Operator Lock,
0 = Do not override Lock.
Default is false.
Cfg_ProgPwrUp
BOOL
1 = Power Up to Program, 0 = Power Up to Operator.
Default is false.
Cfg_ProgNormal
BOOL
Normal Source: 1= Program if no requests; 0 = Operator if no requests.
Default is false.
Cfg_PCmdPriority
BOOL
Command priority.
1 = Program commands win,
0 = Operator commands win.
Default is false.
Cfg_PCmdProgAsLevel
BOOL
1 = PCmd_Prog used as a Level.
Default is false.
Cfg_PCmdLockAsLevel
BOOL
1 = PCmd_Lock used as a Level (1 = Lock, 0 = Unlock).
Default is false.
Cfg_ExtAcqAsLevel
BOOL
1 = XCmd_Acq used as Level (1 = Acquire, 0 = Release).
Default is false.
Cfg_OvrdPermIntlk
BOOL
1 = Override ignores bypassable permissives/interlocks,
0 = Always use permissives/interlocks.
Default is false.
Cfg_OnDly
REAL
Delay before initially turning output On (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.
Cfg_OffDly
REAL
Delay before initially turning output Off (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.0.
Cfg_OnPulseTime
REAL
Output On time for pulse On or pulse continuous (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.5.
Cfg_OffPulseTime
REAL
Output Off time for pulse Off or pulse continuous (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 0.5.
Cfg_OnFailTime
REAL
Time after output On to get On feedback before fault (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 10.0.
Cfg_OffFailTime
REAL
Time after output Off to get Off feedback before fault (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 10.0
Cfg_StartHornTime
REAL
Time in seconds to sound audible on commanded energize. Valid = 0.0 to 1000.0 seconds, 0.0 = disabled.
Default is 0.0.
Cfg_VirtualFdbkTime
REAL
Delay to echo back of On/Off status when the device is treated as virtual (seconds).
Valid = 0.0 to 2147483.0 seconds.
Default is 2.0.
Cfg_CnfrmReqd
SINT
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_Owner
DINT
Program owner request ID (non-zero) or release (zero).
Default is 0.
PCmd_Virtual
BOOL
Program command to select Virtual (simulated) device operation. The instruction clears this operand automatically.
Default is false.
PCmd_Physical
BOOL
Program command to select Physical device operation (not simulated). The instruction clears this operand automatically.
Default is false.
PCmd_On
BOOL
Program command to turn device On. The instruction clears this operand automatically.
Default is false.
PCmd_Off
BOOL
Program command to turn device Off. The instruction clears this operand automatically.
Default is false.
PCmd_OnPulse
BOOL
Program command to pulse device (which is Off) On once. The instruction clears this operand automatically.
Default is false.
PCmd_OffPulse
BOOL
Program command to pulse device (which is On) Off once. The instruction clears this operand automatically.
Default is false.
PCmd_ContPulse
BOOL
Program command to pulse device continuously (blink). The instruction clears this operand automatically.
Default is false.
PCmd_Oper
BOOL
Program command to select Operator (Program to Operator). The instruction clears this operand automatically.
Default is false.
PCmd_Prog
BOOL
Program command to select Program (Operator to Program). The instruction clears this operand automatically.
Default is false.
PCmd_Lock
BOOL
Program command to lock Program (disallow Operator). The instruction clears this operand automatically if Cfg_PCmdLockAsLevel = 0.
Default is false.
PCmd_Unlock
BOOL
Program command to unlock Program (allow Operator to acquire). The instruction clears this operand automatically.
Default is false.
PCmd_Normal
BOOL
Program command to select Normal (Operator or Program). The instruction clears this operand automatically.
Default is false.
PCmd_Reset
BOOL
Program command to reset all alarms and latched shed conditions requiring reset. The instruction clears this operand automatically.
Default is false.
XCmd_Acq
BOOL
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
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_On
BOOL
External command to turn device On. The instruction clears this operand automatically.
XCmd_Off
BOOL
External command to turn device Off. The instruction clears this operand automatically.
Default is false.
XCmd_OnPulse
BOOL
External command to pulse device (which is Off) On once. The instruction clears this operand automatically.
Default is false.
XCmd_OffPulse
BOOL
External command to pulse device (which is On) Off once. The instruction clears this operand automatically.
Default is false.
XCmd_ContPulse
BOOL
External command to pulse device continuously (blink). The instruction clears this operand automatically.
Default is false.
XCmd_Reset
BOOL
External command to reset all alarms and latched shed conditions. The instruction clears this operand automatically.
Default is false.
XCmd_ResetAckAll
BOOL
External command to acknowledge and reset all alarms and latched shed conditions. The instruction clears this operand automatically.
Default is false.
Public Output Members
Data Type
Description
EnableOut
BOOL
Enable output. This output state always reflects EnableIn input state.
Out_CVData
BOOL
Primary output.
1 = On,
0 = Off.
Out_HornData
BOOL
1 = Sound audible prior to commanded state change.
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,
Out_OwnerSts.10 = Operator Lock,
Out_OwnerSts.11 = Operator Unlock,
Out_OwnerSts.12 = Program Lock,
Out_OwnerSts.13 = Program Unlock,
Out_OwnerSts.14 = Acquire Maintenance,
Out_OwnerSts.15 = Release Maintenance,
Out_OwnerSts.16 = Acquire External,
Out_OwnerSts.17 = Release External,
Out_OwnerSts.18 = Has Maintenance,
Out_OwnerSts.19 = External Override Lock,
Out_OwnerSts.20 = Has External.
Out_OwnerSts.21 = Has Operator
Out_OwnerSts.22 = Has Operator Locked
Out_OwnerSts.23 = Has Program
Out_OwnerSts.24 = Has Program Locked
Out_OwnerSts.29 = Echo
Out_OwnerSts.30 = Not Ready.
Sts_Initialized
BOOL
1 = Instruction is initialized. Use Inp_InitializeReq to reinitialize.
Sts_Out
BOOL
1 = Output is On (energized),
0 = Output is Off (de-energized).
Sts_Pulsing
BOOL
1 = Output is in a pulsing sequence.
Sts_FdbkOff
BOOL
1 = Device feedback shows device in Off state.
Sts_FdbkOn
BOOL
1 = Device feedback shows device in On state.
Sts_FdbkFail
BOOL
1 = Feedbacks are in an Invalid state (not On, Off, or Transition).
Sts_Horn
BOOL
1 = Audible alert (horn) is active.
Sts_Virtual
BOOL
1 = The instruction treats the device as virtual. The instruction acts as normal but the output is kept de-energized (Out_CVData = 0).
0 = The instruction operates the device normally.
SrcQ_IO
SINT
Source and quality of primary input or output enumerated value:
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 value or status enumerated value:
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_eCmd
SINT
Device command:
0 = None,
1 = Off,
2 = On,
3 = Pulse off,
4 = Pulse on,
5 = Pulse continuously.
Sts_eFdbk
SINT
Device feedback:
0 = Transition,
1 = Off,
2 = On,
3 = Invalid.
Sts_eSts
SINT
Device status:
0 = Off,
1= On,
2 = Pulse off,
3 = Pulse on,
4 = Pulse continuously,
5 = Turning off,
6 = Turning on,
7 = Horn
8 = Out of Service.
Sts_eFault
SINT
Device fault status:
0 = None,
1 = Feedback fault,
2 = IO fault,
3 = Configuration error.
Sts_eState
SINT
Internal Logic State (for animating STD on faceplate).
Sts_eNotify
SINT
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
All alarm status enumerated values including related objects:
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_eNotifyIOFault
SINT
IOFault 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_eNotifyOnFail
SINT
OnFail 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_eNotifyOffFail
SINT
OffFail 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
IntlkTrip 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_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_Available
BOOL
1 = Discrete output available for control by automation (Program).
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 active (bypassed or maintenance).
Sts_MaintByp
BOOL
1 = Device has a maintenance bypass function active.
Sts_NotRdy
BOOL
1 = Device is not ready, for HMI use hidden detail bits (Sts_Nrdyxxx) for reason.
Sts_NrdyOoS
BOOL
1 = Device is not ready: Device disabled by Maintenance.
Sts_NrdyCfgErr
BOOL
1 = Device is not ready: Configuration error.
Sts_NrdyIntlk
BOOL
1 = Device is not ready: Interlock not OK.
Sts_NrdyPerm
BOOL
1 = Device is not ready: Permissive not OK.
Sts_NrdyPrioOff
BOOL
1 = Device is not ready: Operator or External priority Off command requires reset.
Sts_NrdyFail
BOOL
1 = Device is not ready: Device failure (Shed requires Reset).
Sts_NrdyIOFault
BOOL
1 = Device is not ready: IO Fault (Shed requires Reset).
Sts_Err
BOOL
1 = Error in configuration: See detail bits (Sts_Errxxx) for reason.
Sts_ErrOnDly
BOOL
1 = Error in configuration: Invalid OnDelay timer preset (use 0.0 to 2147483.0).
Sts_ErrOffDly
BOOL
1 = Error in configuration: Invalid OffDelay timer preset (use 0.0 to 2147483.0).
Sts_ErrOnPulseTime
BOOL
1 = Error in configuration: Invalid OnPulse timer preset (use 0.0 to 2147483.0).
Sts_ErrOffPulseTime
BOOL
1 = Error in configuration: Invalid OffPulse timer preset (use 0.0 to 2147483.0).
Sts_ErrOnFailTime
BOOL
1 = Error in configuration: Invalid OnFail timer preset (use 0.0 to 2147483.0).
Sts_ErrOffFailTime
BOOL
1 = Error in configuration: Invalid OffFail timer preset (use 0.0 to 2147483.0).
Sts_ErrStartHornTime
BOOL
1 = Error in configuration: Invalid start horn timer (use 0.0 to 1000.0).
Sts_ErrVirtualFdbkTime
BOOL
1 = Error in configuration: Invalid virtual feedback timer (use 0.0 to 2147483.0).
Sts_ErrAlm
BOOL
1 = Error in tag-based alarm settings.
Sts_Hand
BOOL
1 = Hand is selected (supersedes OoS, Maintenance, Override, External, Program, Operator).
Sts_OoS
BOOL
1 = Out of Service is selected (supersedes Maintenance, Override, External, Program, Operator).
Sts_Maint
BOOL
1 = Maintenance is selected (supersedes Override, External, Program, Operator).
Sts_Ovrd
BOOL
1 = Override is selected (supersedes External, Program, Operator).
Sts_Ext
BOOL
1 = External is selected (supersedes Program and Operator).
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 = Selection equals the Normal (Program or Operator).
Sts_ExtReqInh
BOOL
1 = External request inhibited, cannot get to External from current state.
Sts_ProgReqInh
BOOL
1 = Program request inhibited, cannot get to Program from current state.
Sts_MAcqRcvd
BOOL
1 = Maintenance Acquire command received this scan.
Sts_Alm
BOOL
1 = An alarm is active.
Sts_AlmInh
BOOL
1 = One or more alarms shelved, disabled or suppressed.
Sts_IOFault
BOOL
IO Fault status:
0 = OK,
1 = Bad.
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:
PDOTag.@Alarms.Alm_IOFault.AlarmElement
Sts_OnFail
BOOL
1 = Device failed to turn On.
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:
PDOTag.@Alarms.Alm_OnFail.AlarmElement
Sts_OffFail
BOOL
1 = Device failed to turn Off.
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:
PDOTag.@Alarms.Alm_OffFail.AlarmElement
Sts_IntlkTrip
BOOL
1 = Device turned Off by an interlock Not OK.
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:
PDOTag.@Alarms.Alm_IntlkTrip.AlarmElement
Sts_RdyAck
BOOL
1 = An alarm is ready to be acknowledged.
Sts_RdyReset
BOOL
1 = A latched alarm or shed condition is ready to be reset.
XRdy_Acq
BOOL
1 = Ready for XCmd_Acq, enable HMI button.
XRdy_Rel
BOOL
1 = Ready for XCmd_Rel, enable HMI button.
XRdy_On
BOOL
1 = Ready for XCmd_On, enable HMI button.
XRdy_Off
BOOL
1 = Ready for XCmd_Off, enable HMI button.
XRdy_OnPulse
BOOL
1 = Ready for XCmd_OnPulse, enable HMI button.
XRdy_OffPulse
BOOL
1 = Ready for XCmd_OffPulse, enable HMI button.
XRdy_ContPulse
BOOL
1 = Ready for XCmd_ContPulse, 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 Members
Data Type
Description
CmdSrc
P_COMMAND_SOURCE
Control / Command Source Selection.
MCmd_Bypass
BOOL
Maintenance command to bypass all bypassable interlocks and permissives. The instruction clears this operand automatically.
Default is false.
MCmd_Check
BOOL
Maintenance command to check (not bypass) all interlocks. The instruction clears this operand automatically.
Default is false.
MCmd_OoS
BOOL
Maintenance command to select Out of Service. The instruction clears this operand automatically.
Default is false.
MCmd_IS
BOOL
Maintenance command to select In Service. The instruction clears this operand automatically.
Default is false.
MCmd_Acq
BOOL
Maintenance command to acquire ownership (Operator/Program/Override to Maintenance). The instruction clears this operand automatically.
Default is false.
MCmd_Rel
BOOL
Maintenance command to release ownership (Maintenance to Operator/Program/External/Override). The instruction clears this operand automatically.
Default is false.
MCmd_Physical
BOOL
Maintenance command to select Physical device operation (not simulated). The instruction clears this operand automatically.
Default is false.
MCmd_Virtual
BOOL
Maintenance command to select Virtual (simulated) device operation. The instruction clears this operand automatically.
Default is false.
OCmd_On
BOOL
Operator command to turn device On. The instruction clears this operand automatically.
Default is false.
OCmd_Off
BOOL
Operator Command to turn device Off. The instruction clears this operand automatically.
Default is false.
OCmd_OnPulse
BOOL
Operator command to pulse device that is Off, On once. The instruction clears this operand automatically.
Default is false.
OCmd_OffPulse
BOOL
Operator command to pulse device that is On, Off once. The instruction clears this operand automatically.
Default is false.
OCmd_ContPulse
BOOL
Operator command to pulse device continuously (blink). The instruction clears this operand automatically.
Default is false.
OCmd_Oper
BOOL
Operator command to select Operator (Program to Operator). The instruction clears this operand automatically.
Default is false.
OCmd_Prog
BOOL
Operator command to select Program (Operator to Program). The instruction clears this operand automatically.
Default is false.
OCmd_Lock
BOOL
Operator command to lock Operator (disallow Program). The instruction clears this operand automatically.
Default is false.
OCmd_Unlock
BOOL
Operator command to unlock / release (allow Program to acquire) ownership. The instruction clears this operand automatically.
Default is false.
OCmd_Normal
BOOL
Operator command to select Normal (Operator or Program). The instruction clears this operand automatically.
Default is false.
OCmd_Reset
BOOL
Operator command to reset all alarms requiring reset. The instruction clears this operand automatically.
Default is false.
OCmd_ResetAckAll
BOOL
Operator command to reset all alarms and latched shed conditions. The use of OCmd_ResetAckAll is restricted to HMI. The instruction clears this operand automatically.
Default is false.
Private Output Members
Data Type
Description
HMI_BusObjIndex
DINT
This object's index in the bus array, for use by HMI display.
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.
MRdy_Physical
BOOL
1 = Ready for MCmd_Physical, enable HMI button.
MRdy_Virtual
BOOL
1 = Ready for MCmd_Virtual, 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_On
BOOL
1 = Ready for OCmd_On, enable HMI button.
ORdy_Off
BOOL
1 = Ready for OCmd_Off, enable HMI button.
ORdy_OnPulse
BOOL
1 = Ready for OCmd_OnPulse, enable HMI button.
ORdy_OffPulse
BOOL
1 = Ready for OCmd_OffPulse, enable HMI button.
ORdy_ContPulse
BOOL
1 = Ready for OCmd_ContPulse, enable HMI button.
ORdy_Reset
BOOL
1 = A latched alarm or shed condition is ready to be reset.
ORdy_ResetAckAll
BOOL
1 = A latched alarm or shed condition is ready to be reset or acknowledged.
Public InOut Members
Data Type
Description
BusObj
BUS_OBJ
Bus component
BUS_OBJ Structure
The BUS_OBJ structure links the discrete output instruction to other devices and 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 devices. 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_IOFault
Alm_IOFault
IO Failure.
Raised when the Inp_IOFault input is true. Use this input to indicate to the instruction that a connection with the module is in fault. This input also indicates if a module reports field power loss/no load/short circuit is occurring for its I/O. If the I/O Fault is configured as a shed fault, the device is commanded Off and cannot be commanded to another state until reset.
Sts_OnFail
Alm_OnFail
Device failed to turn on (On Feedback not confirmed within configured period of time).
Raised when the device is commanded On, but the device feedback does not confirm that the device is actually On within the configured failure time (Cfg_OnFailTime). If the Failure is configured as a shed fault, the device is commanded Off and cannot be commanded On until reset.
Sts_OffFail
Alm_OffFail
Device failed to turn off (Off Feedback not confirmed within configured period of time).
Raised when the device is commanded Off, but the device feedback does not confirm that the device is actually Off within the configured failure time (Cfg_OffFailTime).
Sts_IntlkTrip
Alm_IntlkTrip
Interlock Trip alarm.
Raised when an interlock not-OK condition causes the device to transition from the On state or a pulsing state to the Off state.
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.
Mark the alarm as used or unused and set standard configuration members of the discrete tag-based alarm. Access alarm elements using this format:
PDOTag.@Alarms.AlarmName.AlarmElement
The PDO instruction handles alarm conditions described by these four use cases and conditions:
  • I/O Fault Status - raised when the I/O Fault input is true. This input usually indicates to the instruction that I/O data is inaccurate and cannot be trusted for use in the application. If the I/O Fault is configured as a shed fault, the device is commanded Off and cannot be commanded to another state until reset.
  • Interlock Trip Status - 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.
  • Off Feedback Fail Status - raised when the device is commanded Off, but the device feedback does not confirm that the device is actually Off within the configured failure time.
  • On Feedback Fail Status - raised when the device is commanded On, but the device feedback does not confirm that the device is actually On within the configured failure time. If the Failure is configured as a shed fault, the device is commanded Off and cannot be commanded On until reset.
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 the commands interact with the PDO instruction.
PDO_alarmoperation
Operation
The following diagram illustrates functionality of the PDO instruction:
PDO_Operation1_v34
PDO_Interlocks_v34
PDO_operationfaultlogic
Operator command request confirmation
The PDO instruction enables operator command requests OCmd_Off, OCmd_On, OCmd_OffPulse, OCmd_OnPulse and OCmd_ContPulse. Enforced security might require the request to be confirmed or canceled before the selected command executes. The instruction checks the security rules inspecting Cfg_CnfrmReqd. If Cfg_CnfrmReqd=0 no confirmation is required and the request executes immediately. If Cfg_CnfrmReqd=1 the instruction waits for confirmation before executing. For Cfg_CnfrmReqd=2 or 3 eSignature is needed before the confirmation and cancellation is enabled.
Virtualization
Use virtualization for instruction testing and operator training. Set the Inp_Virtual operand to 1 to enable virtualization. After finishing virtualization, set the Inp_Virtual operand to 0 to return to normal operation.
When Virtualization is active, the output of the discrete output holds at 0, virtual feedback of a device is provided and I/O faults are ignored. Setting of Cfg_VirtualFdbkTime operand delays the echo of the On/Off status of the device. Manipulate the instruction to operate as if a working discrete output is present.
Initialization
The instruction is normally initialized in the instruction first run. Request re-initialization by setting Inp_InitializeReq = 1. For proper initialization, when adding the instruction while performing an online edit of the code, make sure that Inp_InitializeReq = 1, the default value.
Configuration of Strings for HMI
Configure strings for HMI faceplates, as seen in
FactoryTalk View
, and for the configuration dialog box. The strings are set to extended properties of tag items. Configure the 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
  • Target state 0
  • Target state 1
  • Transition state 0
  • Transition state 1
  • Command button off
  • Command button on
  • Command button pulse off
  • Command button pulse on
  • Command button pulse continuously
  • IOFault alarm name
  • IntlkTrip alarm name
  • On Fail alarm name
  • Off Fail alarm name
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 controls the device. The instruction tracks the state of the device for bumpless transfer back to one of the other command sources.
(Highest priority command source)
Out-of-Service
The instruction is disabled and has no owner.
Maintenance
Maintenance controls the device and supersedes Operator, Program, External and Override control. Operator commands and settings from the HMI are accepted.
Override
Priority logic controls the device and supersedes Operator, Program and External control. Override Input (Inp_Ovrd) is accepted.
External
External logic (e.g. field pilot control or upstream SCADA) controls the device. External commands (XCmd_) are accepted.
Program locked
Program logic controls the device. Program commands (PCmd_) are accepted. Operator cannot take control from the Program. Override cannot take control from theProgram unless Cfg_OvrdOverLock = 1.
Program
Program logic controls the device. Program commands (PCmd_) are accepted.
Operator locked
The Operator controls the device. Operator commands (OCmd_) from the HMI are accepted. Program cannot take control from Operator. Override cannot take control from Operator unless Cfg_OvrdOverLock = 1.
Operator
The Operator controls 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)
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 control 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 as 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.
Prog Power Up
Configuration allows the user to specify whether Operator or Program will be the power-up default.
Prog Priority
Configuration allows the user to specify whether Operator or Program commands take priority 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. 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
  • Hand
Monitor the PDO Instruction
Use the operator faceplate from the PlantPAx library of Process objects for monitoring.
Affects Math Status Flags
No.
Major/Minor Faults
None specific to this instruction. See Index Through Arrays for array-indexing faults.
Execution
Ladder Diagram
Condition/State
Action Taken
Prescan
Rung-condition-out is cleared to false.
Sts_eSrc is set to 0. Sts_bSrc is set to 0.
Instruction first run
All commands that are automatically cleared on each execution are cleared and ignored.
Inp_OvrdCmd is set to 0 (no command).
The Program/Operator selection is set based on the configuration (Cfg_ProgPwrUp).
The Program or Operator lock selection is set to unlocked.
The Maintenance acquired/released state is not modified and persists through a controller powerup or PROG-to-RUN transition.
PSet_Owner and Val_Owner are set to 0.
If feedback is provided, Out_CVData and Sts_Out are set accordingly or cleared otherwise.
Rung-condition-in is false
Rung-condition-out is cleared to false.
The instruction is put Out of Service if Inp_Hand=0. The output is de-energized and all alarm conditions are cleared.
Latched alarms are reset.
Command source selection processing proceeds except that Program and Operators commands are ignored and cleared and 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 Program/Operator selection is set based on the configuration (Cfg_ProgPwrUp).
Rung-condition-in is true
Set rung-condition-out to rung-condition-in.
The instruction executes.
Postscan
Rung-condition-out is cleared to false.
Function Block Diagram
Condition/State
Action Taken
Prescan
EnableOut is cleared to false.
Sts_eSrc is set to 0. Sts_bSrc is set to 0.
Instruction first run
All commands that are automatically cleared on each execution are cleared and ignored.
Inp_OvrdCmd is set to 0 (no command).
The Program/Operator selection is set based on the configuration (Cfg_ProgPwrUp).
The Program or Operator lock selection is set to unlocked.
The Maintenance acquired/released state is not modified and persists through a controller powerup or PROG-to-RUN transition.
PSet_Owner and Val_Owner are set to 0.
If feedback is provided, Out_CVData and Sts_Out are set accordingly or cleared otherwise.
Instruction first scan
See Instruction first run in the Function Block Diagram table.
EnableIn is false
EnableOut is cleared to false.
The instruction is put Out of Service if Inp_Hand=0. The output is de-energized and all alarm conditions are cleared.
Latched alarms are reset.
Command source selection processing proceeds except that Program and Operators commands are ignored and cleared and 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 Program/Operator selection is set based on the configuration (Cfg_ProgPwrUp).
EnableIn is true
EnableOut is set to true.
The instruction executes.
Postscan
EnableIn and EnableOut bits are cleared to false.
Structured Text
In Structured Text, EnableIn is always true during normal scan. The instruction executes when it is in the control path activated by the logic.
Condition/State
Action Taken
Prescan
See Prescan in the Ladder Diagram table.
Instruction first run
See Instruction first run in the Ladder Diagram table.
EnableIn is true
See EnableIn is true in the Function Block Diagram table.
Postscan
See Postscan in the Function Block Diagram table.
Example
Use the PDO instruction to control a heating jacket on a vent filter. The heating jacket is being used in this case to keep the vent filter dry when there is potential for condensate buildup. The vent filter heater jacket does not provide the feedback on its status. In normal operating conditions, the vent filter heater jacket is being commanded on or off by the control sequence configured in the controller. Always command the vent filter off on interlock associated with the status of the controlling sequence of the heating jacket.
The controlling sequence issues a single bit for the desired state of the vent filter heater. The operand PCmd_On is connected to this bit to command the vent filter heater on and off. The operand Cfg_PCmdOnAsLevel is set to 1, indicating that the instruction acts upon PCmd_On based on value (level) instead of acting only on transition to true (edge) so that PCmd_On can be used to command both the On and Off states. The controlling sequence could be written to set the command bits PCmd_On and PCmd_Off directly (for example, by using structured text within an SFC), in which case Cfg_PCmdOnAsLevel could be left at its default of 0 to cause the instruction to clear the commands once they have been acted upon. The operand Cfg_ProgNormal is set to 1 to indicate that the normal operating state of the controller is Program, meaning it is normally commanded by the control sequence. The status of the sequence is connected to the Inp_IntlkOK operand so that the output to the vent filter heater jacket is always off when the skid is not operating properly, even if the instruction is not in Program mode. The operands Cfg_HasOnFdbk and Cfg_HasOffFdbk are both set to 0 to indicate that the vent filter heater jacket does not provide feedback on its status.
The example is shown in all three languages.
Ladder Diagram
PDO ladder example
Function Block Diagram
Structured Text
JV9010.Inp_IntlkOK := Status_OK;
JV9010.PCmd_On := YV9010;
PDO(JV9010, 0);
O_JV9010 := JV9010.Out_CVData;
Provide Feedback
Have questions or feedback about this documentation? Please submit your feedback here.