[Etherlab-dev] Ethercat mailbox gateway and TwinSAFE loader issues

Mark Verrijt mark.verrijt at vectioneer.com
Wed Apr 7 11:04:48 CEST 2021


Hey Graeme,

Thanks for the updated patch. I just tested and it now works fine with
the 3 slave setup (EK1100, EL6910, EK1110).
I did a quick tcpdump to verify, and it is as expected/patched:

mbg: -> 10 50 0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00
ec:  ->       0a 00 e9 03 00 03 00 20 41 80 f9 02 00 00 00 00
ec:  <-       0a 00 e9 03 00 13 00 30 43 80 f9 02 ea 82 1e 00
mbg: <- 10 50 0a 00 e9 03 00 13 00 30 43 80 f9 02 ea 82 1e 00

mbg: -> 10 50 0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00
ec:  ->       0a 00 e9 03 00 03 00 20 41 80 f9 01 00 00 00 00
ec:  <-       0a 00 e9 03 00 23 00 30 4b 80 f9 01 01 00 00 00
mbg: <- 10 50 0a 00 e9 03 00 23 00 30 4b 80 f9 01 01 00 00 00

mbg: -> 10 50 0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00
ec:  ->       0a 00 e9 03 00 03 00 20 41 01 fe 00 00 00 00 00
ec:  <-       fa 00 e9 03 00 33 00 30 41 01 fe 00 00 08 .....
mbg: <- 00 51 fa 00 e9 03 00 33 00 30 41 01 fe 00 00 08 .....

Regards,
Mark

On Tue, Apr 6, 2021 at 3:51 AM Graeme Foot <Graeme.Foot at touchcut.com> wrote:
>
> Hi Mark,
>
>
>
> Thanks for checking out the EtherCAT comms side.  I didn’t find the documentation particularly clear in quite a few areas so not surprised there’s an issue or two.
>
>
>
> The ethercat_mbg implementation passed through the CoE header info exactly as the TwinSAFE Loader requested.  For standard mailbox communications it looks like the etherlab master always passes a value of 0 to the Cnt parameter, so the slave will always respond.  I have updated the patch so that it will pass through 0 for the Cnt parameter for the mbg requests also (attached).  Please let me know if there is still an issue (I don’t have anything to test with at the moment).
>
>
>
>
>
> Re the other items:
>
> - Yes.  TwinCAT starts its slave addressing at 1000 (0x03e8), whereas the etherlab master starts its slave position addressing at 0.  I decided to report slave addresses in the TwinCAT fashion (starting at 1000), plus it helps distinguish the slaves mbg requests as per below.  Note: the TwinSAFE loader isn’t interested in the first slave, so it starts talking to the second slave first (1001, 0x03e9).
>
>
>
> I don’t think the mailbox header address is used by the slave.  It is the datagram header that directs the CoE message to the slave.  The previous ethercat_mbg implementation passed the mailbox header unchanged, using any reply with the mailbox header request 0x03e8 and above, and also with the datagram slave address offset from the mailbox header address by 0x03e7 (Note: the datagram slave address is the slave position + 1), to be an mbg response.  With the extra datagram slave address vs CoE mailbox header address check you shouldn’t have any problems with the mbg server if you have more than 1000 slaves.  This remains the same, with the change that the Cnt value in the header is now cleared.
>
>
>
> TwinCAT on the other hand looks like it is setting the Mailbox address to 0xe000 so that the master knows that the request should be handled as an mbg request.  Depending on implementation It may then mean you can have ~57344 slaves before TwinCAT has a problem with conflicting addresses.  Note: the gateway can only access up to 4080 slaves.
>
>
>
>
>
> Regards,
>
> Graeme.
>
>
>
>
>
>
>
> From: Mark Verrijt <mark.verrijt at vectioneer.com>
> Sent: Saturday, 3 April 2021 12:48 am
> To: Graeme Foot <Graeme.Foot at touchcut.com>
> Cc: etherlab-dev at etherlab.org
> Subject: Re: [Etherlab-dev] Ethercat mailbox gateway and TwinSAFE loader issues
>
>
>
> Before I forget again, thanks Graeme (and all others involved) for this mbg implementation in the first place.
>
> It saves us from a lot of hassle when deploying our safety projects. Only recently we discovered the twinsafe loader didn't work in all cases.
>
>
>
> I finally got around to also looking at the mailbox traffic on the ethercat side. I think I have found the cause.
>
> For twincat the counter used on the ethercat side is separate from the one received by the mbg.
>
> For etherlab the counter in the message to the mbg is also seemed to be used on the ethercat side, is that correct, or is something else happening here?
> Depending on the setup it can therefore become possible for two subsequent requests to the same slave (with requests to others in between) to use the same counter value.
> See data at the bottom of the email.
>
>
>
> What is your take on this?
>
>
> Some other things worth mentioning (for completeness/archive):
>
> - The addressing is done a bit differently:
>
>    .Twincat, Datagram header slave address: 0x03e9, Mailbox header address: 0xe000
>
>    .Etherlab, Datagram header slave address: 0x0002, Mailbox header address: 0x03e9
>
> - The counter in the mailbox reply of a slave is separate from the counter value check in the (next) request.
>
>   Though logical, I mention it here explicitly because this messed up my thinking quite a bit when I hadn't realized this yet.
>
>
>
> Regards,
>
> Mark
>
>
>
> *** Twincat ***
> mbg: ->   10 50 0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00
> ec:  ->         0a 00 00 e0 00 13 00 20 41 80 f9 02 00 00 00 00
> ec:  <-         0a 00 00 e0 00 33 00 30 43 80 f9 02 ea 82 1e 00
> mbg: <-   10 50 0a 00 e9 03 00 33 00 30 43 80 f9 02 ea 82 1e 00
>
> mbg: ->   10 50 0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00
> ec:  ->         0a 00 00 e0 00 23 00 20 41 80 f9 01 00 00 00 00
> ec:  <-         0a 00 00 e0 00 43 00 30 4b 80 f9 01 01 00 00 00
> mbg: <-   10 50 0a 00 e9 03 00 43 00 30 4b 80 f9 01 01 00 00 00
>
> .... other req/rep
>
> mbg: ->   10 50 0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00
> ec:  ->         0a 00 00 e0 00 33 00 20 41 01 fe 00 00 00 00 00
> ec:  <-         fa 00 00 e0 00 53 00 30 41 01 fe 00 00 08 .....
> mbg: <-   00 51 fa 00 e9 03 00 53 00 30 41 01 fe 00 00 08 .....
>
> *** Etherlab ***
> mbg: ->   10 50 0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00
> ec:  ->         0a 00 e9 03 00 23 00 20 41 80 f9 02 00 00 00 00
> ec:  <-         0a 00 e9 03 00 13 00 30 43 80 f9 02 ea 82 1e 00
> mbg: <-   10 50 0a 00 e9 03 00 13 00 30 43 80 f9 02 ea 82 1e 00
>
> mbg: ->   10 50 0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00
> ec:  ->         0a 00 e9 03 00 33 00 20 41 80 f9 01 00 00 00 00  <---.
> ec:  <-         0a 00 e9 03 00 23 00 30 4b 80 f9 01 01 00 00 00      |
> mbg: <-   10 50 0a 00 e9 03 00 23 00 30 4b 80 f9 01 01 00 00 00      |
>                                                                      |
>                        Problem occurs due to two subsequent requests |
> .... other req/rep           to the same slave with the same counter |
>                                                                      |
> mbg: ->   10 50 0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00      |
> ec:  ->         0a 00 e9 03 00 33 00 20 41 01 fe 00 00 00 00 00  <---'
> ec:  <-         No Reply
> mbg: <-   Timeout


More information about the Etherlab-dev mailing list