Skip to content

Adding EtherNet/IP (Generic) Devices ​

Last updated

For EtherNet/IP devices that aren't Logix controllers: drives (PowerFlex), safety relays, IO-Link masters, scanners. It uses explicit (unconnected) CIP messages, not I/O connections.

Connection fields: IP Address; Port 44818 (any other value is appended as a route path, which you normally don't want).

Tags available with no configuration — the CIP Identity object every device has:

Tag pathType
Identity/VendorIDint
Identity/DeviceTypeint
Identity/ProductCodeint
Identity/Revisionstring (firmware, major.minor)
Identity/Statusint
Identity/SerialNumberstring (8 hex digits)
Identity/ProductNamestring

All seven come from one Get_Attributes_All request per poll. The device's vendor, product, firmware and serial also show in the Device identity card on the device page (read with List Identity, which works even before tags are read).

Tag map ​

Map the other values in Settings → Driver Settings → Tag map (or the Add Device wizard). Each row is one tag, from one of two sources:

SourceFieldsUse for
AssemblyInstance (the assembly instance, e.g. 100), Byte offset, CIP type, optional BitValues in a device's input/output assembly, as listed in its EDS file or manual (e.g. "Assembly 101, bytes 2–3: output frequency")
AttributeClass (hex such as 0x93, or a number), Instance, Attribute, CIP type, WritableOne object attribute, e.g. a drive parameter

CIP types: BOOL, SINT, USINT, INT, UINT, DINT, UDINT, REAL, LINT, LREAL, WORD, DWORD, SHORT_STRING, STRING. All are little-endian, as CIP sends them. REAL and LREAL publish as float, the strings as string, BOOL or any value with a Bit as bool, the rest as int.

  • Each assembly is read once per poll (Get_Attribute_Single of attribute 3), however many tags use it. A tag whose offset runs past the end of the data the device returns reads Bad.
  • Bit picks one bit of the value (0 is the lowest), e.g. bit 3 of a UINT status word.
  • Assembly tags are read-only: writing one would mean rewriting the whole output assembly, which an I/O connection usually owns.
  • Attribute tags with Writable ticked accept writes (with Allow Tag Writes on). The value is encoded as the row's CIP type and sent with Set_Attribute_Single.

The same map in driverConfig form, for the REST API:

json
{
  "driverConfig": {
    "tags": [
      { "name": "Drive/OutputFreq", "assembly": 101, "offset": 2, "cip_type": "UINT" },
      { "name": "Drive/Faulted", "assembly": 101, "offset": 0, "cip_type": "UINT", "bit": 3 },
      { "name": "Drive/AccelTime", "class_code": "0x93", "instance": 41, "attribute": 9, "cip_type": "UINT", "writeable": true }
    ]
  }
}
  • class_code, service (default "0x0e" Get_Attribute_Single) and write_service (default "0x10" Set_Attribute_Single) take hex strings or numbers.
  • Without cip_type, the row's data_type picks one: int → DINT, float → REAL, bool → BOOL, string → SHORT_STRING.

See also ​

Scada.Ink Help Center