<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-NZ" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Hi Mark,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">The mbg readme has the following note:<o:p></o:p></span></p>
<p class="MsoNormal"><i><span style="mso-fareast-language:EN-US">  The Mailbox Header has a Cnt parameter (bits 5-7 of the last byte
<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="mso-fareast-language:EN-US">  of the header).  If this value is zero the slave should always<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="mso-fareast-language:EN-US">  accept the incoming mailbox request.  If the value is non-zero (1-7)<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="mso-fareast-language:EN-US">  then the slave will only accept the request if the value is different<o:p></o:p></span></i></p>
<p class="MsoNormal"><i><span style="mso-fareast-language:EN-US">  to the previous mailbox request Cnt value.<o:p></o:p></span></i></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">(I can’t dig up where I got this information at the moment.)<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Comparing the logs the Cnt values sent by the TwinSAFE Loader are the same in both cases.  However the Cnt value responses from the device 1001 differ.  In the TwinCAT side the sent Cnt value does
 not clash with the slaves internal Cnt value, whereas on the etherlab mbg side it does.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">i.e. the 1001 response reply for the el side is:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">2 -> 1<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">3 -> 2<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">...<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">3 -> timeout<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">So I suspect the slaves internal Cnt value is 3, so on receiving a request with 3 means it thinks it’s a duplicate and is ignored.  So it looks like it is bad luck.  It looks like TwinCAT has previously
 communicated with device 1001 so it’s count is misaligned enough not to have a problem.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">You could do a trial on the TwinCAT side by sending approx. 5 CoE mailbox calls to the 1001 device so that it’s internal counter is the same as the etherlab mbg start condition and see how TwinCAT
 deals with the problem (you could log the EtherCAT slave network with Wire Shark.)  It’s also possible TwinCAT just internally sends a cnt value of 0.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">You could also check you’ve got the latest TwinSAFE loader.  The latest version might have its own retry built in (or not).<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Regards,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US">Graeme.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US">From:</span></b><span lang="EN-US"> Etherlab-dev <etherlab-dev-bounces@etherlab.org>
<b>On Behalf Of </b>Mark Verrijt<br>
<b>Sent:</b> Saturday, 27 March 2021 5:13 am<br>
<b>To:</b> etherlab-dev@etherlab.org<br>
<b>Subject:</b> [Etherlab-dev] Ethercat mailbox gateway and TwinSAFE loader issues<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt">Hi,<br>
<br>
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:<br>
<br>
This setup does work:<br>
0  0:0  PREOP  +  EK1100<br>
1  0:1  PREOP  +  EL6910, TwinSAFE PLC<br>
while this setup does NOT work (fails with a timeout when using loader with --list):<br>
0  0:0  PREOP  +  EK1100<br>
1  0:1  PREOP  +  EL6910, TwinSAFE PLC<br>
2  0:2  PREOP  +  EK1110 EtherCAT-Verl<span style="font-family:"Tahoma",sans-serif">�</span>ngerung<br>
<br>
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.<br>
<br>
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 (<a href="https://www.ethercat.org/memberarea/download/ETG8200_V1i0i0_G_R_MailboxGateway.pdf">https://www.ethercat.org/memberarea/download/ETG8200_V1i0i0_G_R_MailboxGateway.pdf</a>) what it should do.
<br>
<br>
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.<br>
<br>
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.<o:p></o:p></p>
<div>
<p class="MsoNormal">I'm not quite sure where to properly fix this, and am thus asking for some advice/help.
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">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.
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal">I myself would like a clean fix however. If somebody could point me in the right direction I would be grateful.
<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">Kind regards,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal">Mark<o:p></o:p></p>
</div>
</div>
</div>
</body>
</html>