EtherNet/IP Protocol
EtherNet/IP is an industrial protocol that allows bidirectional data transfer with PLCs that support the protocol. It encapsulates the object-oriented Common Industrial Protocol (CIP). EtherNet/IP communication enables the client to:
- Start and stop sensors
- Load job files
- Align sensors
- Receive sensor states, stamps, and measurement results
|
Implicit messaging is always enabled. |
This section describes the EtherNet/IP message and data formats. The commands described in the sections below are those specific to the Gocator protocol and not the complete EtherNet/IP reference command set.
GoPxL supports EtherNet/IP communication to provide system, sensor group, and scan output data to a PLC. Sensors also accept incoming commands. After you enable EtherNet/IP in the GoPxL web interface, the sensor starts listening on the standard EtherNet/IP port 44818 for one or more EtherNet/IP clients. GoPxL operates as an EtherNet/IP server, and a PLC that connects to it acts as the EtherNet/IP client. All communication is initiated by the PLC, with GoPxL responding to the EtherNet/IP requests.
While the EtherNet/IP protocol includes several types of requests, the two basic operations are reading and writing EtherNet/IP objects. Commands are invoked by the PLC sending set requests. Data is requested by the PLC by sending get requests for EtherNet/IP objects.
EtherNet/IP supports both explicit messaging and implicit messaging. Data can be read as Big-Endian format or Little-Endian format based on the configuration selected in web interface.
Connections Map
The EtherNet/IP protocol supports the following objects. Except for mandatory objects, all objects are mapped to a register assembly. Sensors support all mandatory objects for explicit messaging, including assembly objects. Implicit messaging supports only assembly objects.
Mandatory Objects
Mandatory objects are present in the EtherNet/IP service irrespective of the configured measurement objects.
Attribute |
Name |
Type |
Value |
Description |
Access |
---|---|---|---|---|---|
1 |
Vendor ID |
UINT |
1256 |
ODVA-provided vendor ID |
Get |
2 |
Device Type |
UINT |
43 |
Device type |
Get |
3 |
Product Code |
UINT |
1 |
Product code |
Get |
4 |
Revision |
Structure of |
|
|
Get |
USINT | 1 | Major revision number | |||
USINT | 3 | Minor revision number | |||
6 |
Serial number |
UDINT |
32-bit value |
Sensor serial number |
Get |
7 |
Product Name |
SHORT STRING 32 |
"Gocator" |
Gocator product name |
Get |
The TCP/IP Object contains read-only network configuration attributes such as IP Address. TCP/IP configuration via EtherNet/IP is not supported. See Volume 2, Chapter 5-3 of the CIP Specification for a complete listing of TCP/IP object attributes.
Attribute |
Name |
Type |
Value |
Description |
Access |
---|---|---|---|---|---|
1 |
Status |
UDINT |
|
TCP interface status (dynamic) |
Get |
2 |
Configuration Capability |
UINT |
|
(dynamic) |
Get |
3 |
Configuration Control |
UINT |
|
Product code (dynamic) |
Get |
4 |
Physical Link Object |
Structure (See description) |
See 5.3.3.2.4 of CIP Specification Volume 2: |
Get |
|
5 |
Interface Configuration |
Structure (See description) |
See 5.3.3.2.5 of CIP Specification Volume 2: |
Get |
The Ethernet Link Object contains read-only attributes such as MAC Address (Attribute 3). See Volume 2, Chapter 5-4 of the CIP Specification for a complete listing of Ethernet Link object attributes.
Attribute |
Name |
Type |
Value |
Description |
Access |
---|---|---|---|---|---|
1 |
Interface Speed |
UDINT |
1000 |
Ethernet interface data rate (mbps) |
Get |
2 |
Interface Flags |
UDINT |
See 5.4.3.2.1 of CIP Specification Volume 2:
Bit 0: Link Status
Bit 1: Duplex |
Get |
|
3 |
Physical Address |
Array of 6 USINTs |
MAC address (for example: 00 16 20 00 2E 42) |
Get |
Assembly Objects
All assembly objects are modeled with class 4 and attribute 3. Only the instance ID changes between assembly objects.
A register assembly contains register blocks. This is a one-to-one mapping, which means each EtherNet/IP assembly object will have a corresponding control framework register assembly. These objects are added to GoPxL irrespective of the selection of register assembly, but the data is added to this EtherNet/IP object based on the selection of register assembly.
Object name |
Register assembly |
Supported Block Type Internal Identifier |
Service |
Instance ID |
---|---|---|---|---|
Command input object | Control Input register assembly | "ControlInput" | SetAttributeSingle (0x10) | 0x70 |
Command output object | Control Output register assembly | "ControlOutput" | GetAttributeSingle(0x0E) | 0x71 |
Sensor Group State object | Sensor Group State register assembly | "Scanner" | GetAttributeSingle(0x0E) | 0x72 |
System State object | System State register assembly | "System" | GetAttributeSingle(0x0E) | 0x73 |
Sample State object | Sample State register assembly |
"MeasurementValue" "Stamp" |
GetAttributeSingle(0x0E) | 0x74 |
Implicit Messaging output object | Sample State register assembly |
"MeasurementValue" "Stamp" |
GetAttributeSingle(0x0E) | 0x65 |
Implicit Messaging input object | Implicit Control Input register assembly | "ControlInput" | SetAttributeSingle (0x10) | 0x64 |
The EtherNet/IP protocol supports various blocks types. Each block type can be either an input block or an output block. Input blocks contain write-only objects and are used by the EtherNet/IP client to send commands such as starting or stopping a scan. Output blocks contain read-only objects and are used to store various types information, such as control, system, and sensor group state data, as well as scan output data.
Supported Block Types
The block types supported by the EtherNet/IP protocol are listed in the table below. The size field indicates the number of registers that each block type requires.
Block Type Internal Identifier |
Read or Write only? |
Size (number of EtherNet/IP registers) |
Description |
---|---|---|---|
"ControlInput" | WO | 67 |
Command message set by the EtherNet/IP client. |
"ControlOutput" | RO | 3 | Result data corresponding to a command that was written to the Control Input block. |
"MeasurementValue" | RO | 4 | Measurement value data of a scan output measurement data message. |
"Scanner" | RO | 18 | Information about a specific sensor group. |
"Stamp" | RO | 36 |
Stamp message information. |
"System" | RO | 76 |
Information about the LMI device. |
Control Input
The input of the Control Input block contains the fields described below:
Field |
Type |
Address offset |
Description |
---|---|---|---|
Command Sequence Number | 16u | 0 |
The command sequence number is set by the external client to uniquely identify a command request. This number is sent back in the Control Output. This is an optional field but is recommended that Ethernet IP clients use this to help the clients correlate the Command Status in the Control Output with a specific command request in Control Input. |
Command Identifier | 8u | 2 |
Identifies the requested action from the external client. Supported actions: 0 = No Command 1 = Start Scanning 2 = Stop Scanning 3 = Align Sensor Group 4 = Clear Alignment 5 = Load Job File 6 = Software Trigger
|
Command Arguments |
Array[8u] |
3 |
Arguments for commands that require arguments. For the Load Job File command, the command arguments will contain the null terminated job file name. The job file name must not include the job file extension. The job extension is automatically appended by the Ethernet IP server. This field takes up a maximum of 64 registers. Each byte contains a single character. |
Control Output
The output of the Control Output block contains the fields described below:
Field |
Type |
Address offset |
Description |
---|---|---|---|
Command Sequence Number | 16u | 0 | The command sequence number received from the client in the Control Input. |
Command Status | 8u | 2 |
Status of the command, referenced by the Command Sequence Number. 0 = No Command Received 1 = In Progress 2 = Success 3 = Fail |
System State
The output of the System State block contains the fields described below:
Field |
Type |
Address offset |
Description |
---|---|---|---|
System Uptime | 64u | 0 | Amount of time the application has been running, in seconds. |
System State | 8u | 8 |
Whether system is running or not. 0 = System is stopped 1 = System is running |
Current Job File Name Length | 8u | 9 | Number of characters in the current job file name. |
Current Job File Name | Array[8u] | 10 |
Name of the job file currently loaded into the system, including extension. Maximum length of job file name is 64 characters. Each register contains a single character. Job file name is NOT null terminated. |
Buffer Count | 8u | 74 |
The current amount of buffered scan output data when buffering is enabled. |
Buffer Overflow | 8u | 75 |
A value of 0 indicates that no overflow has occurred. A value of 1 indicates that overflow occurred and data is being lost. |
Sensor Group State
The output of the Sensor Group block contains the fields described below:
Field |
Type |
Address offset |
Description |
---|---|---|---|
Current Encoder Position | 64s | 0 | The current encoder position. |
Current Sync Time | 64u | 8 |
Current time of the clock used to stamp all scan output messages, in microseconds. |
Alignment State | 8u | 16 |
Indicator of whether all devices under the sensor group are aligned (that is, devices in the sensor group all have a non-identity transform matrix). 0 = Not Aligned 1 = Aligned 2 = Aligning |
Laser Enabled | 8u | 17 |
Whether one or more devices under the sensor group has its laser enabled to be able to turn on. 0 = All devices' lasers are disabled and cannot turn on 1 = One or more devices' lasers can be turned on |
Stamp
The output of the Stamp block contains the fields described below:
Field |
Type |
Address offset |
Description |
---|---|---|---|
Z Position | 64s | 0 | Encoder position at time of last index pulse of last frame. |
Encoder Position | 64s | 8 | Encoder position of last frame when the image data was scanned/taken. |
Time | 64u | 16 |
The timetick of the last frame. A timetick is a 64-bit positive integer that is guaranteed to increase monotonically starting from zero. It is guaranteed to be unique for every scan from a given sensor group. To convert this value to microseconds, use the following: time in microseconds = timetick / 1.024 |
Frame Index | 64u | 24 |
The frame number of the last frame. |
Digital Input States | 8u | 32 |
Digital input states of last frame. Bit 0: State of digital input 1 on master or sensor Bit 1: State of digital input 2 on master or sensor |
Buffer | 8u | 33 | Unused |
Buffer | 8u | 34 | Unused |
Buffer | 8u | 35 | Unused |
Measurement Value
The output of the Measurement Value block contains the fields described below.
Note that this block no longer contains a Decision field. This functionality will be added in the future.
Field |
Type |
Address offset |
Description |
---|---|---|---|
Value | 32s | 0 |
Measurement value. This value is the actual measurement value multiplied by 1000. If the measurement value is invalid, the 32-bit value is set to 0x80000000. |