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.
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"
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'
UDP for lower latency:
Copy
Ask AI
ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "UDP" WITH LOCAL_NODE '1' WITH REMOTE_NODE '0' WITH TIMEOUT '2'
UDP requires proper node addressing and may have firewall considerations.
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"
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"
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"
Read CIO and Work areas:
Copy
Ask AI
DEFINE ROUTE OmronIO WITH TYPE FINS ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "TCP" ADD MAPPING IOStatus WITH EVERY 100 MILLISECONDS ADD TAG DigitalInputs WITH ADDRESS "0" WITH MEMORY_TYPE "CIO" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/io/di" ADD TAG DigitalOutputs WITH ADDRESS "100" WITH MEMORY_TYPE "CIO" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/io/do" ADD TAG WorkBits WITH ADDRESS "0" WITH MEMORY_TYPE "WR" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/work"
Access individual bits:
Copy
Ask AI
DEFINE ROUTE OmronBits WITH TYPE FINS ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "TCP" ADD MAPPING BitStatus WITH EVERY 100 MILLISECONDS ADD TAG StartButton WITH ADDRESS "0" WITH BIT_ADDRESS '0' WITH MEMORY_TYPE "CIO" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "plc/buttons/start" ADD TAG StopButton WITH ADDRESS "0" WITH BIT_ADDRESS '1' WITH MEMORY_TYPE "CIO" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "plc/buttons/stop" ADD TAG MotorRunning WITH ADDRESS "100" WITH BIT_ADDRESS '0' WITH MEMORY_TYPE "CIO" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "plc/motor/running" WITH WRITABLE "true" WITH DESTINATION_TOPIC "plc/motor/running/set"
Read timer and counter values:
Copy
Ask AI
DEFINE ROUTE OmronTimerCounter WITH TYPE FINS ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "TCP" ADD MAPPING TimersCounters WITH EVERY 500 MILLISECONDS ADD TAG Timer0 WITH ADDRESS "0" WITH MEMORY_TYPE "TIM" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/timer/0" WITH SCALING "0.1" WITH UNIT "s" ADD TAG Timer1 WITH ADDRESS "1" WITH MEMORY_TYPE "TIM" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/timer/1" ADD TAG Counter0 WITH ADDRESS "0" WITH MEMORY_TYPE "CNT" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/counter/0" ADD TAG Counter1 WITH ADDRESS "1" WITH MEMORY_TYPE "CNT" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/counter/1"
Read and write process values:
Copy
Ask AI
DEFINE ROUTE OmronControl WITH TYPE FINS ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "TCP" ADD MAPPING ControlLoop WITH EVERY 200 MILLISECONDS ADD TAG ProcessValue WITH ADDRESS "200" WITH MEMORY_TYPE "DM" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/pv" WITH UNIT "°C" WITH PUBLISH_MODE "JSON" ADD TAG Setpoint WITH ADDRESS "202" WITH MEMORY_TYPE "DM" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/sp" WITH UNIT "°C" WITH WRITABLE "true" WITH DESTINATION_TOPIC "control/sp/write" WITH MIN_VALUE "0" WITH MAX_VALUE "100" ADD TAG Output WITH ADDRESS "204" WITH MEMORY_TYPE "DM" WITH DATA_TYPE "REAL" WITH SOURCE_TOPIC "control/output" WITH UNIT "%" ADD TAG AutoMode WITH ADDRESS "206" WITH BIT_ADDRESS '0' WITH MEMORY_TYPE "DM" WITH DATA_TYPE "BOOL" WITH SOURCE_TOPIC "control/auto" WITH WRITABLE "true" WITH DESTINATION_TOPIC "control/auto/write"
Read retentive data from HR area:
Copy
Ask AI
DEFINE ROUTE OmronHolding WITH TYPE FINS ADD FINS_CONFIG WITH ADDRESS "192.168.1.100" WITH PORT '9600' WITH PROTOCOL "TCP" ADD MAPPING RetentiveData WITH EVERY 5 SECONDS ADD TAG TotalRuntime WITH ADDRESS "0" WITH MEMORY_TYPE "HR" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "plc/stats/runtime" WITH UNIT "seconds" ADD TAG ProductionTotal WITH ADDRESS "2" WITH MEMORY_TYPE "HR" WITH DATA_TYPE "DINT" WITH SOURCE_TOPIC "plc/stats/production" ADD TAG LastErrorCode WITH ADDRESS "4" WITH MEMORY_TYPE "HR" WITH DATA_TYPE "UINT" WITH SOURCE_TOPIC "plc/stats/error"