1. Overview: The Omron CPM1A Compact PLC Family
The Omron CPM1A is a compact micro-PLC designed for small machine control, replacement of relay-based panels, and stand-alone I/O sequences. It belongs to Omron's CPM series, which also includes the CPM1, CPM2A, CPM2C, and SRM1 CPUs. The CPM1A family page describes the platform as packing "all basic functions into a compact size" with four CPU sizes, each offered in AC- or DC-powered variants and with either relay or transistor outputs.
Engineers migrating from simple logic-relay controllers (such as the Schneider Zelio) often pick the CPM1A for its ladder logic compatibility, removable terminal blocks, and the same instruction set shared with the larger CS/CJ and CP series. The complete instruction set, memory map, and scan behaviour are documented in the official W353 CPM1/CPM1A/CPM2A/CPM2C/SRM1 Programming Manual (PDF).
2. CPU Models and Hardware Specifications
The CPM1A is offered in four I/O counts: 10, 20, 30, and 40 points. Each CPU has AC and DC power variants, and most are available with relay or transistor outputs. The naming convention breaks down as follows:
-
CPM1A-NNCDR-D— N points (10/20/30/40), Relay output, 24 V DC power supply. -
CPM1A-NNCDR-A— Relay output, 100–240 V AC power supply. -
CPM1A-NNCDT-D— NPN transistor (sinking) output, 24 V DC supply. -
CPM1A-NNCDT1-D— PNP transistor (sourcing) output, 24 V DC supply.
| Model example | Total I/O | Inputs | Outputs | Power | Output type |
|---|---|---|---|---|---|
| CPM1A-10CDR-A | 10 | 6 | 4 | AC | Relay |
| CPM1A-10CDR-D | 10 | 6 | 4 | DC | Relay |
| CPM1A-20CDR-D | 20 | 12 | 8 | DC | Relay |
| CPM1A-30CDR-D | 30 | 18 | 12 | DC | Relay |
| CPM1A-40CDR-D | 40 | 24 | 16 | DC | Relay |
| CPM1A-20CDT-D | 20 | 12 | 8 | DC | NPN transistor |
| CPM1A-40CDT1-D | 40 | 24 | 16 | DC | PNP transistor |
Inputs on DC-powered units are bidirectional (sink/source) 24 V DC; on AC-powered units they are 100–120 V AC inputs. Output ratings for the relay variants are 2 A at 250 V AC / 24 V DC per point (8 A common, 4 A on 10-point CPUs). Transistor outputs switch at 24 V DC, 300 mA per point, with residual voltage < 1.5 V. A 0.1 A surge rating applies for lamp loads on transistor models.
3. Programming Software and Communication Setup
CPM1A projects are written in CX-Programmer (part of the CX-One or Sysmac Studio packages) and uploaded through either the peripheral port or the RS-232C port. The recommended workflow is:
- Connect the CPM1A to a PC using a CIF01 RS-232C cable (peripheral port to DB-9) or a USB-to-serial converter plus the appropriate adapter. Older laptops may need a USB-Serial adapter based on the FTDI FT232 chipset.
- Set DIP switch 4 on the CPU to OFF to allow programming via the peripheral port (default for most CPUs).
- Launch CX-Programmer, choose New Project → Device Type: CPM1A → CPU: matching model → Network: SYSMAC WAY.
- Set the host COM port and baud rate (default 9 600 bps, 7 data bits, even parity, 2 stop bits — 9600/7E2).
- Use Online → Connect to read the existing program from the CPU before performing Transfer to PLC.
4. Memory Areas and I/O Addressing
The CPM1A uses fixed-memory bit and word addressing. Knowing the area names is essential before writing ladder.
| Area | Prefix | Purpose | Range |
|---|---|---|---|
| I/O Relays | IR |
Physical inputs and outputs | IR 000.00–IR 019.15 |
| Internal Work Relays | IR |
Bit scratch memory | IR 200.00–IR 239.15 (varies) |
| Special Relays | SR |
System flags (always-on, scan pulse, error) | SR 240.00–SR 255.15 |
| Holding Relays | HR |
Retentive bits | HR 00.00–HR 19.15 |
| Auxiliary Relays | AR |
System status, retentive | AR 00.00–AR 23.15 |
| Link Relays | LR |
Peer-to-peer / 1:1 link | LR 00.00–LR 15.15 |
| Timer/Counter | TC |
Timer and counter PVs/flags | TC 000–TC 127 |
| Read/Write DM | DM |
Word data, retentive, BCD/raw | DM 0000–DM 2043 |
Inputs and outputs are mapped word-by-word. For example, on a CPM1A-20CDR-D, IR 000 holds inputs 00.00–00.11, IR 010 holds outputs 010.00–010.07. The 30- and 40-point CPUs extend the input word to IR 001 and the output word to IR 011.
Use SR 253.13 as the always-on flag, SR 253.14 as the always-off flag, and SR 255.00 for the 0.1 s clock pulse (toggle every 100 ms).
5. Ladder Logic Fundamentals for Relay-Minded Engineers
If you have programmed a Zelio or a hard-wired relay panel, the CPM1A ladder diagram will look familiar: two vertical power rails with rungs of contacts and coils. The key differences are:
-
Contacts read bits.
—| |—is NO (Normally Open),—|/ |—is NC (Normally Closed). Place the operand bit before the colon, e.g.000.00for input 0. -
Coils write bits.
—( )—is an output (regular) coil,—(L)—is a latching (retentive) coil,—(U)—is unlatch. -
Differentiation is handled with
@prefix (rising edge) or%prefix (falling edge), e.g.@ 000.00pulses TRUE for one scan on the rising edge of input 0. -
Endian: bit numbering within a word is
word.bit, low-bit first (00 = LSB).
A first rung for lamp control wired to input 0 and output 100.00 looks like:
| |
| 000.00 —( 010.00 )
| |
| |
+-------+
6. Output Relay Wiring Considerations
Relay outputs on the CPM1A can switch mixed AC and DC loads on the same common block, which is unusual for small PLCs. Practical wiring rules from the W353 manual:
- Each relay common (
COM) is isolated. Tie the commons together only when all loads share the same supply polarity. - Use a flyback diode across inductive DC loads and an RC snubber across AC coils. A 0.1 µF + 100 Ω snubber is a safe default.
- Total current per common must not exceed 8 A on 20/30/40 point CPUs, or 4 A on 10-point CPUs.
- Do not exceed 1800 operations/hour on the mechanical relay output; for high-cycle loads pick a transistor-output model and add an external SSR.
7. Timer Instructions (TIM, TIMH, TTIM, TIML)
The CPM1A uses a shared TC area for timers and counters. A timer is a contact set with a present value (PV) and a completion flag. Preset value (SV) units depend on the timer class:
| Instruction | Mnemonic | Time unit | SV range | Use case |
|---|---|---|---|---|
| Standard Timer | TIM |
0.1 s | 0–999.9 s | On-delay general purpose |
| High-Speed Timer | TIMH(15) |
0.01 s | 0–99.99 s | Fast on-delay |
| Totalising Timer | TTIM(87) |
0.1 s | 0–999.9 s (cumulative) | Accumulates input ON time |
| Long Timer | TIML(—) |
1 s | 0–9999 s (limited on CPM1A) | Slow on-delay |
| Accum. Timer | CNT |
Count events | 0–9999 events | Event counter |
| Reversible Counter | CNTR(12) |
Count up/down | 0–9999 | Two-direction count |
A standard 5-second on-delay timer using TC 000 and SV = 50 (0.1 s units) is written as:
| |----[TIM 000 SV=50]---|
| 000.00 | |
| | |
+--------+----------------------------+
Once the input 000.00 is TRUE continuously for 5 s, the contact TC 000 closes and the rung executes. The PV is held in TC 000's word address, and the completion flag is the same TC number used as a contact.
Use TTIM when the input is intermittent and you need to accumulate the total ON time, for example: an hour-meter on a heater, or a "machine armed" timer that survives short pauses. The PV of TTIM retains across power loss when the TC is configured as retentive (HR area is not used; TC area is retentive on CPM1A when the CPU battery is fitted).
8. Counter Instructions (CNT, CNTR)
Counters share the TC area but use count pulses instead of timing. CNT is a down counter, and CNTR(12) is a reversible counter. The structure is:
| |----[CNT 010 SV=20]--|
| 000.01 | |
| | |
+--------+---[R 010]---------------|
| 000.02 | |
+--------+-------------------------+
Every time 000.01 rises, the PV of TC 010 decrements. When PV reaches 0, contact TC 010 closes. The reset rung (R instruction) on 000.02 clears the PV back to the SV. PV and SV are held in the TC area; the SV can be a constant or a word from DM/HR for adjustable counts.
9. Sample Program: Two-Stage Pump with Alternation
The following ladder alternates two pump contactors every time a float switch requests a fill. This pattern is common in irrigation and tank-control panels. Hardware: input 0.00 = high-level float, output 010.00 = pump A, output 010.01 = pump B. Pump selection is held in HR 00.00.
Rung 1 — Start condition
| 000.00 HR 00.00 --[ KEEP(11) HR 00.00 ]---
|
Rung 2 — Pump A contactor
| HR 00.00 200.00 --( 010.00 )---
|
Rung 3 — Pump B contactor
| HR 00.00 200.01 --( 010.01 )---
|
Rung 4 — Toggle selection each fill (rising edge)
| 000.00 --@ KEEP(11) HR 00.00 ---
|
Rung 5 — Mutual interlock (safety)
| 010.00 --/ 010.01 ---
| 010.01 --/ 010.00 ---
Edge-detect the float with @, then use a KEEP (latch) bit HR 00.00 to remember which pump ran last. The next rising edge of the float flips the KEEP bit, alternating pumps.
10. Migrating a Project from a Logic Relay (Zelio) to CPM1A
Engineers who started with a Schneider Zelio soft project often want to reproduce the same scheme on a CPM1A. The mapping is mostly mechanical:
| Zelio function | CPM1A equivalent | Notes |
|---|---|---|
| Input contact Zx | IR 000.xx
|
Physical input terminal |
| Output coil Qx | IR 010.xx
|
Output coil instruction |
| Auxiliary bit Mx | IR 200.xx or HR 00.xx
|
Use HR for retentive |
| Timer T (0.1 s) |
TIM with SV in tenths of a second |
Zelio 1 s unit → CPM1A SV × 10 |
| Counter C | CNT |
PV uses raw counts, no scaling |
| Compare block | Compare instructions =, <, >, <=, >=, <>
|
Word operands: DM, HR, TC |
| Clock / scheduler | CPM1A has no built-in RTC on early units; add an option board or use a CP1W-8TS RTC expansion | Verify on hardware |
For a Zelio "blinking" output (Zx pulses Qy at 1 Hz), replace the Zelio clock block with a CPM1A rung using the system clock bit SR 255.00 (0.1 s, 50 % duty) or SR 255.01 (0.2 s). The Schneider "BLINK" block has no direct counterpart because the CPM1A timer must be programmed; the standard idiom is:
| SR 255.00 --( 200.00 ) ; 0.1 s pulse
| 200.00 --( TIM 001 SV=5 ) ; 0.5 s on-delay
| TIM 001 --( 010.00 ) ; pump on for 0.5 s every 1 s
11. Commissioning and Verification
- Compile the project in CX-Programmer. Resolve any "operand out of range" warnings before transfer.
- Place the CPU in PROGRAM mode (selector on the front of the unit) before transferring.
- Use Online → Transfer → To PLC. Watch the progress bar and verify the End instruction ("END(01)") is present on the last rung.
- Switch to RUN or MONITOR mode. Use the Toggle Bit / Force Set Reset tool to walk through each rung.
- Verify timer PVs update by hovering over
TC xxxin MONITOR mode. A stuck PV indicates an instruction in the wrong TC area or a missing input contact. - For relays, test with a multimeter in ohms across the contactor coil. Check for AC ripple on DC outputs — a leaky triac on a DC load will read partial voltage even when off.
- Save the project to the on-board flash after final testing: Online → Flash Memory → Backup.
12. Troubleshooting Matrix
| Symptom | Likely cause | Corrective action |
|---|---|---|
| Inputs read as OFF even when voltage applied | Wired sink/source incorrectly on DC input CPU | Confirm common polarity; for AC input CPUs ensure 100 V AC minimum |
| Output relay chatters | SV too low for a TIM instruction, or output used as both coil and contact | Increase SV, replace duplicate references with a work bit |
| Timer PV never decrements | Timer placed in HR area by mistake, or TC area conflict with a counter | Re-allocate TC number; remember TC is shared between TIM and CNT |
| CPU ERR/ALM LED lit | Scan time exceeded, or operand access error | Read AR 02 via CX-Programmer monitor; refer to W353 chapter 9 error codes |
| CX-Programmer times out connecting | Wrong COM port, baud rate, or SYSMAC WAY protocol mismatch | Match 9600/7E2, use auto-detect first, then override |
| Program lost after power cycle | Battery flat, or flash backup never executed | Replace CR2032 backup battery, run Flash Memory → Backup |
13. Long-Term Maintenance and Memory Backup
The CPM1A's program memory is volatile unless the optional backup battery is fitted. Always run Flash Memory → Backup after the final transfer; this writes the program to non-volatile storage. Schedule a 5-year battery replacement in your maintenance plan. The DM area (parameters, recipes) and HR/AR bits are battery-backed, so any production setpoints remain stable across power cycles. Document the DM map (for example, DM 0000 = setpoint 1, DM 0001 = setpoint 2) in the project header so future engineers can interpret the program without reverse engineering.
What is the simplest way to start a CPM1A timer in ladder logic?
Drop a TIM instruction with an unused TC number (e.g. TC 000) and set the SV in 0.1-second units. For a 5-second on-delay, use SV = 50. Place a NO contact for the trigger input on the left rail, and the timer's TC contact on a subsequent rung to switch the load.
How many timers can a CPM1A run at once?
Up to 128 timer/counter numbers are available (TC 000–TC 127), and each TC may be used by either a TIM/CNT or a TTIM/CNTR instance. Reserve TC numbers per function block to avoid operand conflicts.
Why does my output stay on even after the input turns off?
You probably used a KEEP (latch) coil or a self-holding rung without a stop condition. Add an unlatch (—(U)—) instruction on the same bit, controlled by the stop input, or convert to a regular output coil if latching is not required.
Can I replace a Zelio logic relay with a CPM1A without changing field wiring?
Yes, in most cases. The CPM1A accepts the same 24 V DC signal levels on inputs and the same dry-contact loads on relay outputs. You may need a small adapter plate and must reprogram the logic in CX-Programmer rather than Zelio-soft.
Where can I download the official CPM1A programming manual?
The complete CPM1/CPM1A/CPM2A/CPM2C/SRM1 Programming Manual (W353) is available from Omron's European asset server at assets.omron.eu/w353, and the CPM1A family overview is at omron.com.au/products/family/43.