Omron PLC Serial Communication: SysmacWay and Toolbus Protocol

James Nishida13 min read
OmronSerial CommunicationTechnical Reference
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

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,2 standard; 7,N,2 only 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:

  1. 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-port INF from CX-One DVD 4.x.
  2. 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.
  3. 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 WAY rather than Auto-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
Critical: The PLC Setup must be written to the CPU and the CPU power-cycled once for serial-parameter changes to take effect. A simple online edit will not flip the UART into the new baud rate. CX-Programmer will display "Connected" briefly and then report 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

  1. 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.
  2. 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.
  3. Type @00RD0000000005 followed 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.
  4. 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.
  5. 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.

Back to blog