XIC and XIO Instructions in PLC Ladder Logic

XIC (Examine If Closed) is true when the bit it reads is 1. XIO (Examine If Open) is true when the bit it reads is 0. That one rule decides every rung you will ever trace in Allen-Bradley ladder logic. The trap that costs the most time on a panel is treating XIC as “the start button” and XIO as “the stop button”, because the PLC never reads a button, it reads a bit value. XIC and XIO Instructions in plc are very easy to understand.

XIC vs XIO symbols in Allen-Bradley ladder logic
XIC (Examine If Closed) and XIO (Examine If Open) contact symbols

What Are XIC and XIO Instructions in a PLC?

XIC and XIO are bit-test instructions. Each one looks at a single Boolean (BOOL) tag, decides true or false, and passes that result along the rung as the rung condition out. Neither writes anything back. To change a bit you need an output instruction like OTE, OTL, or OTU.

XIC is drawn like a normally open contact, –| |–.

XIO is drawn like a normally closed contact, –|/|–.

How XIC and XIO work in ladder logic in Allen Bradley PLC
XIC and XIO work in ladder logic in Allen Bradley PLC

The drawing is a habit carried over from relay prints. The bit address under the symbol is what matters.

Both read far more than field pushbuttons. Internal Boolean tags, output status bits, timer and counter status bits, alarm flags, HMI command bits, interlocks and permissives all behave the same way. A rung with –| |– Timer_1.DN is an ordinary XIC, it just reads a timer’s Done bit instead of a wired input.

Rockwell says the same thing in the Logix 5000 Controllers General Instructions Reference Manual, publication 1756-RM003, available in the Rockwell Automation literature library. Both are listed as input instructions that look at a bit state and never change the tag, so the behavior stays the same across every training course, forum answer, and legacy print you will meet.

How XIC and XIO Evaluate a PLC Bit

Addressed bitXIC resultXIO result
0 (OFF)FALSETRUE
1 (ON)TRUEFALSE

PLC counter instruction

XIC asks “is this bit 1?” XIO asks “is this bit 0?” Nothing else.

Take –| |– Start_PB —( Motor ). With Start_PB = 1 the XIC is true and the rung has continuity. Drop Start_PB to 0 and continuity stops right at that contact, no matter what follows it.

On a series rung like –| |– A –| |– B —( OTE ), both A and B must read 1. If A = 1 and B = 0, the rung is false at B and the OTE goes off. Read a rung left to right when you are online. The first false contact is the fault. Engineers waste hours checking the last contact in a string that already died three instructions earlier.

XIC in series with Output
XIC in series with Output
XIO in series with output
XIO in series with Output

One timing point most beginner material skips. The controller copies physical inputs into the input image table before the ladder runs, then solves rungs top to bottom, then writes outputs at the end of the PLC scan cycle. So an XIC reads a snapshot of the input, not the live terminal. A bit that flickers on for less than one scan may never be caught at all. That is a job for a high-speed input, an event task, or a latch, not a plain contact.

XIO is not a special “negative input” instruction. It is a straight Boolean flip of the same bit. With Ready = 1, XIC Ready is true and XIO Ready is false. Flip Ready to 0 and both flip with it.

XIC vs XIO: Truth Table, Symbols, and Key Differences

Electrical drawings and ladder symbols

FeatureXICXIO
Full nameExamine If ClosedExamine If Open
Symbol—| |——| / |—
ReadsAny BOOL tag or bit-level addressAny BOOL tag or bit-level address
Write the bit?NoNo
Common tag namingStart, Ready, OK, Present, Running, .DNFault, Alarm, Missing, Not_Ready, Jam

Is XIC normally open or normally closed? The symbol copies a normally open contact, but the field device behind the tag can be either. A physically NC guard switch can give you a healthy bit value of 1, and XIC reads that state correctly.

Is XIO normally open or normally closed? The symbol copies a normally closed contact and it is true when the bit is 0. Same warning. Field wiring sets the value, the instruction only reads it.

the PLC instruction depends on what the tag tells you, not on the sensor itself.

  • If Part_Present is 1 when a part is there, use a NO contact --| |-- Part_Present.
  • If Part_Missing is 1 when the part is not there, use an NC contact --|/|-- Part_Missing.
  • Both can describe the same real situation. The difference is how the PLC tag is named and when its bit becomes 1.

A simple way to think about it is:

Ask: “When does this tag become 1?”
Then choose the ladder instruction that matches what you want the rung to do.

That is the whole “stop button” trap. Training examples show Start on an XIC and Stop on an XIO, and it hardens into a rule that was never a rule. On a real panel where the stop circuit gives Stop_OK = 1 for a healthy loop, the program uses –| |– Stop_OK, an XIC, because the rung must hold while that healthy state is true.

How XIC and XIO Work in Real Ladder Logic

Ladder logic programming basics

In real ladder logic, series XIC and XIO contacts act as AND, parallel branches act as OR, and XIO carries every inverted condition on the rung. You almost never see a lone contact.


Three-contact motor rung: two XIC permissives in series with one XIO fault interlock.

Permissive: –| |– Start_PB –| |– Machine_Ready —( Motor ). The motor runs only while both bits are 1. Machine_Ready drops to 0, the rung dies there.

XIC Start_PB and XIC Machine_Ready series rung controlling Motor OTE in Allen-Bradley PLC ladder logic
Ladder logic diagram showing two Examine If Closed (XIC) contacts in series , Start_PB and Machine_Ready, controlling a Motor output coil (OTE) in Allen-Bradley PLC programming.

Fault interlock: –| |– Start_PB –|/|– Motor_Fault —( Motor ). The XIO keeps the rung true while Motor_Fault = 0 and kills it the moment that bit sets. Most alarm and interlock logic in a plant is this pattern repeated.

XIC Start_PB XIC Machine_Ready and XIO Motor_Fault series rung controlling Motor in Allen-Bradley PLC ladder logicXIC Start_PB XIC Machine_Ready and XIO Motor_Fault series rung controlling Motor in Allen-Bradley PLC ladder logic
Ladder logic diagram showing two Examine If Closed (XIC) contacts (Start_PB and Machine_Ready) in series with one Examine If Open (XIO) contact (Motor_Fault) controlling a Motor output coil in Allen-Bradley PLC programming.

Seal-in: press Start, the Motor output bit goes to 1, and a second XIC reading that same Motor bit, drawn in a parallel branch around the start contact, holds the rung after you let go. The stop condition stays in series so it can break the seal. If the motor drops out the instant you release the button, the seal-in branch reads the wrong tag or was drawn around the wrong contact. The differences between this and latch logic are covered in the guide to seal-in circuits versus OTL and OTU.

Seal-in circuit using XIC Start pushbutton and parallel XIC Motor contact holding the Motor output in Allen-Bradley PLC ladder logic
Seal-in circuit: Press Start → Motor turns on → parallel XIC Motor contact holds the rung after Start is released.

Timer status: –| |– Start —[TON Timer_1]– then –| |– Timer_1.DN —( Fan ). That second XIC reads a status bit the timer wrote, and it behaves like any other bit test. How that DN bit sets and resets is explained in the TON and TOF timer guide.

XIC Start enabling TON Timer_1 and XIC Timer_1.DN controlling Fan output in Allen-Bradley PLC ladder logic
Ladder logic diagram showing an XIC Start contact enabling a TON timer (Timer_1)

When you are commissioning, say the logic out loud before you look at the screen. “The motor can run when Start is true, the guard is healthy, no fault is active, and the drive is ready.” Map each phrase to a tag, then choose the instruction that matches the value you expect. Chasing green highlights on the laptop without doing this is how people end up editing working rungs.

XIC and XIO vs Normally Open and Normally Closed Contacts

NO and NC describe what a physical contact is doing at rest. XIC and XIO instructions in PLC describe how the program reads a bit. They are connected, because wiring sets the bit, but they are not the same thing, and mixing them is where most confusion starts.

Keep three layers apart and the trouble mostly goes away:

Physical device → PLC input value → XIC or XIO instruction

LayerQuestionExample
Field deviceWhat is the contact doing?NC guard switch, closed
PLC inputWhat value reaches the controller?Guard_OK = 1
Ladder logicWhat state does the rung need?XIC Guard_OK

A physically NC guard switch that is closed and healthy gives an input value of 1, so the program uses –| |– Guard_OK. The rung is asking “is the guard healthy”, not “is the switch normally open”. Flip the naming and a tag called Not_Ready, which stays at 0 during normal running, fits –|/|– Not_Ready instead.

Stop circuits, guard switches, and E-stops are wired normally closed on purpose so a broken wire shows up as an unsafe state instead of hiding as “all good”. That is a wiring and safety design choice, not a ladder choice.

Worth knowing before you touch any of it. On a GuardLogix or other safety-rated controller, safety-related bit tests live in a separate safety task with dual-channel, self-checking instructions, sized to the functional safety level the machine was assessed for. A standard XIO reading a guard input can tell you the guard is open, but it is not rated to be the thing that stops the machine. If the rung feeds an E-stop, light curtain, or guard interlock, that is safety-task work and it follows your site lockout and functional safety procedure.

XIC and XIO Examples in Studio 5000 and RSLogix

In Studio 5000 and RSLogix, XIC and XIO work on BOOL tags, and the rule holds across ControlLogix, CompactLogix, GuardLogix, and the older SLC 500 and MicroLogix families.

–| |– Start_PB –| |– Machine_Ready –|/|– Motor_Fault —( Motor_Run )

XIC Start_PB XIC Machine_Ready and XIO Motor_Fault series rung controlling Motor in Allen-Bradley PLC ladder logicXIC Start_PB XIC Machine_Ready and XIO Motor_Fault series rung controlling Motor in Allen-Bradley PLC ladder logic
Ladder logic diagram showing two Examine If Closed (XIC) contacts (Start_PB and Machine_Ready) in series with one Examine If Open (XIO) contact (Motor_Fault) controlling a Motor output coil in Allen-Bradley PLC programming.

In plain words, Motor_Run = Start_PB AND Machine_Ready AND NOT Motor_Fault. The XIO is doing that NOT.

TagValueInstructionResult
Start_PB1XICTrue
Machine_Ready1XICTrue
Motor_Fault0XIOTrue
Motor_Run1OTEOn

If the table looks like this and the motor still does not turn, stop reading ladder and go look at the output card, the field wiring, or the drive. The logic already did its job.

One practical difference between the two packages. Studio 5000 shows the live tag value under each contact while online and lets you hover for the full tag description, so you can read a whole rung without opening a tag browser. XIC and XIO instructions in PLC software RSLogix 500 shows file based addresses such as I:0/0 or B3:0/0 with the value in the data table instead, so on those older programs you keep the data monitor open beside the ladder. Different addressing style, same Boolean rule.

Other platforms use other names for the same two tests. Siemens TIA Portal calls them normally open and normally closed contacts in the ladder editor, and CODESYS-based controllers use the IEC 61131-3 contact symbols. Translating a rung between an Allen-Bradley print and a Siemens or CODESYS one on a mixed line, the bit behavior carries over one to one, only the name and icon change. XIC and XIO instructions in PLC Ladder Logic commonly use in Allen Bradely PLC.

How to Troubleshoot XIC and XIO instructions in PLC

Start at the tag, never the symbol. Work this order:

  1. Read the live value of the bit the instruction addresses.
  2. Compare it against what the instruction needs, 1 for XIC, 0 for XIO.
  3. Read the tag name for its meaning. Fault = 1 meaning “active” calls for XIO, Fault_OK = 1 meaning “healthy” calls for XIC.
  4. Find what writes that bit. It might be a rung, a timer, an alarm routine, a latch, or the HMI, not a sensor.
  5. If it is a field input, follow the path backwards: device, wiring, terminal, input module, tag.
  6. Check for forces and for duplicate writers before you change anything.
SymptomCheck firstQuestion to ask
XIC stays falseThe addressed bitWhy is it 0?
XIO stays falseThe addressed bitWhy is it 1?
Input never changesField and module pathIs the signal reaching the controller?
Rung changes on its ownOther writersWho else writes this tag?
Logic looks impossibleForce tableIs anything forced?

Two more causes catch people in Logix programs. First, aliased tags. Machine Ready may be an alias for a module input like Local:1:I.Data.3, and if you monitor the alias while someone else writes the base tag, or the alias points at the wrong channel after a card swap, the value you see will not match the panel. Right-click the tag and check the base before you blame the instruction. Second, UDT and array members. An XIC on Conveyor[2].Ready reads a different element than Conveyor[3].Ready, and an index driven by a recipe or an HMI can move under you while you watch.

XIC and XIO instructions in PLC
XIC and XIO instructions in PLC to check one by one to find the root cause

Duplicate destructive writes are the ugliest of the lot. Two routines writing the same OTE means the last one solved in the scan wins, and the bit looks random from outside. Forces come second, since a forced input makes a rung behave against every value you can see.

A conveyor that “will not start” with Fault = 1 is not telling you to swap the XIO for an XIC. It is telling you an overload tripped. Changing the instruction hides the fault and the motor pays for it later.

Common XIC/XIO Mistakes, FAQs, and Quick Reference

The mistakes that repeat on every site: assuming XIC always means NO hardware, assuming XIO always means the stop button, reading the symbol instead of the tag value, forgetting XIC can read timers and internal bits, checking the last contact in a rung instead of the first false one, and using a level-based XIC where a one-shot (ONS) is needed for an action that should fire once per transition.

The memory hook for anyone new to XIC XIO PLC logic: XIC looks for 1. XIO looks for 0.

What does XIC mean in PLC?

Examine If Closed. It is true when the addressed bit is 1, and it never changes that bit.

What does XIO mean in PLC?

Examine If Open. It is true when the addressed bit is 0, and it never changes that bit either.

Is XIC normally open or normally closed?

Drawn like a normally open contact, but the device behind the tag can be either. Judge from the bit value, not the drawing.

Is XIO the same as NOT?

For the bit test itself, yes. It gives the opposite result on the same bit. As an instruction it still acts as a rung condition, not a standalone logic gate.

Can XIC read a timer or an output?

PLC timer instructions

Yes to both, as long as the tag is a BOOL. Timer status bits, counter bits, and output status bits are all fair game.

Next time a rung does not make sense, cover the symbol with your thumb, read the tag name and its live value, then ask what wrote that value. That order puts you back on the machine instead of guessing from a picture on a screen. XIC and XIO instructions in PLC are very importance to understand the concept

Ladder Logic Programming for BeginnersPLC Timer Instructions: TON, TOF, RTO With ExamplesPLC Counter Instruction: CTU, CTD, and CTUD with Real ExamplesAllen Bradley PLC Controller: Selection to CommissioningPLC Communication Errors: Causes, Fault Codes & FixesAI Integration in PLC Systems: Practical Guide Learn Ladder Logic – PLC Academy

Similar Posts

One Comment

Comments are closed.