Skip to content

Adding Omron PLCs (FINS) ​

Last updated

The Omron FINS driver speaks FINS over TCP or UDP on port 9600 with a built-in implementation (no extra library). It reads and writes 16-bit words, single bits, and 32- and 64-bit integers and floats spread over consecutive words.

One-time PLC setup ​

  1. In CX-Programmer (CJ/CS/CP) or Sysmac Studio (NJ/NX), open the Ethernet unit or built-in port settings.
  2. Note the PLC's FINS node number (often the last octet of its IP address). For FINS/TCP, make sure FINS/TCP is enabled on port 9600. For FINS/UDP, set the IP address conversion to automatic (dynamic) so the PLC answers to whichever address asked.
  3. On NJ/NX controllers, FINS gives access to CIO/DM memory only if variables are mapped to those areas (AT specification). Otherwise use OPC-UA on the NX/NJ.

Connection fields ​

FieldValue
IP AddressPLC or Ethernet unit.
Port9600.
TransportUnder Driver Settings: TCP (default) or UDP. Older CP1 and CJ1 units, and many existing FINS networks, only offer UDP.
PLC node number, Appliance node number, Unit addressUnder Driver Settings. Defaults 1, 10 and 0. On UDP, set PLC node number to the PLC's FINS node if it isn't 1, and give the appliance a node number nothing else on the FINS network uses. On TCP the PLC assigns both numbers in the FINS/TCP handshake and the driver uses those; the appliance number is only a request.
Word orderUnder Driver Settings. How 32- and 64-bit values sit in their words. Default CDAB (low word first), which is how Omron stores DINT and REAL.

Connect opens TCP (10-second timeout) and performs the FINS/TCP handshake, or for UDP sends a Controller Data Read and waits up to 5 seconds for the answer. The CPU model it reports (e.g. CJ2M-CPU31) appears in the device info. A read that times out or loses the connection marks the device Disconnected, and it is reconnected with backoff (see Polling & Reconnect); a request the PLC refuses with an error code only makes that tag Bad.

Address syntax ​

ExampleMeaningType
D100 or DM100DM word 100, unsignedint (0–65535)
D100:INTDM word 100, signedint (−32768–32767)
D100:DINT, D100:UDINTD100–D101 as a signed / unsigned 32-bit integerint
D100:REALD100–D101 as a 32-bit floatfloat
D100:LREALD100–D103 as a 64-bit floatfloat
D100.5bit 5 of D100bool
CIO0 or IO0CIO channel 0int
CIO0.3CIO 0.03bool
W10Work word W10int
H0Holding word H0int
A0Auxiliary word A0int
T0Timer 0 present valueint
C0Counter 0 present valueint
E0Extended memory bank 0, word 0int

The type suffix (:INT, :UINT, :DINT, :UDINT, :REAL, :LREAL) works on every area. Without one a word reads as unsigned 16-bit (:UINT).

Browse Tags lists nine example addresses (D0, D1, D10, D100, W0, H0, T0, C0, CIO0) or your driverConfig.tags list. Add real addresses with Add Tag.

Writes ​

Word addresses write a 16-bit value (a negative number is written as its 16-bit two's complement); typed addresses write all their words in one request, and a value outside the type's range is refused. Bit addresses (D100.5) read the word, change the bit and write it back. The PLC must be in a mode that allows memory writes (Monitor or Program).

Troubleshooting ​

SymptomCauseFix
Error at connect; log Bad FINS handshake response or handshake refusedNot a FINS/TCP port, FINS/TCP disabled, or the requested appliance node number is in use.Enable FINS/TCP on 9600, or change Appliance node number.
UDP: Error at connect, log no FINS/UDP answerWrong IP or port, a firewall, or the PLC answers a fixed address instead of the sender (static IP conversion).Set the PLC's FINS/UDP address conversion to automatic, or use TCP.
Log FINS error code: 0x…The PLC rejected the request (address out of range, area not supported by the model, wrong node).Check the address against the PLC's memory map, and PLC node number on UDP.
32-bit values look scrambledWord order differs.Try Word order ABCD.

See also ​

Scada.Ink Help Center