Overview: CJ1M Serial Communication Architecture
The Omron CJ1M series PLC exposes three primary serial-protocol paths for external device integration: Host Link (C-mode), FINS, and Modbus (RTU/ASCII). Each protocol targets a different system topology, addressing model, and integration effort. Selection depends on whether the upstream system is an Omron-native HMI/SCADA, a generic SCADA package, or a custom PC application writing to a virtual COM port.
Per the official CJ1M CPU Units specification page, the CJ1M-CPU11/12/13/21/22/23 family integrates a peripheral RS-232C port on the CPU module for Host Link or FINS traffic. Modbus RTU/ASCII requires an additional CJ1W-SCU Serial Communications Unit on the backplane — the CPU’s built-in peripheral port does not implement Modbus framing. The CJ1M also supports up to 20 I/O units total — 10 on the CPU rack and 10 on a single CJ1W-IC101 expansion rack.
The CJ1M-CPU2x datasheet confirms the CPU2x variant integrates high-speed I/O (two 100 kHz pulse outputs and high-speed counters) without altering serial port capability. CPU1x and CPU2x variants share identical RS-232C behavior on the peripheral port.
Protocol Comparison: Host Link vs FINS vs Modbus
| Attribute | Host Link (C-mode) | FINS over Host Link | Modbus RTU/ASCII |
|---|---|---|---|
| Hardware | Built-in CPU peripheral port | Built-in CPU peripheral port | CJ1W-SCU21/31/41 required |
| Transport framing | ASCII, terminated with *<CR>
|
ASCII Host Link envelope wrapping FINS payload | RTU binary or ASCII per spec |
| Max data per packet | Limited (typically ≤ 30 words) | Larger FINS payload (up to ~500 words per request) | Up to 125 registers (FC03) |
| Write requirement | PLC must be in MONITOR mode | Service ID required, MONITOR recommended | Function-code dependent |
| Cross-platform ease | Low (Omron-specific ASCII framing) | Moderate (Omron-specific command codes) | High (open standard, ubiquitous libraries) |
| Direct I/O access | Yes (CIO, IR area) | Yes (any FINS-supported area) | No — DM/HR mapping only |
| Configuration tool | CX-One / CX-Programmer | CX-One / CX-Programmer | CX-Protocol or ladder PMCR |
| Recommended for | Legacy Omron HMIs | Multi-protocol Omron networks | Open-source SCADA packages |
Hardware Requirements and Cable Specifications
The CJ1M CPU peripheral port is a 9-pin D-sub male RS-232C connector located on the front face of the CPU module. For a direct PC connection, a crossover (null-modem) cable is required. For long runs or noise-prone environments, an RS-422A/485 link through a CJ1W-SCU31/SCU41 module is preferred.
| Pin | Signal | Direction (PLC side) | DB-9 (PC side) |
|---|---|---|---|
| 2 | RD (Received Data) | Output | 3 |
| 3 | SD (Sent Data) | Input | 2 |
| 4 | ER (Enable to Receive / RTS) | Output | 8 |
| 5 | SG (Signal Ground) | — | 5 |
| 1, 6, 7, 9 | Not connected | — | — |
For multi-drop Host Link or FINS networks, RS-422A/485 via a CJ1W-SCU31 or SCU41 unit provides multi-drop capability with up to 32 nodes per port, addressing each CPU by its unit number (00–31).
Host Link (C-mode) Technical Details
Host Link frames use ASCII characters. The frame structure is:
@<HH><NN><BB><payload><FCS>*<CR>
Where:
-
@— Start character -
HH— Header (two ASCII hex characters; identifies message destination on multi-drop networks) -
NN— Node number (00–31 in ASCII hex;00= broadcast for commands that allow it) -
BB— Command code (e.g.,RR,WR,RD,WD,SC) -
payload— Command-specific parameters (area code, address, word count, data) -
FCS— Frame Check Sequence (two ASCII hex chars; XOR of all preceding bytes after@) -
*<CR>— Terminator
The FCS algorithm is an 8-bit XOR of every byte between (and including) @ up to the last byte before FCS. The result is converted to two ASCII hex characters, with the most significant nibble transmitted first.
Common Host Link Commands for CJ1M
| Command | Function | Operational Notes |
|---|---|---|
| RR | CIO / IR area word read | Direct I/O monitoring, allowed in any mode |
| WR | CIO / IR area word write | Requires MONITOR mode |
| RD | DM area word read | Allowed in any mode |
| WD | DM area word write | Requires MONITOR mode |
| RH | HR area word read | Holding relay area |
| WH | HR area word write | Requires MONITOR mode |
| R@ | Forced bit set/reset read | Status of forced I/O |
| SC | Status change | Switch PROGRAM / MONITOR / RUN |
| MM | Read TC PV | Timer/counter current value |
| KS | Force set / reset bit | Force I/O bit; MONITOR required |
| Compound register read | Multiple areas in one request | |
| XG | Error log read | Diagnostic data |
Operational Gate: MONITOR Mode Required for Writes
WR, WD, WH, KS) are only permitted when the CPU is in MONITOR mode. In PROGRAM mode, writes are blocked except by CX-Programmer offline editing. In RUN mode, only certain DM and HR writes are allowed by FINS — Host Link writes still require MONITOR. This restriction is a Host Link safety feature; it must be designed around when integrating open-source SCADA packages that attempt direct bit-level writes.To query the current CPU mode, issue:
@00SC02<FCS>*<CR> -- Request status (returns RUN / MONITOR / PROGRAM + error flags)
@00SC03<FCS>*<CR> -- Switch to MONITOR mode
@00SC04<FCS>*<CR> -- Switch to RUN mode (ladder executes; Host Link writes still blocked)
@00SC05<FCS>*<CR> -- Switch to PROGRAM mode (stops ladder execution)
FINS Protocol Technical Details
FINS (Factory Interface Network Service) is Omron's unified network messaging protocol. The Omron W342 Communication Commands Reference Manual documents FINS message transport over Host Link, SYSMAC NET, SYSMAC LINK, and Ethernet (FINS/UDP, FINS/TCP). When carried over the CJ1M peripheral RS-232C port, FINS frames are wrapped inside a Host Link envelope, with the FINS command embedded as the Host Link payload.
A FINS command frame structure (after the Host Link envelope is stripped):
FINS header (10 bytes):
ICF (1) - Information Control Field (response required, etc.)
RSV (1) - Reserved (always 0x00)
GCT (1) - Permissible number of gateways (0x02 typical)
DNA (1) - Destination network address
DA1 (1) - Destination node number
DA2 (1) - Destination unit address (0x00 for CPU)
SNA (1) - Source network address
SA1 (1) - Source node number
SA2 (1) - Source unit address
SID (1) - Service ID (transaction ID, 0x00–0xFF)
Command code (2 bytes) - e.g., 0x0101 = memory area read, 0x0102 = memory area write
Parameters - command-specific
Key FINS Commands for CJ1M
| Command | Code (hex) | Function |
|---|---|---|
| Memory Area Read | 0101 | Read words from any memory area |
| Memory Area Write | 0102 | Write words to any memory area |
| Memory Area Fill | 0103 | Fill area with constant |
| Multiple Memory Area Read | 0104 | Batch read non-contiguous areas |
| Run | 0401 | Switch CPU to RUN or MONITOR |
| Stop | 0402 | Switch CPU to PROGRAM |
| CPU Unit Data Read | 0501 | Read CPU status, mode, error info |
| Error Log Read | 2101 | Retrieve non-fatal error history |
| Error Log Clear | 2102 | Clear error history |
FINS Memory Area Codes
| FINS Area Code | CJ1M Memory Area | Address Range |
|---|---|---|
| 00 | CIO (Core I/O + IR + I/O) | 0000–6143 |
| 01 | Work Relay (WR) | W000–W511 |
| 02 | Holding Relay (HR) | H000–H511 |
| 03 | Auxiliary Relay (AR) | A000–A959 |
| 04 | Data Memory (DM) | D00000–D32767 |
| 05 | Extended Memory Bank 0 (EM) | E0_00000–E0_32767 |
| 06 | Extended Memory Bank 1–6 (EM) | E1_00000–E6_32767 |
| 08 | Counter PV (C) | C0000–C4095 |
| 09 | Timer PV (T) | T0000–T4095 |
| 0C | Index Register (IR) | IR0–IR15 |
| 0D | Data Register (DR) | DR0–DR15 |
FINS over Host Link Advantages
- Larger data payload per transaction reduces serial overhead.
- Uniform memory area addressing via FINS area codes (above).
- Service ID byte enables multiplexing multiple masters on the same network without collision.
- Identical command set across Ethernet (FINS/UDP, FINS/TCP) and serial — the same PC code base works on both transports.
- Cleaner error reporting through FINS response codes (0x00 = success, 0x10–0x1F = format errors, 0x20–0x2F = command-specific errors).
Modbus Protocol Implementation on CJ1M
The CJ1M base unit does not implement Modbus on the peripheral serial port. Modbus RTU or ASCII integration requires:
- CJ1W-SCU21 — RS-232C, 2 ports
- CJ1W-SCU31 — RS-422A/485, 2 ports
- CJ1W-SCU41 — RS-232C + RS-422A/485 combination
Modbus-RTU Configuration Using CX-Protocol
- Add the SCU module to the I/O table in CX-Programmer (slot 01+).
- Open CX-Protocol; create a new protocol macro project for the SCU port.
- Define Modbus RTU master sequences. For a read of 10 holding registers starting at address 0:
01 03 00 00 00 0A C5 CD(slave ID, FC03, start, count, CRC-16). - Allocate DM words for the receive buffer (e.g., D0200–D0299 for register values).
- Use the SCU's
RXDU(receive complete) andTXDUflags in ladder logic to trigger processing.
Modbus Function Code Mapping on CJ1M
| Function Code | Name | CJ1M Memory Access |
|---|---|---|
| 01 | Read Coils | Not directly accessible (mirror to DM) |
| 02 | Read Discrete Inputs | Not directly accessible (mirror to DM) |
| 03 | Read Holding Registers | DM area (D00000–D32767) |
| 04 | Read Input Registers | DM area (read-only mapping) |
| 05 | Write Single Coil | Bit-level DM access |
| 06 | Write Single Register | DM word write |
| 15 (0F) | Write Multiple Coils | Bit-level DM access |
| 16 (10) | Write Multiple Registers | DM block write |
Memory Area Mapping Reference
| CJ1M Area | Address Range | FINS Code | Modbus Equivalent |
|---|---|---|---|
| CIO (Inputs) | 0.00–0.11 (IN area) | 00 | Not directly accessible |
| CIO (Outputs) | 100.00–100.07 | 00 | Not directly accessible |
| Work Relay (WR) | W000–W511 | 01 | Mirror to DM |
| Holding Relay (HR) | H000–H511 | 02 | Mirror to DM |
| Auxiliary Relay (AR) | A000–A959 | 03 | Mirror to DM |
| Data Memory (DM) | D00000–D32767 | 04 | Holding Registers 4xxxx |
| Extended Memory (EM) | E0_00000–E6_32767 | 05 / 06 | Holding Registers 4xxxx (banked) |
| Timer PV | T0000–T4095 | 09 | Not accessible |
| Counter PV | C0000–C4095 | 08 | Not accessible |
CX-One Configuration Procedure
To configure the CJ1M peripheral port for Host Link or FINS over Host Link:
- Connect the PC to the CJ1M peripheral port using the null-modem cable.
- Launch CX-Programmer; establish an online connection (auto-detect on first run; default baud is 9600 with auto-baud negotiation).
- Open the PLC menu → Edit → I/O Table to verify the rack layout and confirm the CPU module.
- Double-click the Peripheral Port icon in the I/O table (slot 00).
- In the Peripheral Port Settings dialog:
- Custom: Enable
- Mode: Host Link
- Baud: 9600, 19200, 38400, 57600, or 115200
- Data bits: 7 (Host Link standard) or 8 (FINS extended)
- Stop bits: 2
- Parity: Even
- Unit number: 00 (default for single-node)
- Click Transfer → To PLC to download the new parameters.
- Cycle power to the CPU (recommended — not strictly required on CJ1M but eliminates residual auto-baud state).
For FINS over Host Link, the same peripheral port configuration applies. The difference is on the PC side: the application wraps FINS commands inside Host Link envelopes. CX-Programmer and CX-Server runtime translate internal FINS calls automatically.
SCADA Integration Patterns
Open-source SCADA packages (OpenSCADA, ScadaBR, FUXA, Node-RED with Modbus nodes) typically support Modbus natively. For a CJ1M-only system without an SCU module, three practical paths exist:
Path A — Direct Modbus via SCU (Recommended for Open-Source SCADA)
Add a CJ1W-SCU21 to the rack, configure Modbus RTU master or slave sequences using CX-Protocol, and connect to the SCADA's Modbus driver. Mirror logic in the ladder program keeps DM synchronized with CIO, WR, and HR for full SCADA visibility.
Path B — Host Link with Serial-to-IP Converter + Custom Driver
Use a serial-to-IP converter (e.g., Moxa NPort) on the CJ1M peripheral port and create a virtual COM port on the SCADA PC. The SCADA must implement Host Link framing manually, or use an Omron-specific driver (limited in open-source ecosystems). Real-world performance is constrained by the per-packet write limit (~30 words) and the MONITOR-mode requirement.
Path C — FINS/UDP via ETN Module
For Ethernet-connected SCADA, a CJ1W-ETN21 module allows FINS/UDP messaging. The same FINS command set works across Ethernet and serial, so PC-side code is portable without rewriting for the transport layer.
Ladder Logic Mirror Example (CIO → DM)
-- Ladder snippet to mirror CIO 0.00–0.15 to D00100
-- Run on every scan; low overhead.
LD P_On
MOV CIO0 D100 -- Copy first CIO word (16 bits) to DM D00100
-- To make these bits Modbus-readable, the SCADA polls
-- FC03 against address 100 (mapping to D00100). Each DM
-- bit address maps as: holding_register = 4 * (DM_offset + 1) + (bit_offset / 16)
Troubleshooting Matrix
| Symptom | Probable Cause | Diagnostic | Resolution |
|---|---|---|---|
| No response to Host Link commands | PLC in PROGRAM mode blocking writes | Issue SC 02 to query status |
Use SC 03 to set MONITOR mode |
| FCS error on every frame | XOR checksum mismatch | Compute FCS manually from payload bytes | Recompute FCS over all bytes between @ and FCS |
| Modbus commands fail silently | No SCU module present | Check I/O table; CPU port supports Host Link / FINS only | Add CJ1W-SCU21 and configure with CX-Protocol |
| SCADA reads return zero on CIO area | Modbus cannot read CIO directly | Verify FC03 register address | Mirror CIO data to DM via ladder |
| Connection drops intermittently | Wrong cable or handshake mismatch | Check ER / RTS loopback | Verify null-modem wiring; disable hardware flow control |
| Byte-swapped register values | Endian mismatch (Omron = MSB-first word) | Inspect raw word response | Swap byte pairs in SCADA tag mapping |
| Auto-baud fails on first connect | CX-Programmer set to fixed baud | Cycle PLC power; attempt 9600 7E2 default | Reset peripheral port to default via PLC DIP switch or CX-Programmer |
| Host Link timeout (3 s) | RTS/CTS not looped on PC side | Check ER signal with scope | Loop pins 4–5 on PC DB-9 connector |
| CPU ERR/ALM LED on after SCADA write | Non-existent memory address written | Read error log via FINS 0x2101 or Host Link XG
|
Correct DM / CIO offset in SCADA tag |
| FINS command returns 0x0205 error | Destination node number mismatch | Verify DA1 = CPU unit number | Set DA1 to the CJ1M unit number (00 default) |
Verification Checklist
- Peripheral port LEDs (RD/SD) blink during active transactions.
- CX-Programmer online connection succeeds at the configured baud rate.
- A test Host Link
RR 00 00 01returns the expected CIO word (e.g., input status of slot 0). - A test
WRcommand succeeds only in MONITOR mode and fails in PROGRAM mode (confirming the safety gate). - For Modbus: a
01 03 00 00 00 01request returns the expected D00000 value with valid CRC-16. - For FINS: command
01 01reads the configured DM range and returnsICF=0x40in the response. - Watchdog / cycle time in CX-Programmer's Task Monitor shows no abnormal increase after SCADA polling begins.
- No CPU ERR/ALM LED activity over a 10-minute SCADA polling soak test.
Reference Documentation
The definitive reference for Host Link, FINS, and SCU protocol macros is the Omron W342 Communication Commands Reference Manual. Verify against the latest edition available through the official Omron Industrial Automation portal. Cross-reference CJ1M hardware and I/O limits using the official CJ1M CPU Units specification page and the CJ1M-CPU2x datasheet.
FAQ
Does the CJ1M base unit support Modbus without an SCU module?
No. The CJ1M peripheral port supports Host Link and FINS only. Modbus RTU/ASCII requires a CJ1W-SCU21 (RS-232C), CJ1W-SCU31 (RS-422A/485), or CJ1W-SCU41 (combination) module, configured via CX-Protocol protocol macros or ladder PMCR sequences.
Why do Host Link writes fail even when the cable and baud rate are correct?
The PLC must be in MONITOR mode (not PROGRAM or RUN) for write commands (WR, WD, WH, KS) to succeed. Use the SC command with sub-command 03 to switch from PROGRAM to MONITOR, or change mode via CX-Programmer's PLC menu.
Can FINS commands be sent over Host Link?
Yes. Per the W342 Communication Commands Reference Manual, FINS messages can be transported over Host Link, SYSMAC NET, and SYSMAC LINK. On a CJ1M, FINS over Host Link uses the built-in peripheral RS-232C port without additional hardware while preserving the larger FINS payload size and uniform memory area addressing.
What is the maximum baud rate for CJ1M serial communications?
The CJ1M peripheral port supports up to 115200 bps in standard Host Link mode. Practical stability above 38400 bps requires short, well-shielded cables; runs longer than 15 m should remain at 19200 bps or lower for noise immunity. RS-422A/485 via SCU modules improves noise tolerance at distance.
Do I need CX-One to set up serial communications on a CJ1M?
Yes, for configuration. CX-Programmer (part of CX-One) is required to set the peripheral port mode, baud rate, frame format, and unit number. The PLC will not respond to Host Link commands until these parameters are written via CX-Programmer and the port is initialized.
How do I expose CIO physical I/O to a Modbus SCADA package?
Use ladder logic to copy the CIO word(s) into DM words, then have the SCADA poll FC03 against the corresponding DM register address. For example, MOV CIO0 D00100 on each scan exposes inputs 0.00–0.15 as Modbus holding register 100.