Omron CJ2M RS-485 Modbus-RTU Slave Configuration Guide

James Nishida20 min read
ModbusOmronTutorial / 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

The CJ2M programmable controller is most often commissioned over FINS because Sysmac Studio and CX-Programmer expose FINS commands natively over the on-board EtherNet/IP and serial channels. Yet in IIoT gateways, multi-vendor SCADA integrations, and lean edge pipelines running on industrial PCs, RS-485 Modbus-RTU remains the field-level lingua franca. This reference documents the complete engineering chain to configure an Omron CJ2M as a Modbus-RTU slave on RS-485—option-board DIP switch selection, trunk wiring topology, PLC Setup parameters, the CJ2M-to-Modbus memory map, frame structure with CRC-16 validation, and the diagnostic steps required to bring up a non-FINS serial-request/buffer-parser flow (Node-RED, generic C#, or Python) against the option-board port.

1. Overview: Why Use RS-485 Modbus-RTU on CJ2M Instead of FINS

FINS (Factory Interface Network Service) is Omron's native application-layer protocol. It carries commands over Ethernet (UDP), TCP, and over the CJ2M serial channel as Host Link. FINS is convenient in pure-Omron architecture but presents four practical friction points that drive engineers toward a Modbus-only fieldbus:

  • Vendor lock-in: SCADA supervisory layers (Ignition, WinCC, AVEVA, FactoryTalk View) accept FINS through dedicated plug-ins, but the OPC-UA/MQTT bridges aggregating data from cell controllers typically speak Modbus or OPC-UA only. Presenting Modbus from the PLC keeps the upstream stack generic.
  • FINS/TCP session state: FINS/TCP requires a session handshake (server/client SEND header RR/SR command pairs) plus periodic keep-alive. On resource-constrained edge gateways, partial packets, queueing delays, and silent retries produce slow tag updates. A polled Modbus master eliminates that session code path entirely.
  • Deterministic slave behaviour: Modbus-RTU defines a deterministic slave-side response window, with exception codes (0x01–0x04) that simplify offline detection in the master.
  • Embedded gateways: SBC-class Linux nodes with Node-RED or Python flows rarely include a FINS implementation. The same flow already ships with a Modbus input that maps straight onto the CJ2M slave.

The trade-off is two-fold. First, tag access becomes numeric—no symbolic FINS A/B/W/D prefixes, only register addresses. Second, the master owns frame integrity: CRC-16 validation, inter-frame timing, and turn-around handling. This document covers the entire configuration chain and the diagnostic steps that resolve the “buffer parser is also showing an error” symptom routinely encountered when a serial-request flow is wired directly to the CPU's serial port.

2. Hardware Prerequisites and Part Selection

Item Catalog / Part Number Purpose
CPU Unit (EtherNet/IP model) CJ2M-CPU31 / CPU32 / CPU33 / CPU34 / CPU35 Built-in EtherNet/IP and one option-board slot for RS-232C/485
CPU Unit (no EtherNet/IP) CJ2M-CPU11 / CPU12 / CPU13 / CPU14 / CPU15 Lower-cost version; one option-board slot
RS-422A / RS-485 Option Board CP1W-CIF12 Switchable between RS-422A (4-wire) and RS-485 (2-wire) via DIP
RS-232C Option Board (alternate) CP1W-CIF11 Use when host is a single drop within 15 m
RS-422A / RS-485 Option Board (legacy) CP1W-CIF01 Predecessor of CIF12; functionally similar but older DIP labelling
Termination Resistors 120 Ω ±5%, 0.5 W minimum One at each physical end of the RS-485 trunk (only)
Cable Belden 3106A or equivalent Shielded twisted pair, 100–120 Ω characteristic impedance
DC Power Supply CJ1W-PA202 / CJ1W-PA205 Capacity rated for CPU at 0.31 A + I/O

Refer to the Omron industrial automation product catalogue and the CJ2M CPU Unit Hardware Reference Manual for absolute current consumption, surge rating, and operating temperature. The CJ2M module takes approximately 0.31 A at 24 VDC with the CIF12 option board installed. The CPU must be cold-started with the option board seated before PLC Setup takes effect on the option-board port.

Slot occupancy rule: On the CJ2M-CPU31/32, the on-board RS-232C port acts as port 1 (peripheral/Host Link). The single option-board slot becomes port 2. A bare slot leaves port 2 inactive.

3. CJ2M Option Board DIP Switch Configuration (CP1W-CIF12)

The CP1W-CIF12 carries a four-position DIP switch on the top of the PCB. Switches are read only at power-up; after changing any switch, cycle CPU power or issue PLC > Restart from CX-Programmer for the change to take effect. Default is RS-422A 4-wire with no termination. The table below reflects the labelling of the latest CIF12 revision.

Switch Position Function
SW1 OFF RS-422A mode (4-wire, full duplex)
ON RS-485 mode (2-wire, half duplex — required for Modbus-RTU)
SW2 OFF RS-422A 120 Ω built-in termination — disabled
ON RS-422A 120 Ω termination — enabled (only at trunk ends)
SW3 OFF RS-485 120 Ω built-in termination — disabled
ON RS-485 120 Ω termination — enabled (only at trunk ends)
SW4 OFF Standard RS-485 driver output
ON RS-485 mode without hardware handshaking (preferred for Modbus-RTU)

For 2-wire RS-485 Modbus-RTU, set SW1=ON, SW4=ON, and SW3=ON only at the two physical ends of the trunk. The CIF12 contains an internal 2-wire/4-wire bridge link that ties the SDA± differential pair to the RDA± differential pair internally when SW1=ON. Do not wire both pairs simultaneously when SW1=ON, as this creates an out-of-spec short inside the option board.

Verify against the manual: Earlier revisions of the CIF12 labelled SW2 and SW3 differently. Always reconfirm against the schematic in the current CP1W-CIF12 Operation Manual before commissioning the trunk.

4. RS-485 Wiring Topology and Termination

RS-485 Trunk — CJ2M Modbus-RTU Multi-Drop Master PC / SCADA 120Ω EN Slave #1 CJ2M-CPU31 CIF12 / ID 01 Slave #2 VFD / Inverter 120 Ω Shield, ground at one end only

A Modbus-RTU multi-drop trunk is a single physical cable that connects every node in series. Tapped (star) connections are forbidden on RS-485 because reflections cause collisions; cable stubs must stay shorter than 1 m, which is automatic for typical 8-node trunks. The shield drains to the panel protective earth (PE) at exactly one point—usually the master cabinet—to prevent ground loops that modulate the common-mode voltage on A/B.

The maximum trunk length depends on baud rate per the TIA-485 reference curve:

Baud Rate Maximum Trunk Length (24 AWG, 100 Ω)
9600 1200 m (3937 ft)
19200 1000 m (3280 ft)
38400 800 m (2625 ft)
57600 500 m (1640 ft)
115200 250 m (820 ft)

These are conservative engineering numbers; field conditions often reduce the practical maximum by 30–50% due to common-mode noise coupling.

5. PLC Setup: Enabling Modbus-RTU Slave Mode

In CX-Programmer (or Sysmac Studio with the CJ2M plug-in), navigate to PLC > Settings > Serial Port 2 (Option). For a CJ2M-CPU3x with the CP1W-CIF12 option board fitted to the option slot, port 2 corresponds to the option board. The default protocol after a fresh installation is Host Link (FINS) on port 2; the engineer must change it to Modbus-RTU Slave through the Serial Port 2 parameters.

Parameter Default Required for Modbus-RTU Slave
Mode (Serial Port 2) Host Link Modbus-RTU Slave
Data Bits / Parity / Stop 7 / Even / 2 8 / None / 1 (Modbus-RTU standard) — or 8 / Even / 1 for legacy hosts
Baud Rate 9600 9600 / 19200 / 38400 / 57600 / 115200 (match master)
Unit Number 00 01–F7 (1–247 decimal; used as Modbus slave address)
Send Delay 0 ms 0–3000 ms (inter-frame silence extension for legacy masters)
Termination (built-in) OFF ON only when port 2 is at a physical trunk end
Response Timeout auto Typically default; bound by master inter-frame

After transferring setup, cycle power on the CPU to commit the protocol change. Modbus-RTU Slave is a low-level firmware mode implemented by the CIF option board; the ladder application does not require explicit configuration blocks or device allocation instructions. The CPU simply exposes its memory areas at fixed register offsets, which is the key point of the next section.

6. Modbus-RTU Address to CJ2M Memory Map

With Modbus-RTU Slave mode active, the CPU answers requests against a fixed memory map. The exact boundaries depend on CPU model; the table below summarises the default mapping for a CJ2M-CPU3x with a 32 k-step program area.

Modbus Address Range CJ2M Memory Region Access
00001–08192 (coils) CIO 0.00 – CIO 511.15 Read/Write bits
10001–18192 (discrete inputs) CIO 0.00 – CIO 511.15 Read-only mirror (typically unused on CJ2M)
30001–30512 (input registers) CIO 0 – CIO 511 (word) Read-only word values
40001–43267 (holding registers) D0 – D32767 Read/Write words — primary data channel
60001–69999 (file records) EM bank (extended DM) Optional; confirm in CX-Programmer parameter table

Mapping is 1:1 offset-by-offset. Modbus register 40001 corresponds to D0, 40002 to D1, and so on. A request that starts at 40005 with quantity 10 reads D4–D13. Function codes supported by the CJ2M Modbus-RTU Slave firmware:

Code (hex) Name Action
0x01 Read Coils 1–2000 CIO bits
0x02 Read Discrete Inputs 1–2000 CIO bits (mirrored)
0x03 Read Holding Registers 1–125 DM words (40001+)
0x04 Read Input Registers 1–125 CIO words (30001+)
0x05 Write Single Coil Force single bit in CIO area
0x06 Write Single Register Write single DM word
0x0F Write Multiple Coils Force 1–1968 bits in CIO
0x10 Write Multiple Registers Write 1–123 DM words

Modbus writes go directly into the DM area. No ladder allocation is required to expose DM, but the engineer typically writes a small routine to copy CIO inputs and arithmetic results into DM so they appear at the configured holding register addresses. A minimal latching block follows.

/* CJ2M ladder — populate DM for Modbus holding registers */
[Every 100ms via TMR block]
  LD   T100                // 100 ms heartbeat
  MOV(021) CIO 100  D100   // 1st 100 IO words to D100-D199 (modbus 40101-40299)

[Counter update]
  LD   P_1s
  @INC(021) D0200          // Modbus register 40201 increment per second

[Cross-area copy]
  XFER(070) 10 CIO 200 D0200  // 10-word block copy

Because the DM area is volatile on a power-down cycle (unless explicitly configured as retained), values that must survive a cold start should either be (a) marked as Retained DM in CX-Programmer IO Setup or (b) copied to the EM bank under power-on sequencing. The Modbus master can then poll from EM using register offsets (capacity permitting) by reconfiguring the Modbus-RTU Slave map—see CX-Programmer parameter table for the EM-attach configuration.

7. Frame Structure, CRC-16, and Inter-Frame Timing

A Modbus-RTU frame in the slave response direction looks like this for a Read Holding Registers request:

Offset Length Field
0 1 Slave Address (1–247, set via PLC Setup Unit Number)
1 1 Function Code (0x03 read, 0x06 write single, 0x10 write multi, …)
2 1 or 2 Starting Address or sub-function code
3 1 or 2 Quantity of Registers or Output Value
n 2 CRC-16 (LSB first, polynomial 0xA001 reflected)
n+2 End-of-frame (3.5 character times silence)

The CRC-16/Modbus polynomial is 0xA001 (reflected representation of 0x8005), with initial value 0xFFFF and the low byte appended first. Most master libraries compute the CRC transparently. If you must validate by hand, the algorithm is:

CRC = 0xFFFF
for byte in frame_without_crc:
    CRC ^= byte
    for _ in range(8):
        if CRC & 1:
            CRC = (CRC >> 1) ^ 0xA001
        else:
            CRC >>= 1
append byte(CRC & 0xFF)         # low byte first
append byte((CRC >> 8) & 0xFF)

Inter-Frame Timing

RTU mode requires a 3.5 character silence to delimit frames. The character time at baud B with 11 bits/char (1 start, 8 data, 1 parity, 1 stop) is:

t_char = 11 / B            # seconds
t_frame_gap = 3.5 * t_char # minimum inter-frame silence
Baud t_char t_frame_gap (3.5 char) Read 10 reg (25 bytes)
9600 1.146 ms 4.01 ms 28.6 ms total
19200 0.573 ms 2.01 ms 14.3 ms
38400 0.286 ms 1.00 ms 7.2 ms
57600 0.191 ms 0.67 ms 4.8 ms
115200 0.0955 ms 0.334 ms 2.4 ms
Modbus-RTU Frame Timing at 9600 8N1 Master Request 8 bytes — ~9 ms ≥ 4 ms 3.5 char silence Slave Response 25 bytes — ~29 ms Timeout? ≥ 50 ms guard Time t_char = 11 / B t_frame_gap = 3.5 × t_char at 9600 baud → 4.01 ms

8. Step-by-Step Integration Procedure

The following procedure moves a CJ2M-CPU31 from factory-default Host Link mode to a verified Modbus-RTU slave on RS-485 with a host running a Python pymodbus or Node-RED modbus-flex-getter master.

  1. Power down the backplane. Fit CP1W-CIF12 to the option slot of the CPU. Verify the option board retainer clicks into place.
  2. Power up. Confirm the POWER and RDY LEDs on the CPU go green within 5 s.
  3. In CX-Programmer connect via USB or Ethernet. Confirm the option board shows in the IO table.
  4. Open PLC > Settings > Serial Port 2 (Option) and set Mode to Modbus-RTU Slave, Unit Number to 01, Data 8 / None / 1, Baud 9600, Send Delay 0 ms (initial value, raised later if the master requires).
  5. Transfer setup to the CPU, then choose PLC > Restart to commit.
  6. Wire the RS-485 trunk: data A from host to data A on the CIF12 terminal block; data B likewise. Tie the shield to panel PE at the master cabinet only.
  7. Set the DIP switches: SW1=ON (RS-485), SW4=ON (no handshaking), SW3=ON at both ends of the trunk.
  8. Load a latching program that copies the first ten CIO words (CIO100–CIO109) into D100–D109.
  9. On the host run a Python loop:
from pymodbus.client import ModbusSerialClient

client = ModbusSerialClient(
    method='rtu', port='/dev/ttyUSB0',
    baudrate=9600, parity='N', stopbits=1, bytesize=8)
client.connect()
result = client.read_holding_registers(address=100, count=10, slave=1)
print(result.registers)
client.close()

A successful register read verifies the CRC, framing, baud rate, and address mapping all in a single pass. If any value is unexpected, drop into the debug sequence below before touching the ladder logic.

9. Debug Node Approach for Serial Request Verification

When the master flow in Node-RED (or a generic serial library) is built from raw serial request + buffer-parser nodes rather than from a pre-built Modbus master, the first debugging step is to confirm exactly what bytes arrive from the CJ2M port. Place a debug node on the output of the serial request node and toggle it to display complete msg object. The output buffer pattern reveals the failure domain:

  • Empty or 1-byte buffer: Request never reached the CPU. Check unit number, baud rate, RS-485 terminators, and cable polarity.
  • FINS 0x40 0x00 prefix: PLC is still in Host Link mode. Revisit the PLC Setup Mode parameter for port 2.
  • Clean 0x01 0x03 ... response of 25–28 bytes: Valid Modbus reply. The buffer-parser schema is the failing block — go to Section 10.
  • Duplicate or echoed bytes: RS-485 turn-around has not settled. Increase Send Delay in PLC Setup to 30 ms; ensure master waits for the full response before transmitting the next request.
  • Truncated buffer: The serial-request node closed its read window before all bytes arrived. Switch from until-idle mode to until-byte-count mode, or insert a node-red-contrib-buffer-parser stream configuration with the known frame length.

The reference CompoWay/F RS-485 connection guide documents the same option board in master mode for E5xC digital temperature controllers and is an authoritative companion if your scope later expands from a single CJ2M Modbus-RTU slave to a CJ2M Modbus-RTU master polling field instruments:

CompoWay/F RS-485 Connection Guide (P704-E5)

10. Buffer Parser Configuration and Typical Errors

The Node-RED buffer-parser node converts a binary buffer into a structured JavaScript object using a schema array. A representative Modbus response schema for a 4-register Read Holding Registers request (read in Node-RED as readHoldingRegisters via the modbus-flex-getter or hand-rolled equivalent):

[
    {"name":"unit",   "length":1, "offset":0, "dataType":"uint8"},
    {"name":"fc",     "length":1, "offset":1, "dataType":"uint8"},
    {"name":"bytes",  "length":1, "offset":2, "dataType":"uint8"},
    {"name":"d0",     "length":2, "offset":3, "dataType":"uint16be"},
    {"name":"d1",     "length":2, "offset":5, "dataType":"uint16be"},
    {"name":"d2",     "length":2, "offset":7, "dataType":"uint16be"},
    {"name":"d3",     "length":2, "offset":9, "dataType":"uint16be"},
    {"name":"crc",    "length":2, "offset":11, "dataType":"uint16le"}
]

The “buffer parser is also showing an error” symptom from debug logs typically reduces to one of these root causes:

Buffer-parser Symptom Likely Root Cause Verification / Fix
RangeError: Index out of range Buffer shorter than schema expects; response was truncated Inspect debug node output; verify length equals 13 for a 4-register read; reduce master quantity to 1 register and re-test
TypeError: dataType.xxx is not a function Schema field uses empty or mis-typed dataType Re-enter the schema; pick from the parser's catalog: uint8, uint16be, uint16le, int16be, int16le, floatbe, floatle, ascii, hex, bool
Bytes match but parsed values are 0x0000 Endianness flipped — Modbus is big-endian for data, but you used uint16le Switch data fields to uint16be; only the trailing 2-byte CRC remains little-endian for the standard layout
Parsed values match but CRC mismatches Truncation drops the last byte, or buffer holds added noise (echo / terminator reflection) Add a function node msg.payload = msg.payload.slice(0, length) based on the dynamic bytes field
Parser silently emits nothing downstream No output rule defined; payload missing Set parser output mode to auto or msg.payload; ensure the output schema names every field
Parser succeeds sporadically with garbage values Race condition — parser runs before all bytes flush from the UART FIFO Configure the upstream serial node to emit on byte-count or pause delay; or use stream mode with a known delimiter
Frame comes through but unit byte is 0x00 CJ2M is at slave ID 0 (broadcast) — invalid configuration Re-set PLC Setup Unit Number between 1 and 247; cycle CPU power

Beyond the buffer-parser, validate the CRC in the master (most libraries expose this) before iterating on schema layouts. A valid CRC narrows troubleshooting to framing rather than configuration.

11. Verification: Loopback Test and Register Polling

Always run a loopback test before connecting real field devices. Recommended bench sequence:

  1. Host the master on a known-working PC with a USB/RS-485 dongle (FTDI FT4232H-based units are widely accepted; bus-powered units can violate common-mode).
  2. Connect the master to a Modbus-RTU simulator running on a second PC (e.g., diagslave or modpoll in slave mode). Confirm all parameters before connecting the CJ2M.
  3. Replace the simulator with the CJ2M slave. Poll the first ten DM registers from the master and compare against CX-Programmer > Reference > Online values.
  4. Force a DM value from the master (function code 0x06) and confirm CX-Programmer shows the same value within one scan.

Pass criteria:

  • 10/10 register values match CX-Programmer reference values within one CPU scan.
  • CRCs validate from the master-side library.
  • Round-trip latency < 50 ms at 9600 baud for a 10-register poll.
  • Logs show no TimeoutError from the master under steady-state load of 1 Hz polls for 1 hour.

12. Performance, Tuning, and Troubleshooting Matrix

At 9600 baud, a CJ2M serial port can sustain approximately 25 register polls per second including inter-frame silence and request-response turn-around. To sustain deterministic latency on a higher-load polling loop, prefer the EtherNet/IP path; FINS/TCP can sustain hundreds of polls per second when the CPU has a dedicated session.

Symptom Likely Cause Mitigation
Frequent master-side timeouts CPU in PROGRAM mode — Modbus-RTU Slave does not service DM unless the CPU is in RUN or MONITOR Confirm CPU is in RUN; check the RDY and RUN LEDs; transfer and start the application
Slave returns exception 0x01 (illegal function) Function code not in supported list (none in the table above) Confirm master sends only 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x0F, or 0x10
Slave returns exception 0x02 (illegal data address) Request outside the memory map boundary Cap quantity to 125 reads / 123 writes; verify start address ≤ 32767 for DM and ≤ 511 for CIO words
Slave returns exception 0x03 (illegal data value) Quantity register field contains a value outside the allowed range Verify 1≤quantity≤125 for FC 0x03/0x04; enforce single-write for FC 0x06
Slave returns exception 0x04 (slave device failure) CPU in catastrophic fault; DM area defined as file register not present Inspect ERR LED; clear PLC faults; reduce request rate
Sporadic data with valid CRC Inter-frame silence violation by master; mis-wired termination or shield Insert ≥4 ms gap in master; verify exactly two 120 Ω terminators on trunk; re-ground shield
First poll works, subsequent polls fail Send Delay in PLC Setup left at 0 ms; PLC misses inter-frame gap from PC Raise Send Delay to 30 ms; ensure master waits for the response before next request
Watchdog in CPU increments Ladder service time exceeds scan; serial port interrupt flooding Reduce polling frequency; inspect DM copy tasks for unbounded MOV loops; consider longer END refresh interval
All registers return 0x0000 but master reports success CIP server is bound to EtherNet/IP and Modbus-RTU never actually mapped DM; ladder writing to W or HR instead Verify ladder instruction targets D, not W or H; or modify target to D0200–D0210 for the demo values
Buffer-parser succeeds only for the first payload Stream mode accumulates partial frames; parser runs every tick Switch parser to on demand mode and feed it with single-shot serial reads; or aggregate bytes to a frame-length window
Buffer-parser NaN downstream even though schema parses Float read on a register that holds a scaled integer (0–10000 representing 0–100.0%) Define a parser field of type int16be and post-process: value / 100 in a function node

13. Cross-Vendor Notes and Migration Paths

If the project later migrates to a different supplier, the same RS-485 trunk can host multi-vendor slaves. Notes from the field:

  • Schneider M340 with BMX NOM 0200 / NOM 0100 supports Modbus-RTU slave on the same physical layer; default registers map to %MW starting at 0, which is the same convention as CJ2M DM. No adapter required.
  • Allen-Bradley CompactLogix / MicroLogix uses different register offset conventions (typically N7:0 or 400001). When migrating, re-validate the master block.
  • Wago 750-352 / WAGO-I/O-System presents Modbus natively and can be a Modbus-RTU slave on the same trunk.

When transitioning from the CJ2M RS-485 path to the CJ2M-CPU3x EtherNet/IP path with FINS/TCP, the address-to-symbol mapping improves but the request rate drops by 30–40% on every leg of the connection storm under 0.5 s of jitter. Use RS-485 only when multi-vendor Modbus polling is required.

14. Safety, EMC, and Field Reliability

RS-485 in a heavy-industrial environment is a frequently mis-wired interface. Engineering safeguards to enforce:

  • Terminate only at the ends: The 120 Ω resistors must exist at exactly two nodes. Three terminators loads the bus below TIA-485 requirements; one terminator produces ringing.
  • Ground the shield at one point: Ground loops couple 50 Hz/60 Hz common-mode onto A/B; optocouplers on industrial gateways protect upstream UARTs but not always the protection diodes on the CJ2M option board.
  • Keep cable clear of VFD outputs: Routing the RS-485 trunk within 200 mm of an unfiltered VFD output cable produces common-mode that exceeds the input common-mode range of the option board.
  • Enable Modbus broadcast discipline: Avoid broadcast messages (slave address 0) unless every slave is on a unique register layout; write broadcast is a single-strike action.
  • Plan for CPU fault state: When the CJ2M transitions to fatal (ERR LED solid), the serial port stops responding. Master should treat timeout-and-retry with back-off rather than master crash-restart.
Safety: The Modbus-RTU Slave port does not by itself provide secure isolation. If the network crosses a Safety Integrity Level boundary (ISO 13849 / IEC 62061), deploy a separate wired safety circuit; do not depend on the Modbus-RTU write for safety logic.

15. Frequently Asked Questions

Does the CJ2M support Modbus-RTU Master on the same option board?

Yes. Switch PLC Setup > Mode to Modbus-RTU Master and use PMCR ladder instructions to issue pre-built Modbus frames. The same CP1W-CIF12 hardware serves both master and slave modes — only the firmware personality changes.

What is the maximum number of nodes on a single RS-485 trunk?

The TIA-485 hardware limit is 32 unit loads per segment. The CJ2M option board represents one standard unit load. Many VFDs present fractional unit loads (1/4 or 1/8). Beyond 32 unit loads, insert an RS-485 repeater such as the Phoenix Contact SUPI 3-EX or the Wago 750-497.

Can Modbus-RTU Slave operate alongside an EtherNet/IP FINS/TCP session on the same CPU?

Yes. On the CJ2M-CPU31/32/33/34/35 the EtherNet/IP port and the option-board serial port are independent channels, each served by the CPU scanner. The CPU simply commits DM-area writes from either interface. Routing is at the application level.

What is the difference between Modbus-RTU and CompoWay/F on the same option board?

Modbus-RTU is a public open protocol used by most SCADA products. CompoWay/F is Omron's serial protocol aimed at temperature controllers and sensors. The same option board hosts either protocol, selected via PLC Setup mode. See the CompoWay/F Connection Guide for E5xC device polling examples.

Why does the buffer-parser report a length error only after a few seconds of stable polling?

Most likely the master has scheduled the read slightly faster than the CPU can complete, causing partial frames to overlap. Add 30 ms between requests, increase Slave Send Delay in PLC Setup, and verify that the parser schema lengths sum exactly to the buffer length emitted by the serial request node. Switch the upstream serial request to until-byte-count for deterministic frame trimming.

Can I run RS-485 Modbus-RTU at 115 kbaud on the CJ2M with a 32-node trunk?

Only within approximately 30 m of trunk length. At 115 kbaud the inter-frame time drops to 0.334 ms, the cable capacitance budget is tight, and any terminator mismatch will fail intermittently. Stay at 19.2 kbaud or 38.4 kbaud for full 1000 m trunk lengths.

Back to blog