Configuring CJ1M Serial Communications: Hostlink, FINS, Modbus

James Nishida14 min read
CJ/CP SeriesOmronTechnical 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

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
Wiring caution: Pins 4 and 5 must be looped on the PC side if hardware flow control is disabled in CX-Programmer. Failure to loop RTS/CTS causes the PLC to hang transmission until the timeout expires (typically 3 s).

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
QQ Compound register read Multiple areas in one request
XG Error log read Diagnostic data

Operational Gate: MONITOR Mode Required for Writes

Critical rule: Write operations (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

  1. Add the SCU module to the I/O table in CX-Programmer (slot 01+).
  2. Open CX-Protocol; create a new protocol macro project for the SCU port.
  3. 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).
  4. Allocate DM words for the receive buffer (e.g., D0200–D0299 for register values).
  5. Use the SCU's RXDU (receive complete) and TXDU flags 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
Modbus pitfall: Modbus FC03 / FC06 / FC16 map to the CJ1M DM area only. CIO (I/O), Work Relays, Holding Relays, and Auxiliary Relays are not directly accessible through standard Modbus function codes. They must first be mirrored into DM using ladder logic. This is a common source of confusion when open-source SCADA packages expect to read CJ1M physical I/O over Modbus and return zeros.

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:

  1. Connect the PC to the CJ1M peripheral port using the null-modem cable.
  2. Launch CX-Programmer; establish an online connection (auto-detect on first run; default baud is 9600 with auto-baud negotiation).
  3. Open the PLC menu → EditI/O Table to verify the rack layout and confirm the CPU module.
  4. Double-click the Peripheral Port icon in the I/O table (slot 00).
  5. 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)
  6. Click TransferTo PLC to download the new parameters.
  7. 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.

Note: The CJ1M-CPU1x (no built-in I/O) and CJ1M-CPU2x (with built-in I/O) share identical serial port behavior. The CPU2x variant adds two 100 kHz pulse outputs and additional high-speed counters but does not change peripheral port capabilities.

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 01 returns the expected CIO word (e.g., input status of slot 0).
  • A test WR command succeeds only in MONITOR mode and fails in PROGRAM mode (confirming the safety gate).
  • For Modbus: a 01 03 00 00 00 01 request returns the expected D00000 value with valid CRC-16.
  • For FINS: command 01 01 reads the configured DM range and returns ICF=0x40 in 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.

Back to blog