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
Function Block Diagram
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.
Operation
The following diagram illustrates functionality of the PDO instruction:
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
Function Block Diagram
Structured Text
JV9010.Inp_IntlkOK := Status_OK;
JV9010.PCmd_On := YV9010;
PDO(JV9010, 0);
O_JV9010 := JV9010.Out_CVData;
Provide Feedback