ECATReadSDO
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.
Figure 7-195: ECATReadSdo
,
State Diagram
Figure 7-196: ECATReadSdo State Diagram
-
-
This function block uses and reserves the EtherCAT SDO Channel.
The SDO Channel remains reserved until the done output is TRUE.
This FB should be called at each cycle until the done output is TRUE.
If it is not called at each cycle, the rest of SDO communication (e.g., the AKD GUI "Graphical User Interface" A GUI is a type of user interface which allows people to interact with a computer and computer-controlled devices Views) is blocked.
Using this FB in SFC "Sequential function chart" It can be used to program processes that can be split into steps. The main components of SFC are: - Steps with associated actions - Transitions with associated logic conditions - Directed links between steps and transitions P0 or P1 steps is not recommended because these steps are executed only once.
If this FB is used in P0 or P1, then it must be used in an SFC N step to ensure the FB completes.
Arguments
Input
Execute | Description | On the rising edge 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:
To read/write an SDO object with an index greater than 16#7FFF (32767), the value must be entered in the form |
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:
To read/write an SDO object with an index greater than 16#7FFF (32767), the value must be entered in the form |
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, use the members of the EtherCAT structure to specify a drive's address to Create Variables. |
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 |
EtherCAT Error Codes
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) |
|
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 |
Related Functions
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