Skip to main content

FINS Overview

The FINS route enables communication with Omron PLCs (CJ, CS, CP, and NJ/NX series) using the FINS (Factory Interface Network Service) protocol. It supports both TCP and UDP transport, multiple memory areas, and bit-level access.
FINS is Omron’s native protocol providing fast, efficient access to PLC memory. For newer NJ/NX series, consider OPC UA as an alternative.

Basic Syntax

DEFINE ROUTE OmronPLC WITH TYPE FINS
    ADD FINS_CONFIG
        WITH ADDRESS "192.168.1.100"
        WITH PORT '9600'
        WITH PROTOCOL "TCP"
        WITH LOCAL_NODE '0'
        WITH REMOTE_NODE '0'
    ADD MAPPING ProcessData
        WITH EVERY 500 MILLISECONDS
        ADD TAG Temperature
            WITH ADDRESS "100"
            WITH MEMORY_TYPE "DM"
            WITH DATA_TYPE "REAL"
            WITH SOURCE_TOPIC "plc/temperature"

Connection Configuration

FINS_CONFIG Parameters

ADDRESS
string
required
Target Omron device IP address.
PORT
integer
FINS protocol port. Default: 9600.
PROTOCOL
string
Protocol type: TCP or UDP. Default: TCP.
LOCAL_NODE
integer
Local node address (0-255). Default: 0.
REMOTE_NODE
integer
Remote node address - target PLC (0-255). Default: 0.
TIMEOUT
integer
Connection timeout in seconds. Default: 2.
RETRIES
integer
Number of retries for FINS communication. Default: 5.
POLLING
integer
Polling interval in milliseconds. Default: 200.

Connection Examples

Standard TCP connection (recommended):
ADD FINS_CONFIG
    WITH ADDRESS "192.168.1.100"
    WITH PORT '9600'
    WITH PROTOCOL "TCP"
    WITH LOCAL_NODE '0'
    WITH REMOTE_NODE '0'
    WITH TIMEOUT '2'
    WITH RETRIES '5'

Memory Areas

Omron PLCs organize data in different memory areas:
Memory TypeCodeDescriptionAccess
CIO0Core I/O and work areaRead/Write
WR1Work areaRead/Write
HR2Holding area (retentive)Read/Write
AR3Auxiliary areaRead-only
DM4Data MemoryRead/Write
CNT5Counter valuesRead/Write
TIM6Timer valuesRead/Write
EM7Extended MemoryRead/Write
DM (Data Memory) is the most commonly used area for user data. CIO is typically used for I/O and internal relays.

Data Types

Data TypeDescriptionSize
BOOLBoolean (single bit)1 bit
BYTEUnsigned 8-bit8 bits
INTSigned 16-bit integer16 bits
UINTUnsigned 16-bit integer16 bits
DINTSigned 32-bit integer32 bits
UDINTUnsigned 32-bit integer32 bits
LINTSigned 64-bit integer64 bits
ULINTUnsigned 64-bit integer64 bits
REAL32-bit floating point32 bits
LREAL64-bit floating point64 bits
ASCIIASCII character8 bits
STRINGString valueVariable

TAG Configuration

Complete TAG Example

ADD TAG ProcessTemperature
    WITH ADDRESS "100"
    WITH BIT_ADDRESS '0'
    WITH DATA_TYPE "REAL"
    WITH MEMORY_TYPE "DM"
    WITH STRING_SIZE "256"
    WITH SOURCE_TOPIC "plc/process/temperature"
    WITH DESTINATION_TOPIC "plc/process/temperature/write"
    WITH WRITABLE "true"
    WITH SCALING "0.1"
    WITH OFFSET "0"
    WITH UNIT "°C"
    WITH DECIMAL_PLACES "2"
    WITH MIN_VALUE "-50"
    WITH MAX_VALUE "500"
    WITH DEADBAND "0.5"
    WITH PUBLISH_MODE "JSON"
    WITH DESCRIPTION "Main process temperature sensor"

TAG Parameters

ADDRESS
string
required
Word address in PLC memory (e.g., 100, 200, 500).
BIT_ADDRESS
integer
Bit address for bit-specific data types (0-15). Used for BOOL values within a word.
MEMORY_TYPE
string
Memory area: CIO, WR, HR, AR, DM, CNT, TIM, EM. Default: DM.
DATA_TYPE
string
required
FINS data type: BOOL, BYTE, INT, UINT, DINT, UDINT, LINT, ULINT, REAL, LREAL, ASCII, STRING.
STRING_SIZE
integer
Size of string for STRING types. Default: 256.
SCALING
double
Multiplier for value transformation. Default: 1.0.
OFFSET
double
Offset added after scaling. Default: 0.0.
DECIMAL_PLACES
integer
Decimal places in output. Default: 2.
MIN_VALUE
double
Minimum allowed value.
MAX_VALUE
double
Maximum allowed value.
DEADBAND
double
Minimum change to trigger publish. Default: 0.0.
SOURCE_TOPIC
string
required
MQTT topic for read values.
DESTINATION_TOPIC
string
MQTT topic for write commands.
PUBLISH_MODE
string
Output format: VALUE_ONLY or JSON. Default: VALUE_ONLY.
UNIT
string
Engineering unit for documentation.
DESCRIPTION
string
Human-readable description.
WRITABLE
boolean
Allow writing to this address. Default: false.

Addressing Examples

Word Addressing

Access data at word level:
ADD TAG DataWord100
    WITH ADDRESS "100"
    WITH MEMORY_TYPE "DM"
    WITH DATA_TYPE "INT"
    WITH SOURCE_TOPIC "plc/dm/100"

Bit Addressing

Access individual bits within a word:
ADD TAG Bit0
    WITH ADDRESS "100"
    WITH BIT_ADDRESS '0'
    WITH MEMORY_TYPE "DM"
    WITH DATA_TYPE "BOOL"
    WITH SOURCE_TOPIC "plc/dm/100.0"

ADD TAG Bit15
    WITH ADDRESS "100"
    WITH BIT_ADDRESS '15'
    WITH MEMORY_TYPE "DM"
    WITH DATA_TYPE "BOOL"
    WITH SOURCE_TOPIC "plc/dm/100.15"

32-bit Values

32-bit values span two consecutive words:
ADD TAG FloatValue
    WITH ADDRESS "200"
    WITH MEMORY_TYPE "DM"
    WITH DATA_TYPE "REAL"
    WITH SOURCE_TOPIC "plc/float"
REAL and DINT types use two consecutive words (e.g., DM200 and DM201).

Complete Examples

Read values from DM area:
DEFINE ROUTE OmronBasic WITH TYPE FINS
    ADD FINS_CONFIG
        WITH ADDRESS "192.168.1.100"
        WITH PORT '9600'
        WITH PROTOCOL "TCP"
        WITH LOCAL_NODE '0'
        WITH REMOTE_NODE '0'
    ADD MAPPING DataMemory
        WITH EVERY 500 MILLISECONDS
        ADD TAG Temperature
            WITH ADDRESS "100"
            WITH MEMORY_TYPE "DM"
            WITH DATA_TYPE "REAL"
            WITH SOURCE_TOPIC "plc/temperature"
            WITH SCALING "0.1"
            WITH UNIT "°C"
        ADD TAG Pressure
            WITH ADDRESS "102"
            WITH MEMORY_TYPE "DM"
            WITH DATA_TYPE "REAL"
            WITH SOURCE_TOPIC "plc/pressure"
            WITH UNIT "bar"
        ADD TAG Counter
            WITH ADDRESS "104"
            WITH MEMORY_TYPE "DM"
            WITH DATA_TYPE "DINT"
            WITH SOURCE_TOPIC "plc/counter"

Memory Area Details

  • Used for I/O mapping and internal relays
  • Words 0-99: Typically input/output modules
  • Words 100-999: Work bits and internal relays
  • Addresses are PLC model dependent
  • Main user data storage
  • Typically DM0-DM32767
  • Best for process data, setpoints, configuration
  • Retentive (battery-backed)
  • Always retentive data
  • Survives power cycles
  • Use for counters, totals, settings
  • Typically HR0-HR511
  • General purpose work bits
  • Non-retentive (cleared on power cycle)
  • Fast access for temporary data
  • TIM: Timer present values
  • CNT: Counter present values
  • Values are 16-bit unsigned
  • Timer values often in 0.1s units

Troubleshooting

  • Verify IP address is correct
  • Check firewall allows port 9600
  • Ensure PLC Ethernet module is configured
  • Try both TCP and UDP protocols
  • Verify node addresses match PLC configuration
  • LOCAL_NODE should be unique on the network
  • REMOTE_NODE is the target PLC’s node number
  • Check PLC’s FINS settings for correct node configuration
  • For direct connections, try 0 for both nodes
  • Verify address is within valid range for memory type
  • Check MEMORY_TYPE matches where data is stored
  • For 32-bit types, ensure two consecutive words are available
  • BIT_ADDRESS must be 0-15
  • Increase TIMEOUT value
  • Check network connectivity
  • Verify PLC is in RUN mode
  • Reduce POLLING rate if reading many tags
  • Try TCP instead of UDP
  • Ensure WRITABLE is “true”
  • Verify memory area is writable (not AR)
  • Check PLC is not in monitor mode
  • Verify value is within data type range

Next Steps