Dual Channel Input Monitor (DCM)
This instruction applies to the Compact GuardLogix 5370, GuardLogix 5570, Compact
GuardLogix 5380, GuardLogix 5580, and ControlLogix 5590 controllers.
The Dual Channel Input Monitor instruction monitors dual-input safety devices and sets O1 (Output 1) based on the Input Type operand and the combined state of Channel A and Channel B.
Available Languages
Ladder Diagram

Function Block
This instruction is not available in function block.
Structured Text
This instruction is not available in structured text.
Operands
IMPORTANT:
Unexpected operation, including controller assert or a
Major Non-Recoverable Fault, can occur if:
- Backing tag members are written to.
- Backing tags are shared by multiple instruction invocations.
- Backing tag members are passed as parameters to an instruction controlled by the same backing tag.
- The backing tag.EnableInmember is referenced anywhere in the program..EnableInis a parameter that represents rung state into an instruction and is only intended for internal use.For examples of these incorrect backing tag usages, seeBacking tag usages that can cause unexpected operation.
IMPORTANT:
Make sure safety input points are configured as single, not Equivalent
or Complementary. These instructions provide all dual channel functionality necessary for
PLd (Cat. 3) or Ple (Cat. 4) safety functions.
WARNING:
ATTENTION:
If changing instruction operands while in Run mode,
accept the pending edits and cycle the controller mode from Program to Run for the changes
to take effect. The following table provides the operands that are used to configure the instruction. These operands cannot be changed at runtime.
Operand | Data Type | Format | Description |
---|---|---|---|
DCM | DCI_MONITOR | tag | DCM structure |
Safety Function | DINT | list item | This operand provides a text name for how this instruction is being used. Choices include cam switch (40), position limit switch (41), and user-defined (100). This operand does not affect instruction behavior. It is for information/documentation purposes only. |
Input Type | DINT | list item | This operand selects input channel behavior. Equivalent - Active High (0) : Inputs are in the active state when Channel A and Channel B inputs are 1.Equivalent - Active Low (1) : Inputs are in the active state when Channel A and Channel B inputs are 0.Complementary (2) : Inputs are in the active state when Channel A is 1 and Channel B is 0. |
Discrepancy Time (ms) | DINT | immediate | The amount of time that the inputs can be in an inconsistent state before an instruction fault is generated. The inconsistent state depends on the Input Type. Equivalent: Inconsistent state is when either is true: Channel A = 0 and Channel B =1 Channel A =1 and Channel B =0 Complementary: Inconsistent state is when either is true: Channel A = 0 and Channel B =0 Channel A =1 and Channel B =1 If this operand is 0, the Discrepancy Time checking is disabled (0 = infinite). The allowable range is 0...3000 ms. |
The following table explains instruction inputs. The inputs may be field device signals from input devices or derived from user logic.
Operand | Data Type | Format | Description |
---|---|---|---|
Channel A 1 | BOOL | tag | This input is one of the two inputs being monitored. When either input is in the safe state, Output 1 is de-energized. |
Channel B 1 | BOOL | tag | This input is one of the two inputs being monitored. When either input is in the safe state, Output 1 is de-energized. |
Input Status | BOOL | immediate tag | If instruction inputs are from a safety I/O module, this is the status from the I/O module (Connection Status or Combined Status). If instruction inputs are derived from internal logic, it is the application programmer’s responsibility to determine the conditions. ON (1): The inputs to this instruction are valid.
OFF (0): The inputs to this instruction are invalid. |
Reset 2 | BOOL | tag | This input clears the instruction faults provided the fault condition is not present. OFF (0) -> ON (1): The Fault Present and Fault Code outputs are reset. |
1
If the input is from a Guard I/O
input module, make sure that the input is configured as
single, not Equivalent or Complementary. 2
Some safety standards require monitoring the transition of the reset
input. When the reset is used to reset a safety function, additional logic may be
required to verify a transition of the reset input from High-to-Low or
Low-to-High.The following table explains instruction outputs. The outputs may be external tags (safety output modules) or internal tags for use in other logic routines.
Operand | Data Type | Description |
---|---|---|
Output 1 (O1) | BOOL | This output is energized (1) when the input conditions are satisfied. The output becomes de-energized (0) when:
|
Instruction Status (IS) | BOOL | This output is ON (1) when Output 1 of this instruction is valid (no faults or diagnostics are present). |
Fault Present (FP) | BOOL | ON (1): A fault is present in the instruction.
OFF (0): This instruction is operating normally. |
Fault Code | DINT | This output indicates the type of fault that occurred. See the Fault Codes section below for a list of fault codes. This operand is not safety-related. |
Diagnostic Code | DINT | This output indicates the diagnostic status of the instruction. See the Diagnostic Codes for a list of diagnostic codes. This operand is not safety-related. |
IMPORTANT:
Do not write to any instruction output tag under any
circumstances.
Affects Math Status Flags
No
Major/Minor Faults
None specific to this instruction. See Index Through Arrays for array-indexing faults.
Execution
Condition/State | Action Taken |
---|---|
Prescan | Same as Rung-condition-in is false. |
Rung-condition-in is false | The .O1, .IS, and .FP are cleared to false. |
Rung-condition-in is true | The instruction executes as described in the operation section. |
Postscan | Same as Rung-condition-in is false. |
Operation
Normal Operation
The timing diagram illustrates the normal monitoring of a dual-channel input with the Input Type configured as Equivalent - Active High. Output 1 is ON (1) initially because the safety inputs are in the active state. At (A), Channel A transitions to the safe state, which causes Output 1 to go to the safe state. At (B), both of the safety inputs have transitioned to the active state, which energizes Output 1. At (C), Output 1 is de-energized and energized again at (D).
The Instruction Status is ON (1) the entire time because no faults or diagnostics occur.

Input Status Fault Operation
The timing diagram illustrates instruction behavior with fault conditions. At (A), Output 1 turns ON (1) when the Input Status becomes valid. This also energizes Output 1 because the safety inputs are in the active state. At (B), a fault is generated when the Input status becomes invalid. This also turns OFF (0) the Instruction Status output. At (C), the fault cannot be reset because the Input Status is still invalid. At (D), the fault is cleared when a reset is triggered with the Input Status being valid. This also turns the Instruction Status output ON (1).

Discrepancy Fault Operation
The timing diagram illustrates a discrepancy fault occurring when Channel A and Channel B are in an inconsistent state for longer than the Discrepancy Time. At (A), a fault is generated when the safety inputs are in an inconsistent state for longer than the Discrepancy Time. This also turns Output 1 OFF (0). At (B), the fault is cleared because a Reset is triggered when the safety inputs are no longer in an inconsistent state. At (C), the fault is generated when the safety inputs are again in an inconsistent state for longer than the Discrepancy Time. At (D), the fault is reset.

False Rung State Behavior
When the instruction is executed on a false rung, all instruction outputs are de-energized.
Fault Codes and Corrective Actions
The fault codes are listed in hexadecimal format followed by decimal format.
Fault Code | Description | Corrective Action |
0 | No fault. | None. |
16#20 32 | The Input Status input transitioned from ON (1) to OFF (0) while the instruction was executing. |
|
16#4000 16384 | Channel A and Channel B were in an inconsistent state for longer than the Discrepancy Time. At the time of the fault, Channel A was in the active state. Channel B was in the safe state. |
|
16#4001 16385 | Channel A and Channel B were in an inconsistent state for longer than the Discrepancy Time. At the time of the fault, Channel A was in the safe state. Channel B was in the active state. | |
16#4002 16386 | Channel A went to the safe state and back to the active state while Channel B remained active. | |
16#4003 16387 | Channel B went to the safe state and back to the active state while Channel A remained active. |
Diagnostic Codes and Corrective Actions
The diagnostic codes are listed in hexadecimal format followed by decimal format.
Diagnostic Code | Description | Corrective Action |
0 | No fault. | None. |
16#20 32 | The Input Status was OFF(0) when the instruction started. | Check the I/O module connection or the internal logic used to source input status. |
Provide Feedback