Omron FINS

Manual for Omron FINS device and variable configuration in the configuration area.

Updated 20 min read
On this page (10 sections)
  1. Overview
  2. Device Settings
  3. Device Advanced Settings
  4. FINS/TCP and FINS/UDP
  5. Variable Settings
  6. Addressing
  7. Variable Arrays
  8. Reading and Faults
  9. Writing
  10. Notes

FINS (Factory Interface Network Service) is the message protocol of Omron PLCs. EnvisionSCADA communicates with Omron PLCs as a FINS client over FINS/TCP or FINS/UDP. This covers the CS, CJ and CP series through an Ethernet Unit or a built-in Ethernet port, and the NJ and NX series through the memory they provide for CJ-series Units: the CIO, Work, Holding, DM and EM areas. Each Omron FINS device represents one PLC connection. Variables map PLC words, bits, strings and timer or counter values into the project variable space.

Configure the device first, then add variables to it. A variable is referenced at runtime by its full name, for example Tank1_Level, or PLC1.Tank1_Level when the name is written as {Device}.Tank1_Level on the device PLC1.

The PLC answers FINS on port 9600 unless the port is changed in the unit settings. Which transports a controller offers depends on the model:

ControllerTransport
CS1W-ETN21 and CJ1W-ETN21 Ethernet UnitsFINS/TCP (up to 16 connections) and FINS/UDP
NJ seriesFINS/TCP and FINS/UDP
NX701-xx20FINS/TCP and FINS/UDP
NX102, NX502FINS/UDP, and FINS/TCP on port 2
NX1P2FINS/UDP
CJ2 CPU built-in port, CP1 seriesFINS/UDP. FINS/TCP depends on the model; see the operation manual of the unit.

An NJ or NX controller answers FINS for the memory used for CJ-series Units, so the Auxiliary area and the timers and counters are read from CS, CJ and CP PLCs. A write to an NJ or NX controller requires FINS write protection to be turned off in the controller settings.

Variables address PLC memory in CX-Programmer notation, for example D100, CIO10.05, W20 or E0_100. EnvisionSCADA reads neighbouring addresses together in one request and combines scattered values into one multiple memory area read, which keeps the number of requests per scan low.

The Omron FINS entry is marked BETA in the configuration menu while the driver is released for evaluation.

Device Settings

Each Omron FINS device represents one PLC connection. Configure the connection endpoint, the transport, the FINS node addresses, the timing and the block scanning options.

Create a new device with the Add button in the toolbar. The Add device dialog contains all device settings organized in the sections General, Connection, FINS Node Addresses, Scanning, and Diagnostics, with default values already filled in. Enter at least the Name and IP Address and press Create. The defaults connect over FINS/TCP to port 9600 with automatic node addresses, which suits a PLC on the local network.

The device row shows Enable, Name, IP Address, Port, Transport, Scan Rate, Timeout, Template, Description, Simulation, Status and Quality, and these values can be edited in place. The other settings are available as table columns, which are shown with Columns as described in the Configuration Tables article. Press the Settings icon on a device row to open the Edit device dialog, which contains the same sections and all settings of the device. Press Save to apply the changes.

SettingDescriptionExampleUnits / Format
EnableEnables or disables this Omron FINS device.trueBoolean
SimulationRuns the device in simulation mode. The device does not open its real connection; its variables stay available and become read and write in memory like Local variables, with a Good status and a Channel State of Simulation, so the project can be tested without hardware. Written values are held in memory only and reset when the application restarts.falseBoolean
NameUnique name for this Omron FINS device. Used as the device name in runtime variable references that start with {Device}.PLC1Text
IP AddressIP address of the Ethernet Unit or the built-in Ethernet port of the PLC.192.168.1.40IP Address
PortFINS port of the PLC, used by FINS/TCP and FINS/UDP alike.9600Integer
TransportFINS/TCP or FINS/UDP. FINS/TCP is the default: a lost connection is detected at once and the PLC allocates the FINS node address of EnvisionSCADA. Use FINS/UDP for a CPU or port that offers FINS/UDP only, for example an NX1P2. See FINS/TCP and FINS/UDP below.FINS/TCPEnum
Scan RatePolling interval. All variables of the device are read once per scan cycle.1000Milliseconds
TemplateOptional device template name. When set, this device uses a shared variable list from the named template device.OmronTemplateText
DescriptionFree text description for documentation purposes.Packaging line PLCText

Device Advanced Settings

The following settings are available in the Connection, FINS Node Addresses, Scanning, and Diagnostics sections of the device dialog. The defaults work for a PLC on the local FINS network. A node address of 0 is automatic, as described per setting.

14 rows
SettingDescriptionDefaultUnits / Format
TimeoutTime allowed for each request and for the connection. A request without an answer in time, after the retries on FINS/UDP, sets the device Offline and starts a reconnect.3000Milliseconds (100 to 300000)
RetriesFINS/UDP only. Number of times an unanswered request is sent again, each time with a new service ID (SID), before the device is set Offline. 0 sends each request once.1Integer (0 to 10)
Local PortFINS/UDP only. Local UDP port EnvisionSCADA sends from. 0 uses any free port, which suits the address conversion method automatic generation (dynamic), the default of the Ethernet Unit. Set 9600 when the unit uses automatic generation (static), the IP address table method or the combined method, because these send the response to port 9600. Each enabled FINS/UDP device uses its own Local Port, except 0.0Integer (0 to 65535)
Destination Network (DNA)FINS network address of the PLC. 0 is the local FINS network. Another value reaches a PLC on another FINS network through the routing tables of the PLCs.0Integer (0 to 127)
Destination Node (DA1)FINS node address of the Ethernet Unit or port of the PLC. 0 is automatic: the node address the PLC reports on the FINS/TCP connection, or the last number of the IP address of the PLC for FINS/UDP. Enter the node address when it differs from the last number of the IP address.0Integer (0 to 254)
Destination Unit (DA2)FINS unit address. 0 is the CPU Unit, which holds the memory areas.0Integer (0 to 255)
Source Network (SNA)FINS network address EnvisionSCADA sends. 0 is the local FINS network.0Integer (0 to 127)
Source Node (SA1)FINS node address of EnvisionSCADA. 0 is automatic: allocated by the PLC on the FINS/TCP connection, or the last number of the IP address of EnvisionSCADA toward the PLC for FINS/UDP. A fixed value on FINS/TCP is requested from the PLC at every connection.0Integer (0 to 254)
Source Unit (SA2)FINS unit address EnvisionSCADA sends. 0 is usual.0Integer (0 to 255)
Allow Scanning BlocksReads neighbouring addresses of one memory area together in one block with MEMORY AREA READ. When disabled, each variable is read at its own addresses only: variables of up to 4 words are combined in MULTIPLE MEMORY AREA READ requests, and every longer variable is read with its own MEMORY AREA READ.trueBoolean
Max Block Size AllowedMaximum number of words in one block of neighbouring addresses, read with one MEMORY AREA READ. FINS allows up to 999 words per MEMORY AREA READ over Ethernet. The default of 700 words keeps a FINS/UDP response inside one Ethernet frame.700Words (1 to 999)
Allow Jumping RegistersAllows a request to span unused addresses between configured variables.trueBoolean
String Byte OrderOrder of the two characters in each word of a STRING. High byte first (CS, CJ, CP) is the layout of the CS, CJ and CP series, with the first character in the high byte of the first word. Low byte first (NJ, NX) is the layout of the NJ and NX series.High byte first (CS, CJ, CP)Enum
VerboseLogging level. 0 logs connection changes and errors. 1 also logs every connection attempt, the number of requests per scan and one line per FINS request with the command, the address, the number of words, the end code and the response time. 2 also logs every frame in hexadecimal.0Integer (0 to 2)

FINS/TCP and FINS/UDP

With FINS/TCP, EnvisionSCADA opens a TCP connection and exchanges FINS node addresses with the PLC before the first request. With Source Node 0 the PLC allocates the node address of EnvisionSCADA from its automatic range, 239 to 254 on an Ethernet Unit, so each connection receives its own node address and a reconnect is accepted at once. An Ethernet Unit serves up to 16 FINS/TCP connections; when all of them are in use, the PLC refuses the connection and the System Log shows the error reported by the PLC.

With FINS/UDP every request is one datagram. EnvisionSCADA sends an unanswered request again up to the Retries setting and ignores a late answer to an earlier request. The PLC sends its response according to the address conversion method of the Ethernet Unit: with automatic generation (dynamic) it answers the address and port the request came from, so Local Port 0 works; with automatic generation (static), the IP address table method or the combined method it answers port 9600, so set Local Port to 9600.

In a redundant installation, only the primary server communicates with the PLC. The standby server opens no connection and sends no requests, and it takes over the devices when it becomes primary. With FINS/TCP and Source Node 0 the new primary receives its own node address, so the takeover does not wait for the connection of the former primary to expire in the PLC.

Variable Settings

Variables are added per device. Each variable maps one PLC address to the project variable space.

Create a new variable with the Add button in the toolbar. The Add variable dialog organizes all variable settings in the tabs General, Scaling, Historian, and Gateway, with default values already filled in. Enter at least the Name and Address on the General tab and press Create. When the variable is created on a template device, it is also created on all instance devices that use the template. On a template device, start the Name with the {Device} replacer, so that each instance device gets its own variable. The Name must resolve to a different variable on each device; this is checked for every instance device before anything is saved, when a variable is created and when it is renamed.

The variable row shows Enable, Name, Asset, Type, Address, and Description directly and these values can be edited in place. Press the Settings icon on a variable row to open the Edit variable dialog, which contains the same tabs and all settings of the variable. Press Save to apply the changes. Changes made on a template device are also applied to the matching variable on all instance devices, while each instance keeps its own Modbus Address value. The Gateway tab settings Modbus Address, OPC UA, Writeable, MQTT Publisher, Kafka Device, Kafka Remap Device, and Kafka Remap Variable are also available as table columns, which are shown with Columns as described in the Configuration Tables article.

33 rows
SettingDescriptionExampleUnits / Format
EnableEnables or disables this variable.trueBoolean
NameFull variable name. The {Device}. replacer prefix is optional: {Device} resolves to the device name when the device loads, so the variable follows a device rename automatically, while a literal name is used exactly as written and keeps working across device renames. The resolved name must be unique across the whole project.{Device}.Pump1_SpeedText
AssetAsset tag used to group and filter this variable.PackagingLineText
TypeData type of the variable: BOOL, INT, UINT, DINT, UDINT, REAL, LREAL or STRING. The type decides which address forms are valid; see the Addressing section.INTEnum
AddressPLC address in CX-Programmer notation, for example D100, CIO10.05, E0_100 or D200:20. See the Addressing section for the memory areas and their notation.D100Text
DescriptionFree text description for documentation purposes.Pump 1 speed setpointText
User GroupsComma-separated list of user groups that have access to this variable at runtime.Operators,SupervisorsText
Signature RequiredRequires an electronic signature for each write to this variable from a page object, the Live Manager, the Runtime API or MCP while Part 11 compliance mode is enabled and Write variables marked Signature Required is selected under Signature Required Actions on the Parameters page. The write rights of the user and the value range are checked first, so a refused write does not open the Electronic Signature dialog. A variable created while Part 11 compliance mode is enabled starts with Signature Required selected. Writes by alarm, event and schedule actions, Python scripts and the gateways run without a signature. See the Electronic Signatures article.trueBoolean
Recipe TargetsRecipe type name (target) this variable belongs to. Supports the {Device} placeholder, which resolves to the owning device name so one naming rule can spread a set of variables across several devices.Line1Text
Recipe Parameter NameExplicit name of the parameter this variable represents inside a recipe. Variables that fill the same role across different targets share the same Recipe Parameter Name, which is how values are matched on Apply and Snapshot. A variable takes part in recipes only when both Recipe Targets and Recipe Parameter Name are set.SetpointText
Trend GroupsComma-separated list of trend group names this variable belongs to. A variable can be in several groups. The groups are the filter the Trend Analyst offers when picking variables. The names accept the {Device}, {DeviceName} and {VariableName} placeholders, so one UDT definition gives every instance its own group.Pumps,{Device}Text
UnitsEngineering unit label displayed alongside the value.rpmText
FormatDisplay format of the value on screens and in the Trend Analyst: the value of a Label or Input (unless the object uses its own Floating Point and Decimals), the value text of a Knob and a Slider, the Trend tooltip, a Data Grid Variable column, the right-click menu, Quick Trend, the current value in the Recipe Manager, variable tokens in alarm and event messages, and the Trend Analyst tooltip, summary and pen Format. An Input shows the plain value while it is being edited. 0 shows no decimals, 0.00 always shows two decimals, 0.0## shows one to three decimals and #,##0.00 adds a thousands separator, with up to 15 decimals. Values are rounded half away from zero for display only; alarms and expressions keep the full value, and so does the historian unless Round to Format is on. ReadVariable in the runtime API and MCP returns the Format beside the full value. Leave empty to show the value as received.0.00Text
Min RawMinimum raw value from the PLC, used for scaling.0Number
Max RawMaximum raw value from the PLC, used for scaling.32767Number
Min ScaledMinimum engineering value corresponding to Min Raw.0Number
Max ScaledMaximum engineering value corresponding to Max Raw.3000Number
ConverterName of a Converter defined in the Converters configuration to apply a custom read/write expression.RawToPressureText
HistorianEnables logging of this variable's values to the historian database.trueBoolean
Round to FormatStores the historian samples of this variable rounded to the decimals of its Format, as a plain number: with Format 0.00 the value 34.30487 is stored as 34.3. The deadband compares the rounded values, so with Deadband 0 a sample is written only when the rounded value changes. On a variable without scaling the Raw value is stored empty, since it equals the value. The live value, alarms, expressions and all interfaces keep the full value. Applies to new samples only; samples already stored keep their values. Requires a Format.falseBoolean
DeadbandMinimum change in value required before a new historian record is written.0.5Number
Minimum Time (s)Minimum time in seconds between historian records for this variable.0Seconds
Sample GroupName of the Sample Group that controls the historian sampling rate for this variable.Text
History SourceWhere the trends read the history of this variable: Project default (the History Source with Project default enabled on the History Sources page, or the EnvisionSCADA Historian when no source has it), EnvisionSCADA Historian (the samples recorded while Historian is on) or a History Source of the History Sources page (a query on a Database Connection or the fetch() function of a Python Module script). In the table, an empty History Source is Project default and Historian is the EnvisionSCADA Historian. Live values always come from the variable itself. Test reads the last 24 hours with the settings in the dialog. See the History Sources article.Project defaultEnum
History ReferenceWhat the History Source reads for this variable: the reference passed to fetch(), or @Variable of the History Query. When empty, the History Reference of the source is used, by default the full name of the variable; the field shows it in italics. {Name} is replaced by the full name of the variable. Browse lists the references that a Script source offers.CDT158Text
History ParametersShown for a Script source: optional key=value pairs separated by ;, added to the History Parameters of the source. A key set here replaces the same key of the source. The field shows the History Parameters of the source in italics.scale=0.1Text
Modbus AddressOptional address on the built-in Modbus TCP and Modbus RTU servers where this variable is exposed. The servers are enabled in the Gateways section of the Parameters page. Each instance device keeps its own value.%MW0See Modbus TCP Addressing
OPC UAExposes this variable as an OPC UA node. When Historize is also ticked, the Historian data of the variable is readable through OPC UA Historical Access.trueBoolean
WriteableAllows external systems to write this variable through the gateways: the OPC UA Server, the Modbus TCP and Modbus RTU servers, the MQTT publisher when Subscribe is enabled on the publisher, and Kafka when Consumer is enabled on the Kafka device. Writes from pages, actions, scripts and the API are independent of this setting. A0 to A447 and timer and counter completion flags are read only and cannot be marked Writeable.falseBoolean
MQTT PublisherName of the MQTT publisher that publishes this variable, typed or chosen with the ... button. A variable is published by one publisher, and the name must match a publisher on the MQTT Publishers page. Leave empty to keep the variable unpublished. Writes from the broker need Subscribe on the publisher and Writeable on the variable. See the MQTT Publishers article.CloudIoTText
Kafka DeviceName of the Kafka device this variable is linked to, typed or chosen with the ... button. Every value change of a linked variable is produced to the Producer Topic of the Kafka device while the device is enabled. Writes from the Consumer Topic need Consumer on the Kafka device and Writeable on the variable. Leave empty to keep the variable unlinked. See the Kafka Devices article.KafkaBroker1Text
Kafka Remap DeviceDevice name used for this variable in Kafka messages instead of the name of the device that owns the variable. Inbound messages from the Consumer Topic are matched on this name as well. Leave empty to use the device name.RemotePLC1Text
Kafka Remap VariableVariable name used for this variable in Kafka messages instead of its own name. Inbound messages from the Consumer Topic are matched on this name as well. Leave empty to use the variable name without the device name, for example Pump1_Speed for PLC1.Pump1_Speed on device PLC1.SpeedText

Addressing

Addresses use the notation of CX-Programmer: an area prefix followed by the word number in decimal. A bit address adds the bit number 00 to 15 after a period, and a STRING adds its length in characters after a colon. The EM bank number is hexadecimal, as in CX-Programmer, so EA_100 is word 100 of EM bank A (10). Upper and lower case are both accepted.

AreaNotationRangeExample
CIOCIO followed by the word number. A number without a prefix is also CIO.0 to 6143CIO10, CIO10.05, 10.05
WorkW0 to 511W20, W20.03
HoldingH0 to 1535H5, H5.15
AuxiliaryA. A0 to A447 are read only.0 to 959A448, A448.00
DMD or DM0 to 32767D100, D100.07, DM100
EME, the bank number (hexadecimal 0 to 18), an underscore and the word number0 to 32767 per bankE0_100, EA_100.03, E10_5
TimerT or TIM0 to 4095T5, TIM5
CounterC or CNT0 to 4095C7, CNT7

The ranges are the largest any supported PLC offers. A PLC with less memory refuses an address beyond its memory; the variable then shows FormatError while the other variables keep reading, as described in Reading and Faults.

A value of several words must fit in its area: an LREAL at D32766 would run past D32767 and is refused when the variable is saved. A timer or counter is read as BOOL for its completion flag and as INT or UINT for its present value.

TypeDescriptionSizeAddress
BOOLSingle bit, read as 0 or 1.1 bitA bit address such as CIO10.05, or a timer or counter (completion flag, read only)
INTSigned 16 bit integer.1 wordA word address, or a timer or counter (present value)
UINTUnsigned 16 bit integer.1 wordA word address, or a timer or counter (present value)
DINTSigned 32 bit integer, stored in two consecutive words, low word first.2 wordsA word address
UDINTUnsigned 32 bit integer, stored in two consecutive words, low word first.2 wordsA word address
REALIEEE 754 single precision floating point, stored in two consecutive words, low word first.2 wordsA word address
LREALIEEE 754 double precision floating point, stored in four consecutive words, lowest word first.4 wordsA word address
STRINGASCII text with its length in characters in the address. The text ends at the first NUL character; a written text is padded with NUL characters. The character order within each word is set by String Byte Order on the device.Length divided by 2, rounded upA word address with :length (1 to 256), for example D200:20

Variable Arrays

A variable can expand into an array by setting the Array size field to a value between 2 and 512. The variable itself is the first element and its Name must end in the first index, for example Levels[0]. The remaining elements are created automatically as Levels[1], Levels[2] and so on. Each element advances the Address by the size of the data type: INT and UINT by 1 word, DINT, UDINT and REAL by 2 words and LREAL by 4 words. A BOOL on a bit address advances by one bit and continues in the next word after bit 15, so CIO20.15 is followed by CIO21.00. A timer or counter advances by one. Arrays use the types BOOL, INT, UINT, DINT, UDINT, REAL and LREAL, and the last element must stay inside its memory area.

The element rows are managed by the first element: they follow its settings, appear locked in the variable list, and are edited by editing the first element. Changing the Array size adds or removes elements at the end. Renaming the first element or changing its address renames and re-addresses all elements. Setting Array size back to 0 while elements exist removes the elements.

To turn the elements into ordinary independent variables, use the Ungroup array action on the first element's row in the variable list, or the Configuration API (POST /API/Config/VariableArrays/Ungroup). All rows are kept and only the grouping is removed. This is one-way. The element count badge next to the first element's name folds and unfolds the element rows in the list.

Reading and Faults

EnvisionSCADA plans the reads once when the device starts. Neighbouring addresses of one area are read with MEMORY AREA READ in blocks of up to Max Block Size Allowed words. Small values spread over the memory are combined into one MULTIPLE MEMORY AREA READ of up to 167 values. With Verbose 1 the System Log shows the number of requests per scan and every request. A PLC that answers MULTIPLE MEMORY AREA READ as an unsupported command is read with MEMORY AREA READ from then on, which is logged once.

When the PLC refuses an address, for example an address beyond the memory of the CPU, EnvisionSCADA finds the variable that causes it, sets it to FormatError, logs the end code once and reads it on its own every 60 seconds. The other variables of the device keep reading. When the address reads again, the variable returns to Good and rejoins the regular reads.

When the PLC does not answer, the connection is lost or the PLC reports a communication error, the Channel State of the device becomes Offline, its Channel Quality Bad and every variable ConnectionLost. EnvisionSCADA connects again after Scan Rate and doubles the waiting time after each failed attempt, up to 30 seconds. The cause is logged once per outage; Verbose 1 and 2 log every attempt.

Every response of the PLC also reports whether the CPU Unit has a fatal or a non-fatal error, for example a battery error. EnvisionSCADA logs each change of these flags in the System Log and keeps reading the values.

Writing

A write is sent as MEMORY AREA WRITE and is complete when the PLC confirms it. When the PLC refuses the write, for example because the memory is write protected or the operating mode does not allow it, the value is not written, the variable shows FormatError until the next successful read and the System Log shows the end code. A write through the Runtime API or MCP returns this message instead of OK.

The value must match the type: a number within the range of the type for the numeric types, and true, false, 1 or 0 for a BOOL. A value outside the range, for example 40000 for an INT, or text for a number is not sent. A STRING longer than its length is cut to the length.

The Set, Reset, Toggle and Momentary On actions write to BOOL variables on a bit address. Momentary On writes the bit on, waits 1.5 seconds and writes the bit off. A0 to A447 and timer and counter completion flags are read only.

When the PLC does not answer a write within Timeout, the write is reported as failed. The PLC may have carried it out, which the next read shows.

Notes

A UDT definition maps a variable member onto an Omron FINS device through the Fins group of the member, with a Type and an Address. The Address accepts tokens and expressions, for example D{BaseAddress}, E{Bank}_100 or D{= {Base} + 2 }, so one definition serves PLCs with different memory layouts. An address without tokens is checked when the definition is saved. See the UDT Manager article.

Enable Verbose only during commissioning or diagnostics. Verbose 1 and 2 log every request and increase the log volume significantly.

Something missing or wrong in this article? Contact us