# 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 + , instead the position within the EtherCAT bus is needed. The following example shows how to determine the entry index of the corresponding SubDevice entry: = 0x3000 + ( \* -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: ```c++ 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; ``` ## 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: ```c++ 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; ``` ## 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: ```c++ 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; ``` ## 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: ```c++ 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; ```