CPM2A PLC Setup: DM6602 Configuration and Expanded Functions

James Nishida13 min read
OmronPLC HardwareTutorial / How-to
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Overview

The Omron CPM2A is a compact, brick-style PLC that occupies a specific place in the CP/CPM family. Unlike modular controllers such as the CJ2 or CS1, the CPM2A ships as a single integrated unit with the CPU, power supply, and a fixed I/O count (20, 30, 40, or 60 points depending on suffix). Configuring the controller for first use — particularly the data memory area where DM6602 resides — requires understanding Omron's instruction-class model and how standard instructions differ from expanded instructions. Mis-selecting expanded instructions during a download to a CPM2A CPU is one of the most common commissioning errors because the CX-Programmer toolchain defaults to assuming a full C-series instruction set when the project is created for a higher-end CPU and later retargeted to a CPM2A.

This guide walks through the practical CPM2A setup steps drawn directly from the CPM1/CPM1A/CPM2A/CPM2C/SRM1 Programming Manual (W353) and the CPM2A Operation Manual (W352-E1-07), focusing on the configuration parameters stored in the Data Memory (DM) area, including the frequently modified word DM6602.

Prerequisites

  • Hardware: CPM2A-CPUxx CPU unit, 24 VDC or 100–240 VAC supply version matching local mains, a compatible USB-CIF02 or RS-232C CIF01 programming cable (note that the CPM2A uses a round mini-DIN peripheral port, not the square CJ1 USB port).
  • Software: CX-Programmer version 9.x or later supporting the CPM2A device type. CX-One v4.x bundles this; standalone CX-Programmer requires a CPM2A license entry.
  • Documentation: The W353 programming manual and the W352 operation manual must be on hand. CX-Programmer also includes context-sensitive F1 help that links to these manuals.
  • Project topology: A clear I/O assignment table showing input/output word and bit addressing (IR 000, IR 010, IR 020, etc.) for the specific CPM2A suffix (e.g., 20-point units expose IR 000 only; 60-point units expose IR 000, IR 001, IR 010, IR 011, IR 020, IR 021).

I/O Addressing Differences From Other PLC Families

The CPM2A uses Omron's classic IR (Internal Relay) area for physical I/O. Unlike a SLC 500 where O:0/0 or a Siemens S7-1200 where Q0.0 denotes output bit 0, the CPM2A embeds the channel number and the bit number into the operand. Output bit 0 of output word 10 is written as 10.00. The leading channel digits (10) specify the IR word; the trailing digits (.00) specify the bit position 0–15.

CPM2A Suffix Inputs (IR words) Outputs (IR words) Notes
20-point (CPU20) IR 000 (12 bits used) IR 010 (8 bits used) Channel 0 cannot be reused as output.
30-point (CPU30) IR 000, IR 001 (18 bits used) IR 010 (12 bits used) Channel 1 unused input bits reserved.
40-point (CPU40) IR 000, IR 001 (24 bits used) IR 010, IR 011 (16 bits used) Two full I/O words each side.
60-point (CPU60) IR 000, IR 001, IR 002 (36 bits used) IR 010, IR 011, IR 020 (24 bits used) Largest integrated CPU.
Bit position convention: Channel 00 cannot be written as an output operand even if it shares a wire terminal, because the addressing rules of the IR area fix IR 000–IR 009 as input-only on every CPM2A suffix. Attempting to use 00.00 as an output in your ladder will produce an illegal operand syntax error in CX-Programmer before you ever reach the PLC. Substitute 10.00 for the equivalent output.

Memory Architecture and DM Area

The CPM2A partitions its memory into the following functional regions:

  • IR area (Internal Relay): IR 000–IR 231. IR 000–IR 019 are the physical I/O channels. IR 020–IR 049 and IR 200–IR 231 are work bits. Bits that are reused for special purposes (e.g., SR 253.13 = Always ON) live here too.
  • SR area (Special Relay): SR 228–SR 255. Holds system flags such as first-cycle flag (SR 253.15), 1-second clock (SR 255.02), error flags, and arithmetic flags.
  • HR area (Holding Relay): HR 00–HR 19. Retains state through power cycles.
  • AR area (Auxiliary Relay): AR 00–AR 27. Read-only system status and read/write configuration bits.
  • LR area (Link Relay): LR 00–LR 15. Used for 1:1 PC Link or CompoBus/S.
  • TC area (Timer/Counter): TC 000–TC 511. Each TC number holds a PV (word) and a Completion Flag (bit).
  • DM area (Data Memory): DM 0000–DM 6655. Word-only storage. DM 6144–DM 6599 are read-only system parameters. DM 6600–DM 6655 are the user-configurable PLC Setup words — DM6602 is the second of these.
Critical: DM 6144–DM 6599 are reserved for system diagnostics and must not be written from user logic. CX-Programmer will flag any attempt to write to these as an address out-of-range. DM 6600–DM 6655 are writeable but only through the PLC Setup dialog, never by direct MOV into the operand.

DM6602: Hold / Stop Bit Behavior

The most frequently edited PLC Setup word after DM6600 (startup mode) and DM6601 (scan/cyclic time) is DM6602. By default the CPM2A ships with bit settings that match a typical discrete-control application, but several parameters are commonly overridden:

Bit Position Function Default Field-Typical Setting
DM6602.00–02 Reserved (must be 0) 0 0 — never alter
DM6602.03 Force Status Hold Bit (FSP bit). When 1, forced I/O bits retain their forced state across power cycles. 0 (do not retain) 1 (retain force status)
DM6602.04–07 I/O Hold bits for IR 000 / IR 001 / IR 010 / IR 011. When 1, those IR bits retain their state through a STOP-RUN transition. 0 (clear) 1 for IR 010 / IR 011 outputs that must not flicker on startup
DM6602.08 RS-232C port parameter change enable 0 1 to enable runtime serial reconfig
DM6602.09 Peripheral port parameter change enable 0 1 when CX-Programmer changes baud on the fly
DM6602.10–15 Reserved 0 0

In practice, DM6602.04DM6602.07 are the bits engineers set when an output contactor must stay in its last commanded state across a brief power dip or a programming STOP. The I/O Hold bit only takes effect when the CPU transitions from RUN to STOP and back to RUN; it does not protect output state across a true power loss — for that you need HR area coils or a retentive output module.

Editing the PLC Setup from CX-Programmer

  1. Open the project for the CPM2A CPU in CX-Programmer. Right-click the PLC node in the project tree.
  2. Choose Edit → PLC Setup from the menu bar, or double-click Settings under the PLC node.
  3. The PLC Setup dialog opens with a tabbed view: Startup, Scan, Communications, Peripheral Port, Interrupt, High-speed Counter, Pulse Output, Analog (only on -MAD/-MAV suffixes), and Error Settings.
  4. Select the Hold/Stop Bit tab — this is where DM6602 is exposed as a bit-field panel. Tick the boxes for the desired force-status-hold and I/O-hold behaviors.
  5. Click Transfer to PLC. The tool will compile the PLC Setup as a single block and write DM 6600–DM 6655 atomically. You must be online in PROGRAM mode for the transfer to succeed.
  6. Power cycle the CPU to make the new setup effective for the startup-mode word (DM6600) and certain scan parameters.
Never hand-write DM 6600–DM 6655 from a MOV instruction. Some third-party documentation suggests writing individual words for legacy C-series compatibility; the CPM2A rejects user writes to DM 6600–DM 6655 from program execution, and even if it did not, the change would not be persistent because the PLC Setup is loaded into working memory at power-up from a protected flash region. Always use the PLC Setup dialog.

Standard vs Expanded Instructions

Omron's C-series — including the CPM2A — divides its ladder instruction set into two classes:

  • Standard instructions: Always resident in the CPU ROM. Examples: LD, AND, OR, OUT, TIM, CNT, MOV, CMP, INC, DEC, SFT, JMP, JME, END.
  • Expanded instructions: Must be selected in CX-Programmer and downloaded as a separate function block. Examples: SCL2 (sign change BCD), AVG (average), FCS (frame checksum), PID, APB, MBS, RXD, TXD, CMCR, STUP, PMCR, XFRB, XFER, BSET, COLM, MOVB, MOVW, ADDB, SUBB, MULB, DIVB, INI, PRV, PULS, SPED, ACC, PLS2, ORG, PWM, SYNC.

When a CPM2A is the target of a project that was originally written for a CP1E, CP1H, CJ2M, or CS1 CPU, the CX-Programmer project may include expanded instructions that the CPM2A does not support natively. Two failure modes occur:

  1. Compile error: CX-Programmer will refuse to compile a ladder rung that uses an unsupported expanded instruction. The error message reads "This instruction is not supported by the selected CPU type."
  2. Download error: If the rung compiles (because the instruction is shared with CPM2A) but the function block code is missing in the target, the CPU returns error 0x80F0 "Expansion Instruction Not Loaded."
Rule of thumb: If your CPM2A logic only needs LD/AND/OR/OUT/TIM/CNT/MOV/CMP/INC/DEC/SFT/JMP/END, do not select any expanded-instruction module. Leaving the expanded-instruction section empty speeds compilation, reduces project size, and avoids the 0x80F0 fault on first download.

Edge / Differentiation Handling

Unlike Siemens S7 (which has separate P and N edge operands) or Allen-Bradley SLC 500 (which uses ONS or one-shots), the CPM2A uses the @ prefix and the DIFU / DIFD instructions to mark rising or falling edges:

Mechanism Syntax Function
Differentiate Up DIFU(13) HR_bit Pulses the operand ON for one scan on the rising edge of the input condition.
Differentiate Down DIFD(14) HR_bit Pulses the operand ON for one scan on the falling edge of the input condition.
Differentiated contact @ LD, @ AND, @ OR, @ OUT Prefix a contact or coil with @ to make it edge-sensitive for that single use.

Place the target bit in the work-relay region (IR 020–IR 049, or HR 00–HR 19 for retentive single-scans). Do not write to an SR bit with DIFU/DIFD — most SR bits are read-only or perform system duties, and writing them creates unpredictable scan behavior.

Timers and Counters

The CPM2A uses the TC area (TC 000–TC 511) for both TIM/CNT and TIMH/CNT. The PV is stored as BCD by default. Format of the PV set value:

  • TIM: 000.0–999.9 seconds. Set value is BCD, one decimal place, range #0000 to #9999.
  • TIMH: 00.00–99.99 seconds. Faster timing, BCD hundredths of a second.
  • CNT: 0000–9999 counts. Counts falling edges on the count input while the reset input is OFF.
  • CNTR: 0 to ±32,767 (signed). Reversible counter with increment and decrement inputs.
Common field error: Entering #100 on a TIM rung as decimal-thinking rather than BCD #0100 for 10.0 seconds. The CPM2A will accept #100 as a BCD set value of 10.0 s only if it parses cleanly; entering #1A0 (hex-thinking) will fail with BCD error.

Online Programming Workflow

  1. Connect CX-Programmer to the CPM2A peripheral port using a CIF01/CIF02 cable. The default peripheral port parameters are 9 600 bps, 7 data bits, even parity, 2 stop bits (9600-7-E-2).
  2. Establish Online connection. CX-Programmer auto-detects the CPU type. Verify the device name reads CPM2A-CPU60 (or matching suffix).
  3. Select Edit → Online Edit mode (Ctrl+1 toggles). Rungs in green outline are locked for editing; place the cursor on a rung to unlock it.
  4. Make changes, then press Ctrl+Enter or click the down-arrow toolbar button to transfer the modified rung. The CPM2A performs an online patch — the rest of the program continues to scan while the rung is rewritten. The ON/OFF status of all bits is preserved.
  5. Save the program to flash with PLC → Transfer → To PLC when finished, or Transfer → Save to Memory Card for backup.
Watchdog caveat: Online edits that lengthen the scan time by more than the scan watchdog (default 1 s, set in DM6601 bit 15) will trigger Scan Time Over fault (error code 0x80F1). If you must insert a heavy rung, first set DM6601 to allow a longer scan, then make the edit, then restore.

Verification Steps

  1. After the PLC Setup transfer, cycle power to the CPU. Confirm the RUN LED stays green; a yellow or red ERR LED means the new DM6602 setting was not accepted.
  2. From CX-Programmer, choose PLC → Information and verify the PLC Setup checksum matches the value displayed in the dialog (a non-zero difference indicates a partial write).
  3. Force an unused output bit (e.g., 10.07) ON via the Force Set dialog. Confirm the output LED lights. Cancel the force.
  4. Toggle the force-status-hold bit (DM6602.03) by setting it to 1, forcing a bit, cycling power, and observing that the forced state is retained.
  5. Verify the PV of a sample TIM instruction by reading TC 000 in the Watch window. Confirm it decrements at 0.1-s intervals (for TIM with PV in tenths).

Troubleshooting Matrix

Symptom Likely Cause Diagnostic Step Corrective Action
CX-Programmer reports "illegal operand" on 00.00 Using an input word as an output. Check I/O assignment table. Change to 10.00.
Error code 0x80F0 Expansion Instruction Not Loaded Ladder uses an expanded instruction the CPM2A does not have. Cross-check against W353 expanded-instruction table. Replace with a standard-instruction equivalent (e.g., use MOV + arithmetic flags instead of PID).
Error code 0x80F1 Scan Time Over Scan watchdog (DM6601 bit 15) exceeded. View Scan Time in CX-Programmer → PLC Information. Raise the scan time in DM6601 or optimize the program.
Output flickers on STOP-RUN transition I/O Hold bits DM6602.04DM6602.07 are 0. Read DM6602 via Watch window. Enable I/O Hold for the relevant output word in the PLC Setup.
Forced bit clears on power cycle Force Status Hold bit DM6602.03 is 0. Read DM6602. Enable Force Status Hold in PLC Setup.
BCD error on TIM set value Non-BCD constant entered. Review the TIM rung's set-value constant. Use only digits 0–9; for 0.1 s precision use TIM, for 0.01 s use TIMH.
Online Edit fails with "Rung not locked" Program memory is full or protected. Check UM Protection bit. Clear UM protection or remove unused rungs.

Summary of PLC Setup Configuration

  • Reserve DM 6600–DM 6655 for the PLC Setup. Edit only via CX-Programmer's Edit → PLC Setup dialog.
  • DM6602 controls force-status retention (DM6602.03) and I/O Hold behavior on STOP-RUN transitions (DM6602.04DM6602.07). These are the most commonly customized bits.
  • Avoid the expanded-instruction trap when porting projects from CP1/CJ/CS families. Strip expanded instructions before downloading to a CPM2A.
  • Use 10.00 for output bit 0, never 00.00. Channel 0 is input-only.
  • Differentiate edges with @ prefix or DIFU(13) / DIFD(14) instructions.
  • Online edits are patch-based and preserve bit states, but stay below the scan watchdog.

What does DM6602 do in a CPM2A PLC?

DM6602 is the third PLC Setup word in the DM 6600–DM 6655 configuration block. It controls whether forced I/O bits retain their state across power cycles (bit 03 = Force Status Hold) and which I/O words (IR 000, IR 001, IR 010, IR 011) retain their ON/OFF status through a STOP-to-RUN transition (bits 04–07 = I/O Hold bits). Bits 08 and 09 enable runtime changes to the RS-232C and peripheral-port parameters.

Can I write DM6602 directly from a MOV instruction?

No. The CPM2A rejects user writes to DM 6600–DM 6655 from program execution; only the PLC Setup dialog can modify these words, and the change is loaded into working memory at the next power-up. Attempting to MOV into DM6602 produces a write-protect error. Always edit through CX-Programmer's PLC Setup dialog and then Transfer to PLC.

Why does my output bit 00.00 give an "illegal operand" error?

Channel 00 is reserved for inputs on every CPM2A suffix — it cannot be written as an output. Use the output word IR 010 (bit 10.00) or the appropriate output channel for your CPU size. For a 20-point unit the output word is IR 010 only; for a 60-point unit the output words are IR 010, IR 011, and IR 020.

What is the difference between standard and expanded instructions?

Standard instructions (LD, AND, OR, OUT, TIM, CNT, MOV, CMP, INC, DEC, SFT, JMP, END, etc.) are permanently resident in the CPM2A ROM and are always available. Expanded instructions (PID, SCL2, RXD, TXD, PULS, ACC, PLS2, PWM, PMCR, etc.) must be selected in CX-Programmer and downloaded as a separate function block. If you reference an expanded instruction without including its block, the CPU returns fault 0x80F0 "Expansion Instruction Not Loaded." Use only standard instructions for simple discrete control programs.

How do I differentiate a single scan in a CPM2A ladder?

Use the @ prefix on a contact or coil (@LD, @AND, @OUT) to make it edge-sensitive, or use the dedicated instructions DIFU(13) (differentiate up) and DIFD(14) (differentiate down) to pulse a work bit (IR 020–IR 049) or HR bit for exactly one scan on a rising or falling edge of the input condition.

Back to blog