Comparison of ethercat SDOs with ArmarX
We experienced occasional failures with the initialization of the PDO IO map. With the test setup of one Sensor Actuator Unit consisting of an Elmo Gold and a Sensor board, the size of the PDO IO map should be 90 Bytes. The size of the IO map is sometimes smaller. This seems to happen more frequently if the unit was not shut down gracefully in the previous execution.
To approach this problem we compare the setup SDO writes with the working ethercat integration of ArmarX. The following Tables lists these setup procedures for each platform.
Robot Control working execution:
| Time since first | Time between last | R/W | Address | Data |
|---|---|---|---|---|
| 0 | 0 | W | Ox16'07.0 | [7,0,32,0,255,96,32,0,122,96,32,0,132,96,32,0,131,96,16,0,115,96,16,0,64,96,16,0,113,96,0,0,0,0] |
| 1706 | 1706 | W | 0x16'08.0 | [1,0,8,0,96,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
| 3157 | 1451 | W | 0x1c'12.0 | [2,0,7,22,8,22,0,0,0,0] |
| 5065 | 1908 | W | 0x1a'07.0 | [7,0,32,0,100,96,32,0,108,96,32,0,2,16,32,0,253,96,16,0,65,96,16,0,119,96,16,0,120,96,0,0,0,0] |
| 6474 | 1409 | W | 0x1a'08.0 | [1,0,8,0,96,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
| 7921 | 1447 | W | 0x1c'13.0 | [2,0,7,26,8,26,0,0,0,0] |
| 10322 | 2401 | W | 0x60'60.0 | [8] |
| 12217 | 1895 | W | 0x60'7a.0 | [0,0,0,0] |
| 14371 | 2154 | W | 0x60'ff.0 | [0,0,0,0] |
| 16280 | 1909 | W | 0x60'71.0 | [0,0] |
| 18203 | 1923 | W | 0x60'c2.1 | [2] |
| 20379 | 2176 | W | 0x60'f2.0 | [34,0] |
| 22300 | 1921 | W | 0x60'5a.0 | [5,0] |
| 24230 | 1930 | W | 0x60'5d.0 | [1,0] |
| 26421 | 2191 | W | 0x60'7e.0 | [0] |
| 28817 | 2396 | W | 0x60'7b.1 | [0,0,0,0] |
| 30731 | 1914 | W | 0x60'7b.2 | [0,0,0,0] |
| 32934 | 2203 | W | 0x60'7d.1 | [0,0,0,128] |
| 35319 | 2385 | W | 0x60'7d.2 | [255,255,255,127] |
| 37219 | 1900 | W | 0x60'81.0 | [255,255,255,127] |
| 39385 | 2166 | W | 0x60'73.0 | [80,195] |
| 41282 | 1897 | W | 0x60'75.0 | [172,13,0,0] |
| 43181 | 1899 | W | 0x60'72.0 | [80,195] |
| 45817 | 2636 | W | 0x60'76.0 | [184,11,0,0] |
| 47987 | 2170 | R | 0x60'41.0 | [80,2] |
Robot Control fault execution: IO map size is 48 bytes. [Error][17:50:45.822098][realtime loop] _pdo_to_master of slave with index index: 2, vendor id: 0x00'00'07'bc, product code: 0x00'00'31'00, serial number: 0x10'00'00'06, revision number: 0x00'00'00'02 is nullptr.
| Time since first | Time between last | R/W | Address | Data |
|---|---|---|---|---|
| 0 | 0 | W | 0x16'07.0 | [7,0,32,0,255,96,32,0,122,96,32,0,132,96,32,0,131,96,16,0,115,96,16,0,64,96,16,0,113,96,0,0,0,0] |
| 1736 | 1736 | W | 0x16'08.0 | [1,0,8,0,96,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
| 3223 | 1487 | W | 0x1c'12.0 | [2,0,7,22,8,22,0,0,0,0] |
| 4974 | 1751 | W | 0x1a'07.0 | [7,0,32,0,100,96,32,0,108,96,32,0,2,16,32,0,253,96,16,0,65,96,16,0,119,96,16,0,120,96,0,0,0,0] |
| 6214 | 1240 | W | 0x1a'08.0 | [1,0,8,0,97,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0] |
| 7432 | 1218 | W | 0x1c'13.0 | [2,0,7,26,8,26,0,0,0,0] |
| 9409 | 1977 | W | 0x60'60.0 | [8] |
| 11391 | 1982 | W | 0x60'7a.0 | [0,0,0,0] |
| 13372 | 1981 | W | 0x60'ff.0 | [0,0,0,0] |
| 15352 | 1980 | W | 0x60'71.0 | [0,0] |
| 17606 | 2254 | W | 0x60'c2.1 | [2] |
| 19865 | 2259 | W | 0x60'f2.0 | [34,0] |
| 21888 | 2023 | W | 0x60'5a.0 | [5,0] |
| 23865 | 1977 | W | 0x60'5d.0 | [1,0] |
| 26131 | 2266 | W | 0x60'7e.0 | [0] |
| 28153 | 2022 | W | 0x60'7b.1 | [0,0,0,0] |
| 30179 | 2026 | W | 0x60'7b.2 | [0,0,0,0] |
| 32247 | 2068 | W | 0x60'7d.1 | [0,0,0,128] |
| 34566 | 2319 | W | 0x60'7d.2 | [255,255,255,127] |
| 36843 | 2277 | W | 0x60'81.0 | [255,255,255,127] |
| 39120 | 2277 | W | 0x60'73.0 | [80,195] |
| 41184 | 2064 | W | 0x60'75.0 | [172,13,0,0] |
| 42995 | 1811 | W | 0x60'72.0 | [80,195] |
| 45296 | 2301 | W | 0x60'76.0 | [184,11,0,0] |
| 47839 | 2543 | R | 0x60'41.0 | [80,2] |
TODO: Check if armarx io map size changes
ArmarX working execution:
| Time since first | Time between last | R/W | Address | Data |
|---|---|---|---|---|
| 0 | 0 | R | 0x100a.0 | [1,0,0,0,0,0,0,0,186,85,100,43,235,120,0,0,74,66,11,44,235,120,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,] |
| 1000 | 1000 | W | 0x1a08.0 | [0,0,] |
| 3000 | 2000 | W | 0x1608.0 | [0,0,] |
| 10000 | 7000 | W | 0x1607.0 | [7,0,32,0,255,96,32,0,122,96,32,0,132,96,32,0,131,96,16,0,115,96,16,0,64,96,16,0,113,96,0,0,0,0,] |
| 12000 | 2000 | W | 0x1608.0 | [2,0,8,0,96,96,8,0,126,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,] |
| 14000 | 2000 | W | 0x1c12.0 | [2,0,7,22,8,22,] |
| 15000 | 1000 | W | 0x1a07.0 | [7,0,32,0,100,96,32,0,108,96,32,0,2,16,32,0,253,96,16,0,65,96,16,0,119,96,16,0,120,96,0,0,0,0,] |
| 17000 | 2000 | W | 0x1a08.0 | [2,0,8,0,97,96,8,0,97,96,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,] |
| 19000 | 2000 | W | 0x1c13.0 | [2,0,7,26,8,26,] |
| 24000 | 5000 | W | 0x6060.0 | [8,] |
| 30000 | 6000 | W | 0x60ff.0 | [0,0,0,0,] |
| 32000 | 2000 | W | 0x607a.0 | [0,0,0,0,] |
| 34000 | 2000 | W | 0x6071.0 | [0,0,] |
| 36000 | 2000 | W | 0x60c2.1 | [2,] |
| 38000 | 2000 | W | 0x605d.0 | [1,0,] |
| 40000 | 2000 | W | 0x605a.0 | [5,0,] |
| 43000 | 3000 | W | 0x6076.0 | [232,3,0,0,] |
| 45000 | 2000 | W | 0x6075.0 | [88,27,0,0,] |
| 47000 | 2000 | W | 0x6073.0 | [184,11,] |
| 49000 | 2000 | W | 0x607b.1 | [192,189,240,255,] |
| 51000 | 2000 | W | 0x607b.2 | [64,66,15,0,] |
| 54000 | 3000 | W | 0x607d.1 | [192,189,240,255,] |
| 56000 | 2000 | W | 0x607d.2 | [64,66,15,0,] |
| 58000 | 2000 | W | 0x607f.0 | [0,202,154,59,] |
| 61000 | 3000 | W | 0x6080.0 | [255,255,255,127,] |
| 63000 | 2000 | W | 0x60f2.0 | [34,0,] |
| 65000 | 2000 | R | 0x1003.0 | [0,] |
| 68000 | 3000 | R | 0x6041.0 | [58,58,] |
| 70000 | 2000 | W | 0x8000.1 | [118,] |
| 71000 | 1000 | W | 0x8000.3 | [10,0,] |
| 72000 | 1000 | W | 0x8000.4 | [0,] |
| 73000 | 1000 | W | 0x8000.5 | [0,] |
| 75000 | 2000 | W | 0x8000.6 | [0,] |
| 76000 | 1000 | W | 0x8000.7 | [1,] |
Comparison ArmarX and robot_control ethercat setup
Register descriptions:
| Register | Description |
|---|---|
| 0x100a | (ds301) manufacture software version |
| 0x16XX | PDO optput mapping |
| 0x1AXX | PDO input mapping |
| 0x1c12 | SM2 Outputs PDO assignment |
| 0x1c13 | SM3 Inputs PDO assignment |
| 0x6060 | Modes of operation value 8...127 Reserved |
| 0x60FF | Target Velocity int32 |
| 0x607A | Profile target position int32 (set position if profile position mode is selected) |
| 0x6071 | Target torque int16 |
| 0x60c2 | Interpolation time period (object 0x80) (between two positions) |
| .1 | Interpolation time unit 1..255 msec |
| 0x605D | Halt option code int16 (value 1: Slow down on slow-down ramp) |
| 0x605A | Quick stop option code int16 (value 5: Slow down on slow-down ramp and stay in QUICK STOP) |
| 0x6076 | Motor Rate Torque uint32 in mNm |
| 0x6075 | Motor Rate Current uint32 |
| 0x6073 | Max current int16 |
| 0x607B | Position range limit int32 |
| .1 | Min position range limit int32 (SimplIQ Command Reference Manual XM[1]) |
| .2 | Max position range limit int32 |
| 0x607D | Software position limit |
| .1 | Min position limit |
| .2 | Max position limit |
| 0x607E | Polarity |
| 0x607F | Max profile velocity uint32 |
| 0x6080 | ? |
| 0x6081 | Profile velocity uint32 (SimplIQ Command Reference Manual SP command) |
| 0x60f2 | ? |
| 0x8000 | (ds301) standardised device profile area. Describes device parameters and the device functionality. |
| 0x1003 | predefined error field uint32 |
| 0x603f | Error Code |
| 0x6041 | Statusword (present state of the driver) |
CANopen DSP 402 Implementation Guide S.29 Statusword flags:
[58,58] = 1110100011101000b
Ready to switch on = 1
Switched on = 1
Operation enabled = 1
Fault = 0
Voltage enabled = 1
Quick Stop = 0
Switch on disabled = 0
Warning = 0
Manufacterer specific = 1
Remote = 1
Target reached = 1
Internal limit active = 0
Operation mode specific = 10
Manufacturer specific = 00
[80,2] (little endian)= 0x250 = 0b0000001001010000
Ready to switch on = 0
Switched on = 0
Operation enabled = 0
Fault = 0
Voltage enabled = 1
Quick Stop = 0
Switch on disabled = 1
Warning = 0
Manufacterer specific = 0
Remote = 1
Target reached = 0
Internal limit active = 0
Operation mode specific = 00
Manufacturer specific = 00 |
[80,18] (little endian)= 0x1250 = 0b0001001001010000
Ready to switch on = 0
Switched on = 0
Operation enabled = 0
Fault = 0
Voltage enabled = 1
Quick Stop = 0
Switch on disabled = 1
Warning = 0
Manufacterer specific = 0
Remote = 1
Target reached = 0
Internal limit active = 0
Operation mode specific = 00
Manufacturer specific = 00 |
Compare robot_control fail and robot_control success: All data fields match exactly. Even the status word 0x6041.
The overall execution time is almost equal. The send time varies less than 1ns for each sdo_write.
Compare ArmarX and robot_control success: ArmarX took 20ns (41%) longer than robot_control.
ArmarX sets 0x1a08 0v1608 to 0 before setting the PDO mappings The PDO mappings differ slightly. That shouldn’t be relevant.
robot_control writes 32bit (each 0) more into 0x1c13 (SM3 inputs PDO assignment). According to BECKHOF Standard Objects for all EtherCAT 0x1c13 is type uint8
- 0x6076 has different data: ArmarX [232,3,0,0] robot_control [184,11,0,0]
- 0x6075 has different data: ArmarX [88,27,0,0] robot_control [172,13,0,0]
- 0x6073 has different data: ArmarX [184,11] robot_control [80,195]
- 0x607b.1 has different data: ArmarX [192,189,240,255] robot_control [0,0,0,0]
- 0x607b.2 has different data: ArmarX [64,66,15,0] robot_control [0,0,0,0]
- 0x607d.1 has different data: ArmarX [192,189,240,255] robot_control [0,0,0,128]
- 0x607d.2 has different data: ArmarX [64,66,15,0] robot_control [255,255,255,127]
- 0x607f is only set with ArmarX
- 0x6080 is only set with ArmarX
- 0x6081 is only set with robot_control but to the same value as 0x6080 with ArmarX
- The status word read differs: ArmarX [58,58] robot_control [80,2]
- 0x8000 is only set with ArmarX
Some commands are sent in a different order.