1. Overview
Omron's small-format PLCs (CPM2A, CP1L, CP1H, CJ1M, CQM1H, SRM1) historically expose two distinct serial protocols over the same physical RS-232 / RS-422 hardware: Host Link (also branded SYSMAC WAY) and Toolbus. The protocol selection is not always obvious because both protocols share the same electrical interface, the same default baud rate (9 600 bps), the same data format (7 data bits, Even parity, 2 stop bits), and in many cases the same peripheral port. Field experience shows that a CPM2A purchased today will accept either protocol on its peripheral port without any DIP-switch reconfiguration, while a CP1L with a CP1W-CIF01 option board behaves identically once the port is enabled in the PLC Setup area.
This reference consolidates the protocol differences, the cable pinouts, the CX-Programmer / CX-One project settings, and the most common failure modes observed when connecting modern PCs (which no longer ship with native DB-9) to legacy Omron CPUs.
2. Protocol Fundamentals: SysmacWay vs Toolbus
| Attribute | SYSMAC WAY (Host Link, FINS via C-mode) | TOOLBUS |
|---|---|---|
| Encoding | ASCII (readable text frames) | Binary (proprietary compact frames) |
| Default baud rate | 9 600 bps | 9 600 bps |
| Default data format | 7-E-2 (7 data, Even, 2 stop) | 7-E-2 (7 data, Even, 2 stop) |
| Physical port | RS-232C (per PLC) or RS-422 (multi-drop) | Peripheral port (RS-232C, 4-pin mini-DIN on CPM1A/CPM2A, DB-9 on CP1L with CIF01) |
| Typical use | HMI/SCADA polling, data logging, simple register read/write | Programming, online editing, full project upload/download, memory-card transfer |
| Frame payload efficiency | Lower (each data byte sent as 2 hex ASCII chars) | Higher (binary frame, smaller per-message overhead) |
| Throughput at 9 600 bps | ~ 600-700 I/O words/s sustained | ~ 1 200-1 500 I/O words/s sustained |
| CX-Programmer driver name | SYSMAC WAY | Toolbus |
SysmacWay is a subset of Omron's older Host Link command set (C-mode), exposed in CX-Programmer under the SYSMAC WAY driver. The protocol is human-readable: a typical read request for DM0000 takes the form @00RD0000000050FCS*CR where @ starts the frame, 00 is the unit number, RD is the read-DM command, 00000000 is the start address, 50 is the word count (BCD, 50 = 50 dec = 0x32, equivalent to 50 decimal words), and FCS*CR is the 2-character Frame Check Sequence plus terminator. Toolbus replaces all of those ASCII characters with compact binary control bytes and a CRC-16, which is why the same physical link can be 2-3× faster for project transfers.
3. CPM2A Communication Architecture
The CPM2A ships with one fixed peripheral port (4-pin mini-DIN, top of the CPU) and one RS-232C port (DB-9, bottom of the CPU) on 30- and 40-point models; 20-point models expose only the peripheral port and require a CPM1-CIF01 adapter to add DB-9 connectivity.
- Peripheral port: Carries Toolbus by default, but can be re-mapped in DM6650-DM6653 (PLC Setup area 1) to Host Link at any standard baud rate from 1 200 to 19 200 bps. The DIP switches on the front of the unit (SW1, SW2) only select the communication parameters (baud, format), not the protocol.
- RS-232C port: Default is Host Link / SysmacWay at 9 600 / 7-E-2. Re-mappable through DM6645-DM6648 (PLC Setup area 0) to Toolbus for the CJ1M/CJ2M family, but not on the CPM2A itself: the CPM2A RS-232 port is hard-wired to Host Link only.
Field practice: connect CX-Programmer to the peripheral port and let it auto-detect; the programmer will negotiate Toolbus because that is the port's default. Connect an HMI to the DB-9 port and select SysmacWay because that is the only protocol available there.
4. CP1L Serial Port Configuration
The CP1L base unit has no built-in serial port. Serial communication requires one of:
| Option board | Form factor | Protocols supported | Maximum baud |
|---|---|---|---|
| CP1W-CIF01 | DB-9 RS-232C, snap-in option board (slot 1 or 2) | Host Link (SysmacWay), NT Link 1:N, Modbus RTU Master/Slave, Toolbus (CX-Programmer only) | 115 200 bps |
| CP1W-CIF11 | DB-9 RS-422/RS-485, snap-in option board | Host Link, NT Link, Modbus RTU Master/Slave | 115 200 bps |
| CP1W-CIF12-V1 | DB-9 RS-422/RS-485 isolated | Same as CIF11 with 500 V isolation | 115 200 bps |
| CP1W-CIF41 | Ethernet option board (web server, FINS/TCP, Modbus/TCP) | FINS, Modbus/TCP | 100 Mbit/s |
Once the CIF01 is installed, the port mode is set in the PLC Setup → Serial Port 1/2 tab in CX-Programmer (or in CX-Configurator / Network Configurator for FINS routing). For Host Link the relevant fields are:
- Port Mode:
Host Link - Unit Number: 0-31 (default 0, must match CX-Programmer driver settings)
- Baud Rate: 9 600 default, supported 1 200 / 2 400 / 4 800 / 9 600 / 19 200 / 38 400 / 57 600 / 115 200
- Data Format:
7,E,2standard;7,N,2only if the SCU/option board is set to Non-Standard mode
5. Cable Pinouts and Wiring
5.1 PC DB-9 ↔ Omron PLC DB-9 (CIF01 / CP1L built-in option)
| Function | PC DB-9 pin (DCE) | Signal direction | Omron DB-9 pin (DTE) |
|---|---|---|---|
| RD (Receive Data, into PC) | 2 | ← | 2 (SD from PLC) |
| SD (Send Data, out of PC) | 3 | → | 3 (RD into PLC) |
| SG (Signal Ground) | 5 | ↔ | 9 (SG on Omron) |
| RTS (PC drives high, ignored) | 7 | → | 4 (CTS, tied internally) |
| CTS (PLC side, not driven) | 8 | ← | 5 (RTS, tied internally) |
| DSR / DCD / DTR | 1, 4, 6 | loopback | 1, 6, 7 loopback |
This is a straight-through crossover of only 2-3 signal lines plus ground. No hardware handshaking is required because Omron PLCs do not assert RTS/CTS for Host Link or Toolbus sessions. If you build a generic "serial extension" cable you will get a "disconnected" or "timeout" error from CX-Programmer — that is almost always a missing SG on pin 9 (Omron uses pin 9 for signal ground, not pin 5 as the rest of the world does).
5.2 USB ↔ Omron PLC (Modern PC without DB-9)
Three paths exist, in order of reliability:
-
Omron CS1W-CIF31 USB-Serial converter, the only USB converter officially validated for CX-Programmer. Driver: OMRON SYSMAC USB CDC ACM (VID 0x0590, PID 0x0044). Auto-installs on Windows 10/11; on Windows 7 use the
omron-virtual-com-portINF from CX-One DVD 4.x. - FTDI FT232R-based converters (FTDI TTL-232R, etc.) with the standard FTDI VCP driver 2.12.x. Set latency timer to 1 ms in Device Manager → Port (COMx) → Properties → Port Settings → Advanced; the default 16 ms latency will cause CX-Programmer to time out during program upload.
-
CH340 / HL-340 / PL2303 clones: not recommended. The CH340 has been observed to corrupt Toolbus frames above 19 200 bps and to drop the DTR signal the CPM2A uses for auto-detect. If you must use one, lock the baud rate in the CX-Programmer driver to 9 600 and explicitly select
SYSMAC WAYrather thanAuto-detect.
6. Communication Parameters and PLC Setup
Default Host Link parameters across the CPM/CQM/CP1/CJ1 family:
| Parameter | Default | DM/Setup area on CPM2A | DM/Setup area on CP1L (CIF01) |
|---|---|---|---|
| Baud rate | 9 600 bps | DM6645 (port 1) / DM6651 (port 2) | PLC Setup → Serial Port 1, word 144 (binary) |
| Data bits | 7 | DM6646 / DM6652 (high nibble) | PLC Setup word 145 |
| Parity | Even | DM6646 / DM6652 (low nibble) | PLC Setup word 145 |
| Stop bits | 2 | DM6647 / DM6653 | PLC Setup word 146 |
| Unit number | 0 | DM6648 / DM6653 (low byte) | PLC Setup word 147 |
| Mode | Host Link | DM6645 (low byte): 0x80 = Host Link, 0x90 = NT Link, 0xC0 = Peripheral | PLC Setup word 144 high byte |
0x00F1 Timeout if the PC is still set to 9 600 while the PLC has been promoted to 19 200.7. CX-Programmer / CX-One Driver Configuration
In CX-Programmer, configure the connection in Change PLC → Network Type → SYSMAC WAY for Host Link, or Network Type → Toolbus for programming. The relevant fields:
- Network Type: SYSMAC WAY / Toolbus / Ethernet / Controller Link / Toolbus-via-Ethernet (FINS/TCP)
- COM Port: COM1-COM256, match Device Manager
- Baud Rate: must match PLC (default 9 600)
- Data Bits: 7 (Host Link) or 8 (Toolbus auto-detected)
- Parity: Even (Host Link) or None (Toolbus)
- Stop Bits: 2
- Unit Number: 0 by default; the CPM2A peripheral port ignores unit number, the DB-9 port uses 0-31
Use Online → Auto Online → Direct Online to let CX-Programmer cycle through every available driver on every COM port at 1 200 / 2 400 / 4 800 / 9 600 / 19 200 bps. This is the recommended first step when you do not know which protocol the port is currently locked to.
8. SysmacWay Frame Example (Read 10 words from DM0000)
Request (PC → PLC, ASCII):
40 30 30 52 44 30 30 30 30 30 30 30 30 31 30 46 43 53 2A 0D
@ 0 0 R D 0 0 0 0 0 0 0 0 1 0 F C S * CR
^start unit=00 cmd=RD start_addr=0000 count=10(BCD "0010") FCS ^end
Response (PLC → PC, ASCII, normal completion):
40 30 30 52 44 30 30 46 41 31 30 30 30 30 30 31 30 30 32 ... F C S * CR
@ 0 0 R D 0 0 F A 1 0 00 00 01 00 02 ... FCS * CR
^start unit=00 cmd=RD end_code=00(FA = OK) data[20 hex chars / 2 = 10 words] FCS ^end
If the response starts with @00RD00FA and the data field is present, the read succeeded. If the response is @00RD?? with an end code other than 00 or simply absent, refer to the Omron Host Link error code table:
| End code (hex) | Meaning | Typical cause |
|---|---|---|
| 00 | Normal completion | — |
| 01 | Not executable in RUN mode | Force-set/reset attempted online; PLC in RUN |
| 02 | Not executable in MONITOR mode | Program edit attempted online; PLC in MONITOR |
| 03 | UM (program memory) write-protected | DIP switch SW1 = ON on CPM2A; UM Protect bit in PLC Setup |
| 04 | Address over area | DM address exceeds area (e.g. DM 9999 on a 20-point CPM2A) |
| 0B | Not executable in PROGRAM mode | Data trace started while in PROGRAM |
| 13 | FCS error | Baud rate mismatch, EMI on long cable, SG not connected on pin 9 |
| 14 | Format error | Wrong number of characters, lowercase sent (Host Link is uppercase only) |
| 15 | Entry number data error | BCD conversion failure (e.g. count "0A" instead of "10") |
| 16 | Command not supported | Wrong CPU family selected in CX-Programmer project |
| 18 | Frame length error | More than 280 chars in a single command (max for Host Link) |
| 19 | Not executable (e.g. EM not installed) | Accessing expansion memory on a CPU without the EM area |
9. Toolbus Frame Example (Read 100 words from DM0000)
Toolbus frames are binary and use a 4-byte header: [0xCF] [length] [command] [sub-command] [data...] [CRC-16 lo] [CRC-16 hi]. The response mirrors the request with a status byte (00 = OK, 0x0B = address over range, 0x0F = FCS error). Toolbus auto-negotiates baud rate and parity on the very first frame, which is why the PC can usually talk to a CPM2A peripheral port without knowing what the DIP switches are set to — the negotiation sequence begins at 9 600 / 7-E-2 by default and steps up to 115 200 if both sides support it.
10. Troubleshooting Matrix
| Symptom | CX-Programmer error / behavior | Likely root cause | Fix |
|---|---|---|---|
| "Could not connect to PLC" after 30 s | Dialog "The PLC is not responding. Check the cable and the COM port." | SG not on pin 9; cable is a straight-through DB-9 extension, not the Omron crossover | Use a known-good Omron XW2Z-200S-CV or build the 2-3-9 crossover per Section 5.1 |
| Connection succeeds, upload fails at 5 % | 0x0F FCS error every few hundred bytes | USB-Serial converter latency too high (FTDI default 16 ms) | Set latency timer to 1 ms; replace CH340 with FTDI or OMRON CS1W-CIF31 |
| Auto Online finds 0 PLCs across all COM ports | No response, no timeout | COM port already held open by RSLinx, HyperTerminal, or another CX-Programmer instance | Close RSLinx; check netstat -ano | findstr :9600 if using a virtual COM port; kill the offending PID |
| Connects at 9 600, but driver shows "Unknown CPU type" | Online tree shows "???" | Wrong Device Type in the offline project; CX-Programmer was started with a CP1L project against a CPM2A CPU | Change PLC → Device Type → CPM2A; or Auto Online with Detect Automatically enabled |
| Read OK, write fails with end code 03 | UM Protect error | DIP switch SW1 on CPM2A is ON, or PLC Setup UM Protect bit is set | Switch SW1 OFF; in PLC Setup clear "UM Read Protection" and "UM Write Protection"; cycle power |
| Toolbus driver connects, SysmacWay driver does not | Auto Online only finds the peripheral port | PLC Setup port mode is set to "Peripheral" (0xC0) for that DB-9 port; SysmacWay is Host Link (0x80) | Set DM6645 (CPM2A) or PLC Setup word 144 (CP1L) to 0x80 |
| Error "The connected CPU is different from the project" | Refuse to go Online | Programmer opened a CPM2A-30CDR project, found a CPM2A-20CDR on the cable | Re-create the project at the correct I/O count, or select "Connect with current project anyway" |
| Communication drops every 2-3 minutes | CX-Programmer shows "Disconnected" periodically | Windows power management turning off the USB controller | Device Manager → USB Root Hub → Power Management → uncheck "Allow the computer to turn off this device" |
| Garbled text on HMI screen | CTO/CTW commands return wrong characters | Data bits set to 8 on the PC, 7 on the PLC (or vice versa) | Set PC and PLC both to 7-E-2 for Host Link; or both to 8-N-1 for non-standard mode |
11. Verification Procedure
- Power up the PLC and observe the PWR and RUN LEDs. Solid green on PWR, flashing green on RUN = CPU is healthy. Solid red on ERR/ALM = fault that will not affect serial comms but will block program upload.
- From a terminal emulator (Tera Term 4.x recommended over PuTTY for COM port support), open the COM port assigned to the USB-Serial converter at 9 600 / 7-E-2 / No flow control.
- Type
@00RD0000000005followed by Enter. A working Host Link connection returns@00RD00FA...with 10 hex characters (5 words × 2 hex chars per word). A broken connection returns nothing, returns the same string echoed, or returns?characters. - In CX-Programmer, go to Online → Auto Online → Direct Online. The "Searching..." dialog should report "1 PLC found" within 5-10 seconds. Confirm the detected CPU type matches the actual label on the front of the unit.
- Transfer the program to disk: File → Save As with the project name matching the physical asset tag. Compare the saved project against the most recent backup on the plant historian.
12. Frequently Asked Questions
What is the difference between SysmacWay and Toolbus on an Omron CPM2A?
SysmacWay is the ASCII text implementation of Omron's older Host Link C-mode protocol, used by HMIs and SCADA for register polling. Toolbus is the binary equivalent used by CX-Programmer for project upload, online editing, and memory-card transfer. Both share the same 9 600 bps / 7-E-2 default and can coexist on the same physical peripheral port; CX-Programmer auto-detects which one is active.
Can I use a generic USB-Serial cable to connect a CP1L to CX-Programmer?
Yes, but with caveats. Use an Omron CS1W-CIF31 or an FTDI-based adapter; set the latency timer to 1 ms. Avoid CH340/HL-340/PL2303 clones for Toolbus sessions above 19 200 bps. Lock the baud rate to 9 600 in the driver and avoid Auto-detect if you must use a clone.
Why does CX-Programmer show "Connected" and then "0x00F1 Timeout" within a second?
Most often because the baud rate, data bits, or parity on the PC does not match the PLC. Re-confirm both sides are 9 600 / 7-E-2 and that the PLC Setup has been power-cycled into the new value. A missing pin-9 signal ground is the second most common cause.
What cable do I need between a PC DB-9 and a CPM2A DB-9?
A 2-3 crossover with signal ground on pin 9 of the PLC side. Omron sells this as XW2Z-200S-CV (2 m) or XW2Z-500S-CV (5 m). For the 4-pin mini-DIN peripheral port on 20-point CPM2A units, use CPM2C-CN111 with a separate USB-Serial converter.
Can two tools talk to the same PLC at the same time on the same port?
No. Host Link and Toolbus are point-to-point master-slave protocols; a second master will cause FCS errors on both sessions. Use a CP1W-CIF01 on a second option-board slot to attach the HMI while CX-Programmer occupies the built-in USB or first option-board port.