8.7. SubDevice specific objects

The SubDevice specific object structures are repeated for each SubDevice. The number of SubDevice specific objects follows the maximum bus SubDevice count configured through EC_T_INIT_MASTER_PARMS.dwMaxBusSlaves.

To access a specific SubDevice entry an application evaluates the correct object index by adding the SubDevice ID to the corresponding base address (i.e. 0xA001 for diagnosis data of the second SubDevice).

Note for entry 0x3000 (SubDevice information objects): The order of the SubDevice in this object depends on the order of the SubDevices on the bus. The SubDevice entry must therefore not be accessed by 0x3000 + <SubDevice ID>, instead the position within the EtherCAT bus is needed.

The following example shows how to determine the entry index of the corresponding SubDevice entry: <entry index> = 0x3000 + (<SubDevice auto increment address> * -1)

8.7.1. SubDevice Configuration and Information Object 0x3000-0x3FFF

Object Type: RECORD, Manufacturer Specific Identity 0x43

Subindex

Description

Data Type

Access

M/O/C

Available

0

Number of Entries

Unsigned8

R

M

X

1

Entry Valid

Bool32

R

M

X

2

VendorId (Bus)

Unsigned32

R

M

X

3

ProductCode (Bus)

Unsigned32

R

M

X

4

Revision No (Bus)

Unsigned32

R

M

X

5

Serial No (Bus)

Unsigned32

R

M

X

6

Device Name (Config)

Visible_String[80]

R

M

X

7

Auto Increment Address (Bus)

Unsigned16

R

M

X

8

Station Address ESC register: 0x0010

Unsigned16

R

M

X

9

Configured Station Address ENI file value “PhysAddr”

Unsigned16

R

M

X

10

Station Alias Address ESC register: 0x0012

Unsigned16

R

M

X

11

PortState (Bus)

Unsigned16

R

M

X

12

DC Support (Bus)

Bool32

R

M

X

13

DC Support 64Bit (Bus)

Bool32

R

M

X

14

Mailbox Support (Config)

Bool32

R

M

X

15

Requested State (SubDevice instance)

Unsigned32

RW

M

X

16

Current State (SubDevice instance)

Unsigned32

R

M

X

17

Error Flag Set (SubDevice instance)

Bool32

R

M

X

18

Enable Linkmessages (SubDevice instance)

Bool32

RW

M

X

19

Error code (SubDevice instance)

Unsigned32

R

M

X

20

Sync Pulse active (Config, SubDevice instance)

Bool32

R

M

X

21

DC Sync 0 Period (Config, SubDevice instance)

Unsigned32

R

M

X

22

DC Sync 1 Period (Config, SubDevice instance)

Unsigned32

R

O

X

23

SB Error Code (Bus Topology)

Unsigned32

R

O

X

24

RX Error Counter Port 0 (Bus)

Unsigned16

R

M

X

25

RX Error Counter Port 1 (Bus)

Unsigned16

R

M

X

26

RX Error Counter Port 2 (Bus)

Unsigned16

R

M

X

27

RX Error Counter Port 3 (Bus)

Unsigned16

R

M

X

28

Forwarded RX Error Counter Port 0 (Bus)

Unsigned8

R

M

X

29

Forwarded RX Error Counter Port 1 (Bus)

Unsigned8

R

M

X

30

Forwarded RX Error Counter Port 2 (Bus)

Unsigned8

R

M

X

31

Forwarded RX Error Counter Port 3 (Bus)

Unsigned8

R

M

X

32

EtherCAT Processing Unit Error Counter (Bus)

Unsigned8

R

M

X

33

PDI Errror Counter (Bus)

Unsigned8

R

M

X

34

Support Mailbox Protocols Bit 0=AoE, Bit 1=EoE, Bit 2=CoE, Bit 3=FoE, Bit 4=SoE, Bit 5=VoE

Unsigned16

R

O

X

35

Lost Link Counter Port 0 (Bus)

Unsigned8

R

M

X

36

Lost Link Counter Port 1 (Bus)

Unsigned8

R

M

X

37

Lost Link Counter Port 2 (Bus)

Unsigned8

R

M

X

38

Lost Link Counter Port 3 (Bus)

Unsigned8

R

M

X

39

FMMU’s supported (Bus)

Unsigned8

R

M

X

40

Sync Managers supported (Bus)

Unsigned8

R

M

X

41

RAM Size in kByte (Bus)

Unsigned8

R

M

X

42

Port Descriptor (Bus)

Unsigned8

R

M

X

43

ECS Type (Config)

Unsigned8

R

M

X

44

SubDevice is optional (Config)

Bool32

R

M

X

45

SubDevice is present (Bus)

Bool32

R

M

X

46

Hot connect group ID

Unsigned32

R

M

X

47

System time difference

Unsigned32

R

M

X

48

Process Data Input Offset [Bit]

Unsigned32

R

M

X

49

Process Data Input Size [Bit]

Unsigned32

R

M

X

50

Process Data Output Offset [Bit]

Unsigned32

R

M

X

51

Process Data Output Size [Bit]

Unsigned32

R

M

X

Datatype for application access:

typedef struct _EC_T_OBJ3XXX {
      EC_T_WORD               wSubIndex0;
      EC_T_BOOL               bEntryValid;
      EC_T_DWORD              dwVendorID;
      EC_T_DWORD              dwProductCode;
      EC_T_DWORD              dwRevisionNo;
      EC_T_DWORD              dwSerialNo;
      EC_T_CHAR               szDeviceName[MAX_SLAVE_DEVICENAME];
      EC_T_WORD               wAutoIncAddr;
      EC_T_WORD               wPhysAddr;
      EC_T_WORD               wConfigPhysAddr;
      EC_T_WORD               wAliasAddr;
      EC_T_WORD               wPortState;
      EC_T_BOOL               bDCSupport;
      EC_T_BOOL               bDC64Support;
      EC_T_BOOL               bMailboxSupport;
      EC_T_DWORD              dwReqState;
      EC_T_DWORD              dwCurState;
      EC_T_BOOL               bErrFlagSet;
      EC_T_BOOL               bEnableLinkMsgs;
      EC_T_DWORD              dwErrorCode;
      EC_T_BOOL               bSyncPulseActive;
      EC_T_DWORD              dwDCSync0Period;
      EC_T_DWORD              dwDCSync1Period;
      EC_T_DWORD              dwSBErrorCode;
      EC_T_WORD               wRxErrorCounter0;
      EC_T_WORD               wRxErrorCounter1;
      EC_T_WORD               wRxErrorCounter2;
      EC_T_WORD               wRxErrorCounter3;
      EC_T_BYTE               byFwdRxErrorCounter0;
      EC_T_BYTE               byFwdRxErrorCounter1;
      EC_T_BYTE               byFwdRxErrorCounter2;
      EC_T_BYTE               byFwdRxErrorCounter3;
      EC_T_BYTE               byEcatProcUnitErrorCounter;
      EC_T_BYTE               byPDIErrorCounter;
      EC_T_WORD               wMbxSupportedProtocols;
      EC_T_BYTE               byLostLinkCounter0;
      EC_T_BYTE               byLostLinkCounter1;
      EC_T_BYTE               byLostLinkCounter2;
      EC_T_BYTE               byLostLinkCounter3;
      EC_T_BYTE               byFmmusSupported;
      EC_T_BYTE               bySyncManagersSupported;
      EC_T_BYTE               byRamSizeKb;
      EC_T_BYTE               byPortDescriptor;
      EC_T_BYTE               byESCType;
      EC_T_BOOL               bSlaveIsOptional;
      EC_T_BOOL               bSlaveIsPresent;
      EC_T_DWORD              dwHotConnectGroupId;
      EC_T_DWORD              dwSystemTimeDifference;
      EC_T_DWORD              dwPdOffsIn;
      EC_T_DWORD              dwPdSizeIn;
      EC_T_DWORD              dwPdOffsOut;
      EC_T_DWORD              dwPdSizeOut;
} EC_PACKED(1) EC_T_OBJ3XXX;

8.7.2. SubDevice Configuration Objects: 0x8000-0x8FFF

Object Type: RECORD, Manufacturer Specific Identity 0x45

The Configuration Data at 0x8nnn contains the information about the configured EtherCAT SubDevices.

Subindex

Description

Data Type

Access

M/O/C

Available

0

Number of Entries

Unsigned8

R

M

X

1

Configured Station Address ENI file value “PhysAddr”

Unsigned16

R

M

X

2

Type

Visible_String[64]

RW

M

X

3

Name

Visible_String[64]

R

M

X

4

Device Type

Unsigned32

R

M

X

5

Vendor ID

Unsigned32

R

M

X

6

Product Code

Unsigned32

R

M

X

7

Revision Number

Unsigned32

R

M

X

8

Version Number

Unsigned32

R

M

X

33

Mailbox Out Size (if mailbox SubDevice)

Unsigned16

R

M

X

34

Mailbox In Size (if mailbox SubDevice)

Unsigned16

R

M

X

35

Link Status

Unsigned8

R

O

–

36

Link Present

Unsigned8

R

M

X

37

Flags

Unsigned8

R

M

X

Datatype for application access:

typedef struct _EC_T_OBJ8XXX {
    EC_T_WORD               wSubIndex0;
    EC_T_WORD               wFixedStationAddr;
    EC_T_CHAR               szType[64];
    EC_T_CHAR               szName[64];
    EC_T_DWORD              dwDeviceType;
    EC_T_DWORD              dwVendorID;
    EC_T_DWORD              dwProductCode;
    EC_T_DWORD              dwRevision;
    EC_T_DWORD              dwSerial;
    EC_T_WORD               wMailboxOutSize;
    EC_T_WORD               wMailboxInSize;
    EC_T_BYTE               byLinkPreset;
    EC_T_BYTE               byFlags;
} EC_PACKED(1) EC_T_OBJ8XXX;

8.7.3. SubDevice Information Objects: 0x9000-0x9FFF

Object Type: RECORD, Manufacturer Specific Identity 0x46

The information data at 0x9nnn contains the information about the connected EtherCAT SubDevices. Executing the Scan Bus command (0xF002) will refresh them.

Subindex

Description

Data Type

Access

M/O/C

Available

0

Number of Entries

Unsigned8

R

M

X

1

Fixed Station Address of the Nth EtherCAT SubDevice found (same value as 0xF040:0n)

Unsigned16

R

M

X

5

Vendor ID of the Nth EtherCAT SubDevice found (entry 0x1018:01 of the EtherCAT SubDevice)

Unsigned32

R

M

X

6

Product Code of the Nth EtherCAT SubDevice found (entry 0x1018:02 of the EtherCAT SubDevice)

Unsigned32

R

M

X

7

Revision Number of the Nth EtherCAT SubDevice found (entry 0x1018:03 of the EtherCAT SubDevice)

Unsigned32

R

M

X

8

Serial Number of the Nth EtherCAT SubDevice found (entry 0x1018:04 of the EtherCAT SubDevice)

Unsigned32

R

M

X

32

DL Status (Register 0x110-0x111) of the Nth EtherCAT SubDevice found.

Unsigned16

R

M

X

Datatype for application access:

typedef struct _EC_T_OBJ9XXX {
    EC_T_WORD               wSubIndex0;
    EC_T_WORD               wFixedStationAddr;
    EC_T_DWORD              dwVendorID;
    EC_T_DWORD              dwProductCode;
    EC_T_DWORD              dwRevision;
    EC_T_DWORD              dwSerial;
    EC_T_WORD               wDLStatus;
} EC_PACKED(1) EC_T_OBJ9XXX;

8.7.4. SubDevice Diagnosis Data Objects: 0xA000-0xAFFF

Object Type: RECORD, Manufacturer Specific Identity 0x47

The diagnosis data at 0xAnnn contains enhanced information about the connected EtherCAT SubDevices including topology information.

Subindex

Description

Data Type

Access

M/O/C

Available

0

Number of Entries

Unsigned8

R

M

X

1

AL Status (Register 0x130-0x131) of the Nth EtherCAT SubDevice connected.

Unsigned16

R

M

X

2

AL Control (Register 0x120-0x121) of the Nth EtherCAT SubDevice connected.

Unsigned16

RW

M

X

3

Last AL Status Code (Register 0x0134-0x0135) of the Nth EtherCAT SubDevice connected.

Unsigned16

R

M

X

4

Link Conn. Status Actual link status of the Nth EtherCAT SubDevice connected.

Unsigned8

R

O

X

5

Link Control (Register 0x0101) of the Nth EtherCAT SubDevice connected.

Unsigned8

RW

O

X

6

Fixed Address Conn. Port 0 (Register 0x0010-0x0011) of the SubDevice connected to port 0 of the Nth EtherCAT SubDevice connected.

Unsigned16

R

M

X

7

Fixed Address Conn. Port 1

Unsigned16

R

M

X

8

Fixed Address Conn. Port 2

Unsigned16

R

M

X

9

Fixed Address Conn. Port 3

Unsigned16

R

M

X

10

CRC Error Counter Port 0 Number of CRC errors counted by port 0 of the Nth EtherCAT SubDevice connected.

Unsigned32

R

M

X

11

CRC Error Counter Port 1

Unsigned32

R

M

X

12

CRC Error Counter Port 2

Unsigned32

R

M

X

13

CRC Error Counter Port 3

Unsigned32

R

M

X

14

Cyclic WC Error Counter Number of cycles the datagram for process data exchange of the Nth EtherCAT SubDevice was received with an invalid Working Counter.

Unsigned32

R

M

X

15

SubDevice Not Present Counter Number of times the MainDevice lost physical link with the Nth EtherCAT SubDevice.

Unsigned32

R

O

X

16

Abnormal State Change Counter Number of times the Nth EtherCAT SubDevice left its state autonomously to a lower state without MainDevice request.

Unsigned32

R

M

X

17

Disable Automatic Link Support

Boolean

RW

O

X

Datatype for application access:

typedef struct _EC_T_OBJAXXX {
  EC_T_WORD               wSubIndex0;
  EC_T_WORD               wALStatus;
  EC_T_WORD               wALControl;
  EC_T_WORD               wLastALStatusCode;
  EC_T_BYTE               byLinkConnStatus;
  EC_T_BYTE               byLinkControl;
  EC_T_WORD               wFixedAddressConnPort0;
  EC_T_WORD               wFixedAddressConnPort1;
  EC_T_WORD               wFixedAddressConnPort2;
  EC_T_WORD               wFixedAddressConnPort3;
  EC_T_DWORD              dwCRCErrorCounterPort0;
  EC_T_DWORD              dwCRCErrorCounterPort1;
  EC_T_DWORD              dwCRCErrorCounterPort2;
  EC_T_DWORD              dwCRCErrorCounterPort3;
  EC_T_DWORD              dwCyclicWCErrorCounter;
  EC_T_DWORD              dwSlaveNotPresentCounter;
  EC_T_DWORD              dwAbnormalStateCounter;
  EC_T_BYTE               bDisableAutomaticLinkControl;
} EC_PACKED(1) EC_T_OBJAXXX;