The EthernetIP configuration pages define Ethernet/IP devices and their variables. Create the device entry first, then configure the variables that represent controller tags or mapped data points.
Use the device page for connection-level settings. Use the variable page for tag mapping, datatype selection, and naming used elsewhere in the project.
Keep the device and variable naming aligned with the PLC program and plant naming standard so the relationship remains clear across systems.
Device Settings
Each EthernetIP device defines a connection to a PLC or controller. Configure the connection endpoint, routing path, and timing 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, Scanning, and Diagnostics, with default values already filled in. Enter at least the Name and IP Address and press Create.
The device row shows Enable, Name, IP Address, Port, PLC, Path, Scan Rate, Template, and Description directly and these values can be edited in place. 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.
| Setting | Description | Example | Units / Format |
|---|---|---|---|
| Enable | Enables or disables communication with the device. | true | Boolean |
| Simulation | Runs 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. | false | Boolean |
| Name | Unique device name used as a prefix for all variables on this device. | PLC1 | Text |
| IP Address | IP address of the EthernetIP device. | 192.168.1.10 | IPv4 |
| Port | TCP port used for the CIP connection. EtherNet/IP devices use 44818. | 44818 | Integer (1-65535) |
| PLC | PLC family. Determines the CIP communication method and the format of the variable Address. | LGX | Enum: LGX, MLGX800, MLGX, SLC500, PLC5 |
| Path | CIP routing path to reach the target controller. Required for LGX and MLGX800. Leave empty for MLGX, SLC500 and PLC5 unless the connection routes over a DH+ bridge. | 1,0 | Text |
| Scan Rate | Polling interval for the device. | 1000 | ms |
| Template | Template device name. When set, all variables from the template are cloned to this device at startup. | PLC_Template | Text |
| Description | Free text description for documentation purposes. | Main PLC line 1 | Text |
| Timeout | Timeout for a single tag read or tag write, and for establishing the connection to the controller. | 5000 | ms |
| Verbose | Logging verbosity level. 0 is silent, higher values produce more diagnostic output. | 0 | Integer |
No rows match the filter.
PLC Types
Select the PLC family that matches the controller. The PLC setting determines both the communication method and the format of the variable Address.
LGX and MLGX800 address variables by tag name and require a Path. MLGX, SLC500 and PLC5 address variables by data file and take no Path unless the connection routes over a DH+ bridge.
| Type | Description | Address format |
|---|---|---|
| LGX | ControlLogix or CompactLogix (full CIP routing with tag-based access). | Tag name, for example Pump1_Speed |
| MLGX800 | Micro800 series (Micro820, Micro850 and similar). | Tag name, for example Pump1_Speed |
| MLGX | MicroLogix series (file-based addressing). | Data file, for example N7:0 |
| SLC500 | SLC 500 series (file-based addressing). | Data file, for example N7:0 |
| PLC5 | PLC-5 series (file-based addressing). | Data file, for example N7:0 |
No rows match the filter.
Variable Settings
Each EthernetIP variable maps a controller tag to a named variable in the EnvisionSCADA namespace.
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.
| Setting | Description | Example | Units / Format |
|---|---|---|---|
| Enable | Enables or disables polling of this variable. | true | Boolean |
| Name | Full 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_Speed | Text |
| Asset | Asset path for logical grouping. | Line1/Pump1 | Text |
| Type | Data type of the variable. | REAL | Enum |
| Address | Tag address in the controller. | Program:MainProgram.Pump1_Speed | Text |
| Description | Free text description for documentation. | Pump 1 speed feedback | Text |
| Recipe Targets | Recipe 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. | Line1 | Text |
| Recipe Parameter Name | Explicit 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. | Setpoint | Text |
| Trend Groups | Comma-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 |
| User Groups | Comma-separated user groups allowed to write this variable from the runtime. | Operators,Engineers | Text |
| Signature Required | Requires 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. | true | Boolean |
| Units | Engineering units displayed alongside the value. | RPM | Text |
| Format | Display 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.00 | Text |
| Min Raw | Minimum raw value for linear scaling. | 0 | Number |
| Max Raw | Maximum raw value for linear scaling. | 27648 | Number |
| Min Scaled | Minimum scaled (engineering) value. | 0 | Number |
| Max Scaled | Maximum scaled (engineering) value. | 100 | Number |
| Converter | Converter name applied to the variable value. | Celsius_Fahrenheit | Text |
| Deadband | Minimum value change required before the historian records a new sample. | 0.5 | Number |
| Minimum Time | Minimum time between historian samples regardless of value change. | 1000 | ms |
| Sample Group | Sample group name for historian grouping. | Fast | Text |
| Historian | Enables historian logging for this variable. | true | Boolean |
| Round to Format | Stores 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. | false | Boolean |
| History Source | Where 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 default | Enum |
| History Reference | What 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. | CDT158 | Text |
| History Parameters | Shown 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.1 | Text |
| Modbus Address | Optional 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. | %MW0 | See Modbus TCP Addressing |
| OPC UA | Exposes this variable on the built-in OPC UA server. When Historize is also ticked, the Historian data of the variable is readable through OPC UA Historical Access. | true | Boolean |
| Writeable | Allows 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. | true | Boolean |
| MQTT Publisher | Name 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. | CloudIoT | Text |
| Kafka Device | Name 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. | KafkaBroker1 | Text |
| Kafka Remap Device | Device 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. | RemotePLC1 | Text |
| Kafka Remap Variable | Variable 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. | Speed | Text |
No rows match the filter.
Supported Data Types
The Type field determines how the tag value is interpreted.
| Type | Description |
|---|---|
| BOOL | Single bit value (true/false). |
| BYTE | Unsigned 8-bit integer. |
| INT | Signed 16-bit integer. |
| UINT | Unsigned 16-bit integer. |
| WORD | Unsigned 16-bit word. |
| DINT | Signed 32-bit integer. |
| UDINT | Unsigned 32-bit integer. |
| DWORD | Unsigned 32-bit word. |
| REAL | 32-bit IEEE 754 floating point. |
| LINT | Signed 64-bit integer. |
| ULINT | Unsigned 64-bit integer. |
| LREAL | 64-bit IEEE 754 floating point. |
| STRING | Character string. |
No rows match the filter.
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 Temps[0]. The remaining elements are created automatically as Temps[1], Temps[2] and so on. The Address must end in an array index such as MyArray[0], matching the array as it is declared in the controller, and each element advances that index.
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.
Notes
The Address field uses the addressing format of the selected PLC family. For LGX and MLGX800, use controller-scoped or program-scoped tag paths such as TagName or Program:MainProgram.TagName. Array elements are addressed with square brackets, for example MyArray[0]. For MLGX, SLC500 and PLC5, use the data file address, for example N7:0.
The Path field specifies the CIP routing path to reach the target controller. For a direct connection to a controller in slot 0 use 1,0. For routing through an EN2T module in slot 2 of a remote chassis, use 1,2,2,192.168.1.20,1,0. Leave Path empty for MLGX, SLC500 and PLC5 unless the connection routes over a DH+ bridge.
A variable whose tag cannot be resolved on the controller is reported individually with status Format Error and does not affect the other variables on the device. When the controller cannot be reached, the device reports Channel State Offline and all its variables report Connection Lost.
Variables are referenced at runtime using the format DeviceName.VariableName, for example PLC1.Pump1_Speed.
A value written to a variable must match the tag type: a number for the numeric types, and true, false or a number for a BOOL, where any number other than 0 sets the bit. A value that does not match, for example text written to a REAL tag, is not sent and the controller keeps its value. The System Log records the rejected write, and the variable status shows FormatError until the next successful read of the variable.