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 IP "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

IP
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 IP "192.168.1.100"
    WITH PORT 9600
    WITH PROTOCOL "TCP"
    WITH LOCAL_NODE 0
    WITH REMOTE_NODE 0
    WITH TIMEOUT 2
    WITH RETRIES 5
TCP transport for FINS is currently in development. Use UDP for production deployments.

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
SINTSigned 8-bit integer8 bits
USINTUnsigned 8-bit integer8 bits
INTSigned 16-bit integer16 bits
UINT / WORDUnsigned 16-bit integer16 bits
DINTSigned 32-bit integer32 bits
UDINT / DWORDUnsigned 32-bit integer32 bits
LINTSigned 64-bit integer64 bits
ULINT / LWORDUnsigned 64-bit integer64 bits
REAL / FLOAT32-bit floating point32 bits
LREAL / DOUBLE64-bit floating point64 bits
CHARSingle character8 bits
WCHARWide character16 bits
TIMETime duration32 bits
DATEDate value16 bits
TODTime of day32 bits
ASCIIASCII string8 bits
STRINGString value (configurable STRING_SIZE)Variable

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
Topic where PLC values are published. Subscribe here to receive sensor data.
DESTINATION_TOPIC
string
Topic to send write commands. Publish a value here to write it to the PLC.
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).

Event-Based Operations

For on-demand FINS operations (not polling), use the EVENT syntax. Publish a message to SOURCE_TOPIC to trigger the operation; the route executes it and publishes the result to DESTINATION_TOPIC.

Supported Operations

OperationDescriptionQuery Parameters
READRead from a memory area on demandmemory_type, address, data_type, count
WRITEWrite a value to a memory areamemory_type, address, data_type, value

Query Parameters

ParameterDescriptionExample
operationOperation type: READ or WRITEREAD
memory_typeMemory area: DM, CIO, WR, HR, AR, TIM, CNT, EMDM
addressWord address in the memory area100, 200
data_typeFINS data typeREAL, INT, UINT, DINT, BOOL
countNumber of consecutive values to read (READ only)10
valueValue to write (WRITE only)25.5, 100, true

Read Example

Read a REAL value from DM area on demand:
ADD EVENT ReadDM
    WITH SOURCE_TOPIC "fins/commands/read"
    WITH DESTINATION_TOPIC "fins/responses/read"
    WITH QUERY "{operation: READ, memory_type: DM, address: 100, data_type: REAL}"

Write Example

Write a REAL value to DM area on demand:
ADD EVENT WriteDM
    WITH SOURCE_TOPIC "fins/commands/write"
    WITH DESTINATION_TOPIC "fins/responses/write"
    WITH QUERY "{operation: WRITE, memory_type: DM, address: 200, data_type: REAL, value: 25.5}"

Complete Examples

Read values from DM area:
DEFINE ROUTE OmronBasic WITH TYPE FINS
    ADD FINS_CONFIG
        WITH IP "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

Modbus TCP

Universal industrial protocol support.

Industrial Overview

Common patterns for all industrial routes.