Function BlockECATReadSDOPLCopen motion iconPipe Network motion icon

Description

This function block reads a 32-bit word from I/O nodes using a CANopen SDO read command. Is is typically used to query the status of inputs.

See EtherCAT Function Blocks That Work With SDOs for information about function blocks which are used to work with drive or remote I/O parameters that are not supported by ML and MC function blocks.

ECATReadSdo

Figure 7-195: ECATReadSdo

,

State Diagram

ECATReadSdo State diagram

Figure 7-196: ECATReadSdo State Diagram

Arguments

Input

Execute Description On the rising edgeClosed A rising edge is the transition of a digital signal from low to high. It is also called positive edge of Execute, an SDO read command is issued. The function block only handles one SDO command at a time. If Execute is toggled quickly so that another rising edge occurs before the SDO command has completed, the function block does not issue a second SDO command.
  Data type BOOL
  Range 0, 1
  Unit N/A
  Default
Index Description

The object directory index of the data to be read.

For more details, refer to:

  • Communication SDOs
  • Manufacturer specific SDOs
  • Profile specific SDOs

To read/write an SDO object with an index greater than 16#7FFF (32767), the value must be entered in the form any_to_int(index # in hex format). For example any_to_int(16#8321).

  Data type INT
  Range
  Unit N/A
  Default
Subindex Description

The sub-index of the object directory variable to be read.

For more details, refer to:

  • Communication SDOs
  • Manufacturer specific SDOs
  • Profile specific SDOs

To read/write an SDO object with an index greater than 16#7FFF (32767), the value must be entered in the form any_to_int(index # in hex format). For example any_to_int(16#8321).

  Data type SINT
  Range
  Unit N/A
  Default
Size Description The size (number of bytes) to write.
  Data type SINT
  Range 1 - 4
  Unit N/A
  Default
DeviceAddress Description

The EtherCAT address of the device from which data is written to.

The first node usually has the value '1001'. The second node usually has the value '1002'.

Alternately, you can use the members of the EtherCAT structure to specify a drive's address when you create the variable.


creating an EtherCAT variable

  Data type INT
  Range
  Unit N/A
  Default

Output

Done Description Indicates whether the SDO call has completed without error.
  Data type BOOL
  Unit N/A
Error Description Indicates whether the SDO call has completed with error:
  Data type BOOL
  Unit N/A
ErrorID Description

The SDO call error result, if Error is TRUE (see list of Error Codes in table below). Upon success, Error is set to zero.

  Data type DINT
  Unit N/A
Value Description The value of the object directory variable being read. Value is only set when an SDO read command has successfully completed.
  Data type DINT
  Unit N/A
Error Code Value
dec (hex)
Description
ECERR_OK 0 The SDO call succeeded
ECERR_DEVICE_ERROR 1792 (0x700) EtherCAT device is not accessible
ECERR_DEVICE_INVALIDCMD 1794 (0x702) Invalid mailbox command
ECERR_DEVICE_INVALIDINDEX 1795 (0x703) An invalid value for the Index input was specified
ECERR_DEVICE_INVALIDACCESS 1796 (0x704) Reading of the variable is not permitted
ECERR_DEVICE_INVALIDSIZE 1797 (0x705) An invalid size for the parameter was specified
ECERR_DEVICE_INVALIDDATA 1798 (0x706) Invalid parameter value(s) in SDO index and/or sub-index
ECERR_DEVICE_NOTREADY 1799 (0x707) Device is not in a ready state, network is not in operational
ECERR_DEVICE_BUSY 1800 (0x708) Device is not available to respond
ECERR_DEVICE_INVALIDCONTEXT 1801 (0x709) Device responded with an illegal error code, indicating the command is not allowed under the present conditions
ECERR_DEVICE_NOMEMORY 1802 (0x70A) EtherCAT mailbox is out of memory or device is out of disk space
ECERR_DEVICE_INVALIDPARM 1803 (0x70B) EtherCAT mailbox request was not valid
ECERR_DEVICE_NOTFOUND 1804 (0x70C) EtherCAT device not found
ECERR_DEVICE_SYNTAX 1805 (0x70D) An unexpected error occurred
ECERR_DEVICE_INVALIDSTATE 1810 (0x712) The EtherCAT device is in an invalid state
ECERR_DEVICE_TIMEOUT 1817 (0x719) The EtherCAT device failed to respond, timing out
ECERR_DEVICE_INSERTMAILBOX 1826 (0x722) Error while inserting the mailbox command into internal FIFO
ECERR_DEVICE_INVALIDOFFSET 1827 (0x723) An invalid value for the SubIndex input was specified
ECERR_DEVICE_UNKNOWNMAILBOXCMD 1828 (0x724) The master sent an unknown mailbox command to the slave
ECERR_DEVICE_ACCESSDENIED 1829 (0x725) Device responded with an invalid access error code, indicating the command is not allowed
ECERR_DEVICE_INVALIDADDR 1832 (0x728) Can’t send a mailbox command to the specified slave
ECERR_DEVICE_NOT_A_FSOE_MASTER 1836 (0x72c) Device is not a FSoE master.
ECERR_DEVICE_PARAM_ACCESS_ERROR 1920 (0x780) Unknown error occurred while accessing parameter
ECERR_DEVICE_PARAM_NOT_FOUND 1921 (0x781) Parameter was not found
ECERR_DEVICE_PARAM_NOT_INTEGER 1922 (0x782) Parameter is a floating-point value. Integer value required.
ECERR_DEVICE_VALUE_IS_NEGATIVE 1923 (0x783) No negative values allowed. Value specified was negative.
ECERR_DEVICE_VALUE_OUT_OF_RANGE 1924 (0x784) Value is out of data-range
ECERR_DEVICE_VALUE_GREATER_THAN_MAX 1925 (0x785) Value bigger than maximum
ECERR_DEVICE_VALUE_LOWER_THAN_MIN 1926 (0x786) Value lower than minimum
ECERR_CLIENT_ERROR 2048 (0x800) Error in Mailbox response to a previously sent mailbox command
ECERR_CLIENT_TIMEOUT 2049 (0x801) The SDO command timed out
ECERR_CLIENT_ INVALIDPARM 2050 (0x802) An invalid value was specified
ECERR_CLIENT_ INVALIDSIZE 2051 (0x803) An invalid value for the size input was specified

Table 7-47: List of EtherCAT Error Codes

Related Functions

ECATWriteSDO

Example

Structured Text

(* Read PL.KP on first AKD Drive on EtherCAT network *)
Inst_ECATReadSdo( TRUE, 16#3542, 0, 4, 1001 );
PositionProportionalGain := Inst_ECATReadSdo.Value;
(* Read the 4 byte data in SDO index 8321h (33569 decimal), sub-index 1 on the first AKD Drive
Inst_ECATReadSdo( TRUE, any_to_int(16#8321), 1, 4, 1001 );
ParamValue := Inst_ECATReadSdo.Value;

FBD

FFLD