<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:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
code
        {mso-style-priority:99;
        font-family:"Courier New";}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0cm;
        mso-margin-bottom-alt:auto;
        margin-left:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:Consolas;}
span.EmailStyle23
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1389571370;
        mso-list-template-ids:-1592223648;}
@list l0:level1 lfo3
        {mso-level-start-at:2;}
@list l0:level1 lfo4
        {mso-level-start-at:3;}
@list l0:level1 lfo5
        {mso-level-start-at:4;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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><div class=WordSection1><p class=MsoNormal>The ec_igb driver is relatively new (and only exists in 3.18 in the stable-1.5 branch, although the <a href="https://sourceforge.net/u/uecasm/etherlab-patches/ci/default/tree/#readme">unofficial default-branch patchset</a> extends this to later kernels), so it’s certainly possible that it has some bugs.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>But the most likely thing is that your hardware or kernel configuration can’t sustain that cycle time.  Sub-millisecond cycle times are possible with PREEMPT_RT (provided that you are not using ec_generic), but are highly dependent on your hardware (and its general latency) and require a very carefully written realtime loop.  You may have better luck using RTAI or Xenomai, however.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Another possibility is that you might need to specify a different shift time in your call to <span style='font-family:"Arial",sans-serif'>ecrt_slave_config_dc</span>.  If you have the ability to hook a scope to your slave to measure the ECAT SOF vs. SYNC0, this can help to determine if the ECAT frame is arriving with the correct phase – you usually want SOF and SYNC0/SYNC1 to cleanly alternate, not letting it jitter sometimes on one side and sometimes the other.  Check your slave’s documentation for guidelines on specifying the shift time.<o:p></o:p></p><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Another option, if your slave supports it or if you can switch to an alternate slave, is to use oversampling.  In one application I sample data at 4000 Hz with a 1ms ECAT cycle time (PREEMPT_RT with e1000e) by using a slave that is configured to capture 4 samples per ECAT cycle (triggered by the DC sync clock).<o:p></o:p></p><p class=MsoNormal> <span style='mso-fareast-language:EN-US'><o:p></o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt'><div><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> Jürgen Walter • DATATRONiQ<br><b>Sent:</b> Tuesday, 13 February 2018 14:23<br><b>To:</b> etherlab-users@etherlab.org<br><b>Subject:</b> [etherlab-users] yet another datagrams UNMATCHED - DC 0.2ms / 5kHz // igb kernel 3.18<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p><span style='font-family:"Arial",sans-serif'>Hello list, <o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>I have been fighting with an ethercat slave (measurement device from imc) over the past week. I got it somewhat (mostly?) working but I am seeing really a lot of the dreaded "datagrams UNMATCHED" in syslog.<o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>My setup is an APU2 (AMD Chipset but "Ethernet controller: Intel Corporation I210 Gigabit Network Connection (rev 03)" - <a href="https://pcengines.ch/apu2.htm"><span style='color:#3983C4'>https://pcengines.ch/apu2.htm</span></a>) with Ubuntu 12.04 and a "low latency" kernel 3.18 installed - to my delight (after doing ./bootstrap.sh) I found the option "--enable-igb" available with "./configure --help" (it was not available on the 3.2 and 3.13 (or some earlier experiments with a newer distro and Kernel 4.4)). I enabled it and after "make && make modules && make install && make modules_install" I can do "/etc/init.d/ethercat start" and the module loads with:<o:p></o:p></span></p><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7;border-radius:5px 5px 5px 5px;max-width:90vw;overflow-x:auto'><code><span style='background:#F7F7F7'>ec_igb 0000:01:00.0 eth0: igb: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX/TX<o:p></o:p></span></code></pre><p><span style='font-family:"Arial",sans-serif'>Next, I have adapted the main.c in "examples/dc_user"<o:p></o:p></span></p><ol start=1 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:0cm;mso-list:l0 level1 lfo2'><span style='font-family:"Arial",sans-serif'>customising the PDO section and inserting my output of "ethercat cstruct"<o:p></o:p></span></li></ol><ol start=2 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:0cm;mso-list:l0 level1 lfo3'><span style='font-family:"Arial",sans-serif'>changing the frequency to: "#define FREQUENCY 5000" (this is so I can get a DC cycle time of 200 microseconds (working fine in TwinCat 3)) <o:p></o:p></span></li></ol><ol start=3 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:0cm;mso-list:l0 level1 lfo4'><span style='font-family:"Arial",sans-serif'>reading (some of the) mapped PDOs in the cyclic task<o:p></o:p></span></li></ol><ol start=4 type=1><li class=MsoNormal style='mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;margin-left:0cm;mso-list:l0 level1 lfo5'><span style='font-family:"Arial",sans-serif'>customizing "ecrt_slave_config_dc" (fixed DC cycle time, nothing else works with this slave): ecrt_slave_config_dc(sc, 0x0300, 200000, 0, 0, 0);<o:p></o:p></span></li></ol><p><span style='font-family:"Arial",sans-serif'>I can see from the logs that the DC setup succeeds and the slaves goes into OP (it is the only slave, a 1:1 direct connection).<br>I can also confirm that the PDO exchange works so far because the data I am reading makes sense.<o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>Yet, my syslog essentially gets flooded with those two<o:p></o:p></span></p><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7;border-radius:5px 5px 5px 5px;max-width:90vw;overflow-x:auto'><code><span style='background:#F7F7F7'>EtherCAT WARNING 0: 58 datagrams UNMATCHED!<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>EtherCAT WARNING: Datagram f66b3b8c (domain0-0-main) was SKIPPED 29 times.<o:p></o:p></span></code></pre><p><span style='font-family:"Arial",sans-serif'>In addition - when leaving the "check_domain_state()" call enabled, I am seeing those (warnings?):<o:p></o:p></span></p><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7;border-radius:5px 5px 5px 5px;max-width:90vw;overflow-x:auto'><code><span style='background:#F7F7F7'>Domain1: WC 0.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: State 0.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: WC 1.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: State 2.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: WC 0.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: State 0.<o:p></o:p></span></code></pre><pre style='mso-margin-top-alt:0cm;margin-right:11.25pt;margin-bottom:0cm;margin-left:11.25pt;margin-bottom:.0001pt;background:#F7F7F7'><code><span style='background:#F7F7F7'>Domain1: WC 1.<o:p></o:p></span></code></pre><p><span style='font-family:"Arial",sans-serif'>When I reduce the "FREQUENCY" back to 1000 the problems pretty much disappear; however, my problem is that I need to run the DC cycle at 200 microseconds (each channel uses PDOs with 10 real/float values - I need to read each channel 5000x per second in order to get all 50.000 measurement samples).<o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>I have also tried this setup on a newer Ubuntu with Kernel 4.4 and the generic driver - the results are essentially the same.<o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>I am really not sure how to proceed from here - should I give the Xenomai a try? Or buy another PCI/Intel network card (PRO/GT - what model works still with the e1000/e drivers?) - or am I in general out of luck because 200us DC cycles are completely unrealistic with the ec_master? <o:p></o:p></span></p><p><span style='font-family:"Arial",sans-serif'>Any help would be <em><span style='font-family:"Arial",sans-serif'>greatly</span></em> appreciated!! Jürgen <o:p></o:p></span></p></div></div></div></div></body></html>