Hi, We ran into some problems using ethercat_mbg together with the TwinSAFE loader and found some stuff that may be of interest to others aswell:
This setup does work: 0 0:0 PREOP + EK1100 1 0:1 PREOP + EL6910, TwinSAFE PLC while this setup does NOT work (fails with a timeout when using loader with --list): 0 0:0 PREOP + EK1100 1 0:1 PREOP + EL6910, TwinSAFE PLC 2 0:2 PREOP + EK1110 EtherCAT-Verl�ngerung I checked what was happening with wireshark when using the twincat master+mbg, and compared it to what I saw whilst using the ethercat master+mbg for etherlab. 1. With twincat I see that when a request is done to the master via the mbg it responds with a Cnt value (bits [4-6] of last byte of the mailbox header) of 0. With etherlab mbg this value is increasing with each next message, which also seems to be fine. I could not find in the spec Graeme used ( https://www.ethercat.org/memberarea/download/ETG8200_V1i0i0_G_R_MailboxGateway.pdf) what it should do. 2. When a request is done to the master via the mbg a response shorter than 16 bytes will be zero padded to make it equal to 16 bytes with twincat mbg, etherlab mbg simply sends a shorter message, which also seems to be fine. 3. A difference of more importance: There is a discrepancy between the way the Cnt value is updated for the two different master+mbg combinations. In some situations this causes a timeout because the request Cnt (coming from the loader) is equal to the slave Cnt value, which the slave will ignore and thus a timeout occurs. I have added the raw data tracing for both the master+mbg combinations if anybody is interested. I'm not quite sure where to properly fix this, and am thus asking for some advice/help. For now I made a retry work-around in the CommandMbg class which simply retires once with a different Cnt value in the request (Cnt-1 and wrapped to 1-7) which "solves" the problem. I have attached it as a patch. I myself would like a clean fix however. If somebody could point me in the right direction I would be grateful. Kind regards, Mark
Device Dir Data master -> 10 50 0a 00 00 00 00 33 00 20 41 20 f0 00 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4f 20 f0 00 03 00 00 00 master -> 10 50 0a 00 00 00 00 43 00 20 41 00 a0 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 00 a0 01 08 5c 00 00 master -> 10 50 0a 00 00 00 00 53 00 20 41 00 80 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 00 80 01 e8 03 00 00 master -> 10 50 0a 00 00 00 00 63 00 20 41 00 80 21 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 00 80 21 00 01 00 00 master -> 10 50 0a 00 00 00 00 73 00 20 41 00 80 22 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 00 80 22 00 01 00 00 master -> 10 50 0a 00 00 00 00 13 00 20 41 00 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 03 00 30 41 00 80 02 10 00 00 00 45 4b 31 39 31 34 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 23 00 20 41 00 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 03 00 30 41 00 80 03 20 00 00 00 54 65 72 6d 20 31 20 28 45 4b 31 39 31 34 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 33 00 20 41 01 a0 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 01 a0 01 08 00 00 00 master -> 10 50 0a 00 00 00 00 43 00 20 41 01 80 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 01 80 01 e9 03 00 00 master -> 10 50 0a 00 00 00 00 53 00 20 41 01 80 21 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 01 80 21 00 01 00 00 master -> 10 50 0a 00 00 00 00 63 00 20 41 01 80 22 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 01 80 22 00 01 00 00 master -> 10 50 0a 00 00 00 00 73 00 20 41 01 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 03 00 30 41 01 80 02 10 00 00 00 45 4c 36 39 31 30 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 13 00 20 41 01 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 03 00 30 41 01 80 03 20 00 00 00 54 65 72 6d 20 32 20 28 45 4c 36 39 31 30 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00 1001 <- 10 50 0a 00 e9 03 00 33 00 30 43 80 f9 02 45 9b 21 00 1001 -> 10 50 0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00 1001 <- 10 50 0a 00 e9 03 00 43 00 30 4b 80 f9 01 01 00 00 00 master -> 10 50 0a 00 00 00 00 43 00 20 41 02 a0 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 02 a0 01 08 00 00 00 master -> 10 50 0a 00 00 00 00 53 00 20 41 02 80 01 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 02 80 01 ea 03 00 00 master -> 10 50 0a 00 00 00 00 63 00 20 41 02 80 21 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 02 80 21 00 00 00 00 master -> 10 50 0a 00 00 00 00 73 00 20 41 02 80 22 00 00 00 00 master <- 10 50 0a 00 00 00 00 03 00 30 4b 02 80 22 00 00 00 00 master -> 10 50 0a 00 00 00 00 13 00 20 41 02 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 03 00 30 41 02 80 02 10 00 00 00 45 4b 31 31 31 30 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 23 00 20 41 02 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 03 00 30 41 02 80 03 20 00 00 00 54 65 72 6d 20 33 20 28 45 4b 31 31 31 30 29 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 53 00 30 41 01 fe 00 00 08 00 00 de c0 d7 80 2c 8a 7f 91 a6 91 01 00 a5 a5 59 60 00 00 00 00 01 00 08 00 05 00 41 64 6d 69 6e 69 73 74 72 61 74 6f 72 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 43 00 20 61 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 63 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 53 00 20 71 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 73 00 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 63 00 20 61 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 13 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 73 00 20 71 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 23 00 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 13 00 20 61 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 33 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 23 00 20 71 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 43 00 30 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 33 00 20 61 01 fe 00 00 00 00 00 1001 <- 00 51 fa 00 e9 03 00 53 00 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 43 00 20 71 01 fe 00 00 00 00 00 1001 <- 58 50 52 00 e9 03 00 63 00 30 11 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34 a4 00 00 00 00 00 00
Device Dir Data master -> 10 50 0a 00 00 00 00 33 00 20 41 20 f0 00 00 00 00 00 master <- 0d 50 07 00 00 00 00 33 00 30 4f 20 f0 00 03 master -> 10 50 0a 00 00 00 00 43 00 20 41 00 a0 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 43 00 30 4b 00 a0 01 02 00 master -> 10 50 0a 00 00 00 00 53 00 20 41 00 80 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 53 00 30 4b 00 80 01 e8 03 master -> 10 50 0a 00 00 00 00 63 00 20 41 00 80 21 00 00 00 00 master <- 0e 50 08 00 00 00 00 63 00 30 4b 00 80 21 00 01 master -> 10 50 0a 00 00 00 00 73 00 20 41 00 80 22 00 00 00 00 master <- 0e 50 08 00 00 00 00 73 00 30 4b 00 80 22 00 01 master -> 10 50 0a 00 00 00 00 13 00 20 41 00 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 13 00 30 41 00 80 02 10 00 00 00 45 4b 31 39 31 34 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 23 00 20 41 00 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 23 00 30 41 00 80 03 20 00 00 00 45 4b 31 39 31 34 2c 20 32 20 4b 2e 20 53 61 66 65 74 79 20 45 69 6e 67 61 6e 67 2f 41 75 73 00 master -> 10 50 0a 00 00 00 00 33 00 20 41 01 a0 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 33 00 30 4b 01 a0 01 02 00 master -> 10 50 0a 00 00 00 00 43 00 20 41 01 80 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 43 00 30 4b 01 80 01 e9 03 master -> 10 50 0a 00 00 00 00 53 00 20 41 01 80 21 00 00 00 00 master <- 0e 50 08 00 00 00 00 53 00 30 4b 01 80 21 00 01 master -> 10 50 0a 00 00 00 00 63 00 20 41 01 80 22 00 00 00 00 master <- 0e 50 08 00 00 00 00 63 00 30 4b 01 80 22 00 01 master -> 10 50 0a 00 00 00 00 73 00 20 41 01 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 73 00 30 41 01 80 02 10 00 00 00 45 4c 36 39 31 30 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 13 00 20 41 01 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 13 00 30 41 01 80 03 20 00 00 00 45 4c 36 39 31 30 2c 20 54 77 69 6e 53 41 46 45 20 50 4c 43 00 00 00 00 00 00 00 00 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00 1001 <- 10 50 0a 00 e9 03 00 13 00 30 43 80 f9 02 45 9b 21 00 1001 -> 10 50 0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00 1001 <- 10 50 0a 00 e9 03 00 23 00 30 4b 80 f9 01 01 00 00 00 master -> 10 50 0a 00 00 00 00 43 00 20 41 02 a0 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 43 00 30 4b 02 a0 01 02 00 master -> 10 50 0a 00 00 00 00 53 00 20 41 02 80 01 00 00 00 00 master <- 0e 50 08 00 00 00 00 53 00 30 4b 02 80 01 ea 03 master -> 10 50 0a 00 00 00 00 63 00 20 41 02 80 21 00 00 00 00 master <- 0e 50 08 00 00 00 00 63 00 30 4b 02 80 21 00 00 master -> 10 50 0a 00 00 00 00 73 00 20 41 02 80 22 00 00 00 00 master <- 0e 50 08 00 00 00 00 73 00 30 4b 02 80 22 00 00 master -> 10 50 0a 00 00 00 00 13 00 20 41 02 80 02 00 00 00 00 master <- 20 50 1a 00 00 00 00 13 00 30 41 02 80 02 10 00 00 00 45 4b 31 31 31 30 00 00 00 00 00 00 00 00 00 00 master -> 10 50 0a 00 00 00 00 23 00 20 41 02 80 03 00 00 00 00 master <- 30 50 2a 00 00 00 00 23 00 30 41 02 80 03 20 00 00 00 45 4b 31 31 31 30 20 45 74 68 65 72 43 41 54 2d 56 65 72 6c 61 6e 67 65 72 75 6e 67 00 00 00 00 1001 -> 10 50 0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00 1001 <- Message failed with code: Input/output error, Check ethercat logs for more information dmesg: [24971.349100] EtherCAT DEBUG: 0A 00 E9 03 00 33 00 20 41 01 FE 00 00 00 00 00 [24972.352705] EtherCAT ERROR 0-main-1: Timeout after 1000 ms while waiting for MBox Gateway response. [24972.362848] EtherCAT ERROR 0-main-1: Failed to process MBox Gateway request.
From 1d3708a5f0ba1c76323ef152ff823238946bfa04 Mon Sep 17 00:00:00 2001 From: Mark <mark@pop-os.localdomain> Date: Fri, 26 Mar 2021 17:04:31 +0100 Subject: [PATCH 1/1] workaround mbg single retry with different counter --- mailbox_gateway/CommandMbg.cpp | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/mailbox_gateway/CommandMbg.cpp b/mailbox_gateway/CommandMbg.cpp index f28591c..4885e9d 100644 --- a/mailbox_gateway/CommandMbg.cpp +++ b/mailbox_gateway/CommandMbg.cpp @@ -245,7 +245,28 @@ int CommandMbg::processMessage(uint8_t *in_buffer, size_t &inout_nbytes) cout << "Message failed with code: " << strerror(errno) << ", Check ethercat logs for more information" << endl; } - return -1; + if (EC_READ_U16(ioctl.data + 2) == 0) { + return -1; + } + // counter retry only for non-master requests (slave_pos != 0) + static const uint8_t cntrMask = 0x70; + uint8_t cntr = (EC_READ_U8(ioctl.data + 5) & cntrMask) >> 4; // get cntr as value 0-7 + cntr = cntr < 2 ? cntr * 7 : (((cntr - 2) % 7) + 1); // cntr-1 (with wrapping 1 to 7) when cntr > 0 + // just in case: no retry when cntr = 0 (master responds on mbox with cntr = 0 in twincat [wireshark]) + if (cntr) { + if (m_verbosity >= CommandMbg::Normal) { + cout << "Retrying message with different counter value (" << unsigned(cntr) + << ")" << endl; + } + EC_WRITE_U8(ioctl.data + 5, (EC_READ_U8(ioctl.data + 5) & (~cntrMask)) | (cntr << 4)); + if (m_masterDev->processMessage(&ioctl) < 0) { + if (m_verbosity >= CommandMbg::Normal) { + cout << "Retry message failed with code: " << strerror(errno) + << ", Check ethercat logs for more information" << endl; + } + return -1; + } + } } m_masterDev->close(); -- 2.25.1
-- Etherlab-dev mailing list Etherlab-dev@etherlab.org https://lists.etherlab.org/mailman/listinfo/etherlab-dev