Problem Overview: ORG(889) Executes But Produces No Motion
Engineers commissioning an Omron CP1L-M30 with pulse-output positioning frequently encounter a 'dead' origin search. The pushbutton is pressed, the ORG(889) instruction is energized, the Busy flag transitions, but the axis does not move and no LEDs change state on outputs 100.00–100.04. PLS2 works correctly with the same SmartStep A drive, confirming that the CW/CCW pulse wiring, the deviation counter reset, the RUN signal, and the alarm reset are all healthy. The defect therefore lives in the origin-search configuration, not in the pulse-train path.
CP1L Origin Search Architecture
The CP1L-M30 supports a 100 kHz high-speed counter (counter 0) and two built-in pulse outputs (pulse 0 and pulse 1) routed to outputs 100.00 (CW/PLS) and 100.01 (CCW/DIR). Origin search is implemented as a single box instruction, ORG(889), that drives pulse output 0 through a configurable search profile and latches the mechanical origin against either an Origin Proximity Input, an Origin Input (Z phase), or both. The instruction consumes one execution and produces a multi-step motion: approach, decelerate, latch, and (optionally) return to origin.
Two Omron manuals are required references for this routine:
- W462 – CP Series CP1L CPU Unit Operation Manual: full ORG(889) specification, control-word parameter map, and origin-search mode descriptions.
- W461 – CP1L/CP1E CPU Unit Introduction Manual: architecture-level explanation of origin search, I/O allocation, Z-phase behavior, and the role of the high-speed counter.
CX-Programmer version 7.1 or higher is required to confirm the unit version of a CP1L CPU with 14, 20, 30, 40, or 60 I/O points. Older versions silently mis-map the control word.
Required I/O Allocation
Origin search on the CP1L uses fixed input allocations. Every signal must be wired to the documented address or the routine faults out on the first scan. The table below shows the I/O set used in a typical CP1L-M30 + SmartStep A homing application.
| CP1L Input | Signal | Sensor Type | Source |
|---|---|---|---|
| 0.00 | E-stop auxiliary | N/O contact | Safety relay / e-stop pushbutton |
| 0.01 | Origin-search start | N/O pushbutton | Operator panel |
| 0.02 | Fixed-distance move start | N/O pushbutton | Operator panel |
| 0.06 | Origin Input (Z phase) | 500 ns min pulse | SmartStep A open-collector Z output |
| 0.10 | Origin Proximity Input | N/O sensor (or N/C if configured) | Home-proximity switch on the axis |
Output allocation for the SmartStep A drive interface is fixed by the pulse-output function:
| CP1L Output | Function | SmartStep A Terminal |
|---|---|---|
| 100.00 | CW pulse (pulse + direction mode) | Pulse input (CW+ / PULS+) |
| 100.01 | CCW pulse / direction | Pulse input (CCW+ / SIGN+) |
| 100.02 | RUN enable to drive | Run/SON input |
| 100.03 | Alarm reset to drive | Alarm reset (RES) input |
| 100.04 | Deviation counter reset | CLR / deviation counter clear input |
ORG(889) Instruction Reference
ORG(889) is a 7-word block that drives a single pulse output through a configurable search profile. The control word C occupies words C through C+6 and must reside in a retentive area (HR or DM) so the operating mode survives a power cycle. The exact layout of the seven words is documented in W462 Section 7.
| Operand Word | Parameter | Typical Range | Notes |
|---|---|---|---|
| C | Operating mode bits, origin input logic, search direction, limit-reversal enable | 0x0000 to 0xFFFF | Upper bits select origin-search mode (0–3). The Origin Proximity Input polarity and Origin Input polarity are encoded here. A mismatch with the PLC Setup is one of the two principal root causes of a 'no motion' fault. |
| C+1 | Starting frequency | Low word, Hz | The starting frequency for the search profile. The W462 manual explicitly requires this value to be set; a zero value leaves the routine with no defined creep speed and is a common field bug. |
| C+2 | Acceleration time | ms | Acceleration from starting frequency to target frequency. |
| C+3 | Deceleration time | ms | Deceleration from target frequency back to starting frequency after the Z phase. |
| C+4 | Target frequency | High word, Hz | Cruise speed between the Origin Proximity Input transition and the Z-phase latch. |
| C+5 | Origin compensation (post-Z distance) | Pulses | Compensation from Z phase to true mechanical origin. Setting this to zero leaves the origin at the Z edge; a positive value shifts origin past Z. |
| C+6 | Search direction (CW/CCW) and limit logic | 0x00 = CW, 0x01 = CCW | Combined with the operating-mode bits in C. |
For a single-scan execution, prefix the instruction with @:
LD 0.01 ; origin-search start pushbutton (N/O)
ANDNOT A280.13 ; not currently searching
@ORG(889) D200 ; D200..D206 hold the search profile
; @ ensures one execution per rising edge
Without the @ the instruction re-arms itself every scan while the rung is true. The CP1L never reaches a 'complete' state, the drive receives a continuous jog, and the origin is never latched. This is the second of the two classic CP1L origin-search failures, and the W462 example ladder in some printings has been known to omit the @.
Origin Search Operating Modes
The CP1L implements four origin-search modes through the upper byte of control word C:
| Mode | Proximity Used? | Z Phase Used? | Reverse at Limit? | Typical Application |
|---|---|---|---|---|
| 0 | Yes | Yes | No | Standard: decelerate on proximity, latch on next Z. |
| 1 | Yes | Yes | Yes | Mode 0 with limit-input reversal. Use when the axis may start past the proximity sensor. |
| 2 | Yes | No | No | Proximity sensor only; origin is latched at the proximity edge. |
| 3 | No | Yes | No | Z-phase only; slow speed over a short stroke. |
For a SmartStep A with a home-proximity sensor and a Z signal, Mode 0 is the default selection. Mode 1 is the safe upgrade if there is any chance the routine will start with the axis already inside the home region.
Root Cause 1: Origin Proximity Input Polarity (NC vs NO)
If the PLC Setup for the Origin Proximity Input is set to NC (normally closed) but the sensor is wired N/O, the input is logically OFF (not at origin) at the start of the routine. The CP1L origin-search engine interprets this as 'axis is already inside the home region, no approach needed' and either aborts immediately or pulses for one cycle and stops. A280.13 (Busy) clears, A280.07 (Error) sets, and A444 holds the abort category.
The W462 manual makes the polarity bit explicit: the Origin Proximity Input logic in the control word must match the PLC Setup Built-in Input setting. The two must agree; a mismatch always produces a 'no motion' fault on the first execution.
Resolution: open CX-Programmer's PLC Setup, navigate to Built-in Input configuration, and set the Origin Proximity Input bit for input 0.10 to N/O. Save the project, transfer to the CP1L, and power-cycle the PLC. PLC Setup changes do not take effect until a power cycle.
Root Cause 2: ORG vs @ORG Differentiation
ORG(889) is a level-triggered block. If the rung leading into it stays true (for example because the start pushbutton is wired latched, or the input is held by the operator's finger), the instruction re-arms itself each scan. The CP1L starts the search profile, fails to latch an origin, aborts, and immediately starts again. The drive receives what looks like a continuous jog command. A280.13 stays ON but A280.04 flickers for one scan, and the routine never produces a clean origin.
Two field-proven fixes exist:
- Use the differentiated form
@ORG(889)so a single rising edge produces one execution. The instruction's internal bit clears on the next scan regardless of the rung state. - Keep the start input as a one-shot: use DIFU(013) or DIFD(014) on the start rung, or wire the pushbutton as a true momentary contact that the operator can release.
The original W462 example ladder in some printings uses bare ORG(889). Several engineers have copied that example and observed the same behavior. The correct long-term pattern is:
LD 0.01 ; origin-search start pushbutton
DIFU(013) W0.10 ; one-shot on rising edge
LD W0.10
ANDNOT A280.13 ; not currently searching
@ORG(889) D200 ; D200..D206 = search profile control block
This pattern guarantees a single execution per press even if the pushbutton bounces or is held for several hundred milliseconds.
Diagnostic Flags and Error Codes
Online monitoring in CX-Programmer should always include the AR-area flags below when commissioning origin search. They give a real-time picture of why a routine is not moving.
| Flag | Name | Meaning |
|---|---|---|
| A280.04 | Pulses Being Output (Pulse 0) | ON while pulse output 0 is generating pulses. If this never goes ON, the CP1L has not started the search profile. |
| A280.07 | Origin Search Error (Pulse 0) | ON if the search aborted on the most recent execution. Read A444 for the abort category. |
| A280.13 | Origin Search Busy (Pulse 0) | ON from the first scan of ORG(889) until the routine completes or aborts. |
| A280.14 | Origin Search Complete (Pulse 0) | ON for one scan at the moment the origin is latched. |
| A444 | Pulse Output 0 Error Code | Most recent origin-search or pulse-output fault on pulse output 0. Reference W462 for the full code table. |
| A276 | Pulse Output 0 Present Value (PV) | Present value of pulse output 0. After a successful origin search this holds the origin compensation count. |
Diagnostic procedure using the flags above:
- Add A280.13 and A280.04 to the watch window. Press the start pushbutton.
- If A280.13 never goes ON, the rung is not driving ORG(889). Check the input bit and any interlocks.
- If A280.13 goes ON but A280.04 never goes ON, the routine aborted before issuing any pulse. Read A444 and confirm the Origin Proximity Input polarity matches the sensor.
- If both flags go ON and the axis still does not move, the fault is downstream: drive not in RUN, RUN line 100.02 not energized, or CW/CCW limit input is true.
Wiring and Signal Verification
Before any code change, confirm signal integrity on the bench. With the CP1L in PROGRAM mode, force each input and watch the corresponding bit on the I/O monitor.
- Force 0.06 (Z). The bit must toggle at the same rate as the motor encoder Z pulse. A SmartStep A with a 2,048-line encoder running at 3,000 r/min produces ~50 Hz at the Z output. A flat line means the Z wiring or the pull-up is open.
- Force 0.10 (proximity) by hand. The bit must toggle cleanly with no bounce. If the bit is ON continuously, the polarity is wrong or the sensor is shorted to 24 V.
- Force 0.00 (e-stop aux) to OFF. The RUN signal at 100.02 must drop. If the drive remains enabled, the e-stop chain is broken elsewhere, and the origin search will not run safely.
The Z signal is the most frequently mis-wired input in CP1L origin-search installations. The SmartStep A Z output is an open-collector NPN transistor. If the SmartStep Z output is not internally pulled up, add a 2.2 kΩ pull-up to 24 V at the CP1L terminal. The 500 ns minimum pulse-width spec on CP1L high-speed counter phase Z is satisfied by any SmartStep encoder Z output at any speed up to the encoder's maximum.
Step-by-Step Resolution
- Open the PLC Setup in CX-Programmer 7.1 or higher. Navigate to Built-in Inputs and confirm the Origin Proximity Input bit for 0.10 is set to N/O (value 0). Save and transfer.
- Open the Origin Search parameter dialog in the project and confirm the Origin Proximity Input logic in control word C matches the PLC Setup.
- Change ORG(889) to @ORG(889) on the rung driving D200, or add DIFU(013) on the start input as shown in the ladder above.
- Power-cycle the CP1L. PLC Setup changes do not take effect until a power cycle on a CP1L. This is the single most common cause of 'I changed the setting and nothing happened'.
- Run CX-Programmer online, place the PLC in MONITOR mode, and add A280.13, A280.04, A280.07, and A444 to the watch window.
- Press the origin-search pushbutton. The drive should jog toward the origin, decelerate on the proximity sensor, latch on the next Z, and settle at the origin position. A280.14 will pulse for one scan and the PV in A276 will hold the origin compensation count.
Verification and Commissioning
After the search completes, verify the following before returning the machine to production:
- PV in A276 (Pulse Output 0 PV) holds a stable value matching the origin compensation value in control word C+5 within ±1 encoder count.
- The drive's positioning-completed output is true and stable; no alarm code is present on the SmartStep A front panel.
- Repeating the search from a known offset position produces the same PV within ±1 encoder count across at least ten consecutive runs.
- Loss of power and re-application does not corrupt the origin; the routine re-runs to the same PV after power-up.
- CW and CCW limit inputs, if present, halt the search cleanly with the expected A444 abort code.
Common Variations on the Same Fault
The same 'no motion' symptom has a small number of additional causes that should be checked if the two principal fixes do not resolve the issue.
| Symptom | Additional Check | Resolution |
|---|---|---|
| A280.13 ON, A280.04 ON, axis jogs continuously | @ missing, ORG re-arms each scan | Add @ prefix or DIFU(013) on start. |
| A280.13 ON, A280.04 OFF, A280.07 ON | Origin Proximity Input polarity mismatch | Set PLC Setup N/O and matching control-word bit. |
| A280.13 ON, A280.04 ON, A280.07 OFF, no latch on Z | Z signal missing or below pulse-width spec | Verify 0.06 toggles, add 2.2 kΩ pull-up if needed. |
| A280.13 never ON | Rung not driving ORG(889) (input bit or interlock open) | Verify 0.01 and any interlock bits in MONITOR mode. |
| Axis runs the wrong direction | Search direction bit in C+6 is inverted | Toggle C+6 between 0x00 (CW) and 0x01 (CCW). |
| Axis decelerates on proximity but never latches | Starting frequency in C+1 set to 0 | Set C+1 to a non-zero value (e.g. 100 Hz). |
| Origin PV is off by a fixed count | Origin compensation C+5 wrong | Adjust C+5 to shift origin past Z by the required count. |
Power-Cycle Discipline
The CP1L does not apply PLC Setup changes to the running scan. The engineer in the source case learned this on a CJ1M after 'many hours of head-scratching' and the same lesson applies to the CP1L: every change to high-speed counter allocation, Origin Proximity Input polarity, origin-search parameter set, or pulse-output configuration requires a power cycle. A useful habit is to end every parameter change with a planned power cycle and a fresh online connection, not to assume the live edit has taken effect.
CX-Programmer can transfer parameters to the running PLC, but the change is not committed to the operating system until the next power-up. This is a hardware behavior of the CP1L, not a CX-Programmer limitation.
FAQ
Why does my CP1L origin search produce no pulses at all?
Two causes account for almost every 'dead' origin search on a CP1L-M30. First, the Origin Proximity Input polarity in the PLC Setup is wrong (NC instead of NO). Second, ORG(889) is wired as a level-triggered instruction and re-arms itself every scan. Set the polarity to N/O for an N/O sensor, and use the differentiated form @ORG(889) on the search rung.
Do I have to power-cycle the CP1L after changing origin-search settings?
Yes. PLC Setup changes — including high-speed counter allocation, Origin Proximity Input polarity, and origin-search parameter set selection — only take effect after a power cycle on the CP1L. Transferring parameters from CX-Programmer writes them to flash but does not apply them to the running scan until the next power-up.
Which AR flags should I watch to debug a stuck origin search?
Monitor A280.13 (Origin Search Busy), A280.07 (Origin Search Error), A280.04 (Pulses Being Output), and the error code in A444. If A280.13 never goes ON the routine is not being called. If A280.04 never goes ON, the routine has aborted before issuing any pulse — read A444 for the reason and check the Origin Proximity Input polarity.
Can I use the CP1L Z-phase input (0.06) directly from a SmartStep A drive?
Yes. Wire the SmartStep A open-collector Z output into CP1L input 0.06. The CP1L's high-speed counter 0 phase Z input requires a 500 ns minimum pulse width and a 24 V open-collector signal. If the SmartStep Z output is not internally pulled up, add a 2.2 kΩ pull-up resistor to 24 V at the CP1L terminal block.
What is the difference between ORG(889) and @ORG(889)?
ORG(889) executes every scan the rung is true, which re-arms the search profile each cycle and never reaches a 'complete' state. @ORG(889) executes only on the rising edge of the rung condition, producing a single search per press of the start pushbutton. For one-shot homing routines always use @ORG(889), or pair the bare ORG(889) with DIFU(013) on the start input.