Troubleshooting Omron NSJ FINS Ethernet Communication Setup

James Nishida13 min read
Industrial NetworkingOmronTroubleshooting
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

Problem Overview

Engineers integrating an Omron NSJ-series controller (typical example: NSJ8-TV01-G5D) with a PC-based SCADA, HMI, or custom application frequently report that FINS commands sent over UDP/TCP Ethernet never receive a reply from the PLC, even when:

  • The Ethernet link is up (link LED active on the NSJ's built-in Ethernet port)
  • ICMP ping from the PC to the NSJ IP address succeeds
  • CX-Programmer / CX-Integrator can talk to the controller through the same Ethernet port
  • Omron-supplied test utilities (FINS IP Request Tool PRO, FINS UDP for Ethernet) appear to transmit but no response is returned

Symptoms observed in the field include the request tool displaying a timeout, a "!! (0)" status, or simply hanging with no error code at all. The root cause is almost always a misconfigured FINS routing table / node address conversion table on the controller side, combined with the wrong destination unit address in the application. The built-in Ethernet unit on the NSJ has very specific defaults that differ from legacy CJ1W-ETN21 or CS1W-ETN21 modules, and third-party test software built for those older modules will not reply without manual configuration.

NSJ Controller Architecture and FINS Addressing

The NSJ controller is an integrated HMI + PLC package. The NSJ8-TV01-G5D contains an NSJ8-TQ01-G5D PLC section and an NS12-TS01 (or NS12-TS00) touch-screen HMI section, sharing a common backplane. The PLC section exposes:

Subsystem Logical Unit FINS Unit Address (typical) Network Number Node Number
Built-in Ethernet port (PLC side) 0 228 (0xE4) 1 IP last octet
Built-in RS-232C port (PLC side) 1
Controller Link / DeviceNet (if fitted) varies varies varies varies
Inner board slot (HMI ↔ PLC internal link) internal 1 internal

The fixed unit number 228 for the built-in Ethernet port is critical. This value is used as the FINS DNA (Destination Network Address) and DA1 (Destination Node Address) target when the NSJ is the final hop, and as SNA/SA1 (Source) when the NSJ originates a reply. Many older SCADA drivers default to unit numbers 1, 2, or 10 — those will not work on the NSJ built-in port.

For complete controller specifications, refer to the Omron Industrial Automation Manual Library and search for the NSJ-series Operation Manual (Cat. No. W463).

Root Cause Analysis: Why FINS Replies Are Not Returned

There are four primary root causes for "no reply" behavior, in descending order of frequency in field reports:

  1. Empty FINS routing table (IP address conversion table) on the PLC. The NSJ has no idea how to convert an arriving FINS frame's destination node number into a UDP/TCP destination, so it silently drops the packet.
  2. Wrong DA2 (Destination Unit Address) in the application frame. Many test tools default to DA2 = 10 or DA2 = 1. For the NSJ built-in Ethernet, DA2 must be 00 because the local port itself is the final unit when only one Ethernet port is present.
  3. Wrong local port number in the application. The NSJ only listens on UDP/TCP port 9600. Applications that default their local source port to 9601 (or any other value) will still send to port 9600, but if the application uses a non-standard FINS port and the user changes the remote port to match, replies will not be routed back through the conversion table.
  4. Demo / evaluation software restrictions. Several Omron utilities are time-bombed demonstration builds that disable the FINS echo / reply path. They are useful for capturing the request frame but not for validating bi-directional communication.
Important: A successful ping confirms only that ICMP is allowed and IP routing is correct. It does not confirm that FINS UDP/9600 is reachable, and it does not confirm that the routing table is populated.

Prerequisites

Before configuring FINS communication, ensure the following are available:

  • Hardware: NSJ controller with built-in Ethernet (NSJ5/NSJ8/NSJ10/NSJ12 variants), Cat5e or better Ethernet cable, managed switch or direct crossover, PC with Ethernet port.
  • Software: CX-One (includes CX-Programmer and CX-Integrator) version 4.x or later. CX-Integrator is required to edit the FINS routing table on the PLC.
  • IP plan: Static IP addresses for both the PC and the NSJ in the same subnet. Example: NSJ = 192.168.250.10, PC = 192.168.250.15, mask = 255.255.255.0.
  • Network number plan: Default network number for the built-in Ethernet port is 1. Node number equals the last octet of the IP address (e.g., 10 for 192.168.250.10).
  • User authority: PLC project must be unlocked to write the routing table back to flash.

Step-by-Step FINS Communication Setup

  1. Configure the NSJ IP address. In CX-Programmer, connect via USB or Ethernet, open the PLC Settings dialog, and under Built-in Ethernet Port Settings enter the IP address, subnet mask, and default gateway. The default FINS node is auto-derived from the last octet; FINS network number defaults to 1.
  2. Enable the FINS/UDP and FINS/TCP services. In the same Built-in Ethernet Port Settings tab, set FINS/UDP Port to 9600 (decimal) and enable Use FINS/UDP. Repeat for FINS/TCP if your SCADA uses TCP. The port number cannot be changed on the NSJ built-in port.
  3. Confirm link and ping. From the PC, open a command prompt and run ping 192.168.250.10. You should see replies with TTL consistent with one hop on a local subnet.
  4. Launch CX-Integrator and connect to the NSJ via Ethernet. In the project tree you will see the Inner Board appear with a network number 1 entry. Right-click → Connect. If Ethernet Tools → Ping Test is greyed out, the application has not bound to the controller's routing table — recheck that the IP/subnet/network match.
  5. Open the FINS Routing Table. In CX-Integrator, select the network, then choose Routing Table → Edit. The table maps (Local Network Number, Local Node Number) → (Remote Network Number, Remote Node Number) → Remote IP Address and FINS UDP port.
  6. Add a PC-side entry. For a single-PC setup, add a row where:
    • Local Network Number = 1 (NSJ built-in Ethernet)
    • Remote Network Number = 1 (PC's "virtual" FINS network)
    • Remote Node Number = 15 (matches the last octet of PC IP 192.168.250.15)
    • Remote IP Address = 192.168.250.15
    • Remote FINS Port = 9600
  7. Add the reverse direction. Some FINS implementations also require a row mapping back from the PC to the NSJ. Add a second row with Local Network = 1, Local Node = 10, Remote Network = 1, Remote Node = 15, Remote IP = PC IP, Remote Port = 9600.
  8. Transfer the table to the PLC. Click Options → Transfer to PLC. Cycle power on the NSJ if prompted; some firmware revisions require a restart to activate the new table.
Critical: Without a populated routing table, the NSJ will silently discard incoming FINS frames. No ICMP error is returned, which is why ping succeeds but FINS times out.

Destination Address (DA2) Parameter Rules

FINS frames use a three-level addressing scheme: DNA (Destination Network), DA1 (Destination Node), and DA2 (Destination Unit). On the NSJ built-in Ethernet port with only one Ethernet unit present, the correct values are:

Field Value (NSJ built-in Ethernet only) Notes
DNA (network) 1 Matches network number set in PLC Settings
DA1 (node) 10 Last octet of NSJ IP (192.168.250.10)
DA2 (unit) 00 00 means "this unit, CPU side". Non-zero values target other units on the same backplane and are rejected by the built-in port.
SNA / SA1 / SA2 1 / 15 / 00 (PC side) Set source addresses to match the PC's routing table entry

If your test tool exposes only a single "unit" field and defaults to 1, the controller returns a Destination Unit Not Found error rather than the expected data — many utilities display this as a generic timeout.

UDP Port 9600 Enforcement

The NSJ built-in Ethernet port hard-codes the FINS service to UDP/TCP port 9600. The controller will not respond to frames sent to port 9601, 9602, 1999, or any other value, regardless of what the application claims the "default" should be. Symptoms of wrong-port usage:

  • Application reports "Send OK" / "No error" but no FINS response ever arrives.
  • Wireshark capture shows UDP datagrams to/from port 9601 with no payload acknowledgement.
  • Routing table appears correct in CX-Integrator.

When using a custom PC application, bind the local socket to port 9600 if the platform allows, or bind to an ephemeral port and verify that the FINS library correctly populates the source port in the IP/UDP header. Some FINS implementations (notably the older Omron-supplied sample code) default the local port to 9601 — change it to 9600 before testing.

Verification Procedure

  1. Layer 1/2 check: Confirm link LED on NSJ and PC NIC.
  2. Layer 3 check: ping from PC to NSJ IP succeeds.
  3. FINS routing table read-back: In CX-Integrator, choose Routing Table → Compare with PLC. The table you see in the GUI must match what is actually loaded on the controller.
  4. CX-Integrator Ethernet Tools → Ping Test: If this is greyed out, the application is not bound to the same routing table — re-enter the PC node number in the project tree.
  5. FINS command test (recommended): Use a tool that has been verified to work with the NSJ built-in port, such as the Multiway utility written by an Omron France support engineer for exactly this controller family. Configure:
    • Target IP = NSJ IP
    • Target port = 9600
    • Local port = 9600
    • Network = 1, Node NSJ = last octet, Node PC = last octet of PC IP, Unit = 00
  6. Frame validation with Wireshark: Filter on udp.port == 9600. A valid request from PC shows source port 9600, destination port 9600, and a FINS payload of at least 18 bytes. A valid reply from NSJ reverses the source/destination and contains either requested data or a 4-byte FINS error code in the last two bytes.
  7. Memory read confirmation: Issue Memory Area Read (command code 0101) for area 82 (DM), starting word 0000, length 0001. A valid reply begins with command/response code 0101, end code 0000, and 2 bytes of D0 content.

FINS Command Frame Reference

A minimal FINS/UDP request frame to read D0 (DM area 0) on the NSJ has the following structure:


FINS/UDP Header (8 bytes):
  00 00 00 00 00 00 00 00    ; reserved

FINS Command Frame (18 bytes minimum):
  ICF = 80                   ; information control field, response requested
  RSV = 00                   ; reserved
  GCT = 00                   ; gateway count (0 = no gateway)
  DNA = 01                   ; destination network  (1)
  DA1 = 0A                   ; destination node     (10)
  DA2 = 00                   ; destination unit     (0, CPU)
  SNA = 01                   ; source network       (1)
  SA1 = 0F                   ; source node          (15, PC)
  SA2 = 00                   ; source unit          (0)
  SID = 00                   ; service ID           (any)
  MRC = 01  SRC = 01         ; command: Memory Area Read
  DM  = 82                   ; memory area: DM
  Address (2 bytes) = 00 00  ; starting word 0
  Bit = 00                   ; bit offset (always 00 for word read)
  Words (2 bytes) = 00 01    ; read 1 word

End code in the response will be 0000 on success. Common non-zero end codes from the NSJ built-in port include 0101 (local node not in network — routing table issue), 0201 (destination node not in network — wrong IP/node mapping), and 0502 (destination unit error — wrong DA2, usually ≠ 00).

For the complete command catalog, refer to the FINS Commands Reference Manual (Cat. No. W342) from the Omron Manual Library.

SCADA Integration via OPC FINS Gateway

If writing a custom FINS driver is not feasible, the most reliable path is to use an OPC server that natively speaks FINS/UDP, such as the KEPServerEX Omron FINS Ethernet driver. The OPC server runs on the same PC as the SCADA, and the SCADA connects as an OPC DA/UA client. This eliminates the need to populate the routing table for SCADA-to-PLC traffic because the OPC server does the frame construction and address conversion internally. Recommended when:

  • The SCADA vendor will not write a custom FINS driver.
  • Multiple NSJ controllers need to be polled from a single SCADA.
  • The application needs tag browsing rather than raw FINS commands.

For all but the simplest point-to-point links, the OPC gateway path is more robust than a hand-rolled FINS driver and dramatically reduces time spent debugging routing tables.

Troubleshooting Matrix

Symptom Likely Cause Fix
ping OK, FINS tool times out Routing table empty Populate FINS routing table in CX-Integrator; cycle power
ping OK, FINS tool returns "!! (0)" or jibberish Routing table missing or partial Add both directions; ensure local node matches PC IP last octet
Wireshark shows request to port 9601, no reply Wrong local port in application Bind local socket to 9600 or change app's default port
Wireshark shows request to port 9600, no reply DA2 ≠ 00, or unit address rejected Set DA2 = 00 in test tool
Reply received, end code 0101 Local node missing from network table Add local node row in CX-Integrator routing table
Reply received, end code 0201 Destination node not in network Verify node number equals last octet of NSJ IP
Reply received, end code 0502 DA2 not zero (targeting wrong unit) Set DA2 = 00 for CPU access
Test tool is a demo / trial build Demo limitation, not a configuration issue Use Multiway or a full-license FINS test tool
Ethernet Tools → Ping Test greyed out in CX-Integrator Application not bound to routing table Re-enter PC node number in project tree and reconnect
All correct but NSJ still silent Firmware bug on early NSJ rev Update NSJ PLC section firmware; contact Omron support

Field-Commissioning Notes and Best Practices

  • Always populate the routing table on every Ethernet unit in the path. Even a direct PC-to-PLC link requires entries on the PLC side. Skipping this is the single most common commissioning error.
  • Use the controller's CPU Bus Units and Inner Board I/O tables to confirm that the Ethernet port is registered. An uninitialized port will not respond to FINS even with a correct routing table.
  • Lock the project. After commissioning, transfer the project to flash and set the UM read-protection bit so the routing table cannot be wiped by an inadvertent download.
  • Document the FINS network and node numbers in the cabinet. Future engineers will need them when expanding to a second NSJ or adding a Controller Link module.
  • When migrating from a CJ1W-ETN21 to NSJ built-in Ethernet, change unit number assumptions. CJ1W-ETN21 default unit is configurable 0-15; NSJ built-in is fixed at 228. SCADA tags written against the old address map will be invalid.
  • For multi-NSJ setups, use unique FINS network numbers per controller (1, 2, 3, …) and a consistent IP subnet. Routing tables then become explicit: Local Net 1 → Remote Net 2 at IP X.X.X.X.
  • Validate with a known-good command first. Reading CPU unit version (FINS command 0501, area 00, address 00 00, 1 word) is a single-word read that exercises the full round-trip without needing area-specific access rights.

What FINS port does the Omron NSJ built-in Ethernet use?

UDP and TCP port 9600. The NSJ built-in Ethernet port is hard-coded to this value and will not respond to frames sent to any other port. Older test utilities default to 9601 — change the local and remote port to 9600 before testing.

What is the FINS unit address (DA2) for the NSJ built-in Ethernet port?

DA2 = 00 for CPU access. The built-in Ethernet port itself has fixed unit number 228 for routing purposes, but the destination unit field in the FINS frame must be 00 to reach the CPU section of the NSJ.

Why does ping work but FINS UDP still times out?

The FINS routing table (also called the IP address conversion table) on the PLC is empty. ICMP succeeds because IP routing is intact, but the controller has no FINS node-to-IP mapping and silently drops the frame. Populate the table in CX-Integrator and cycle power.

Can I use CX-Integrator's built-in Ping Test to validate FINS?

It validates that CX-Integrator is bound to the correct routing table, but it does not validate FINS command/response flow. For that, use a dedicated FINS test tool (Multiway, KEPServerEX quick client, or a hand-built FINS frame) and confirm the end code in the response is 0000.

Is a FINS gateway required to talk to the NSJ from a PC?

No. A FINS gateway (such as Omron's FINS Gateway service) is only needed as middleware when the SCADA software cannot speak FINS directly. Most modern SCADA packages and OPC servers (e.g., KEPServerEX) include native FINS Ethernet drivers, making the gateway unnecessary for a direct PC-to-NSJ link.

Back to blog