<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <font face="serif">Hello,<br>
      <br>
      I'm working on a proof of concept application using the IgH
      EtherCAT master however I'm having some problems.  Specifically
      I'm seeing unmatched and skipped datagram packet warnings coming
      out of the kernel module:  <br>
      ====================================================<br>
    </font><font face="serif">Dec 11 13:26:31 lyot kernel:
      [878188.716201] EtherCAT WARNING: Datagram ffff88032e383558
      (domain0-0-main) was SKIPPED 21 times.<br>
      Dec 11 13:26:31 lyot kernel: [878189.443671] EtherCAT WARNING 0:
      20 datagrams UNMATCHED!<br>
      Dec 11 13:26:32 lyot kernel: [878189.769889] EtherCAT WARNING:
      Datagram ffff88032e383558 (domain0-0-main) was SKIPPED 21 times.<br>
      Dec 11 13:26:32 lyot kernel: [878190.444575] EtherCAT WARNING 0:
      20 datagrams UNMATCHED!</font><br>
    <font face="serif"><font face="serif">====================================================<br>
      </font>Based on the mailing list and the documentation PDF I
      believe that the problem is related to attempting to run the
      cyclic task too quickly.  I'm running the cyclic task in userland
      at ~20Hz (50ms delays) on Ubuntu 14.04 with the 3.16.0-55 kernel. 
      The master is relying on the generic NIC driver to control a 4
      port Intel 85271EB PCIe card.  Even slowing way down to 5 seconds
      I still see the occasional "SKIPPED 1 times" message.  The manual
      suggests that the theoretical cyclic rate should be many orders of
      magnitude faster.  I realize that the theoretical rate is
      theoretical, but I would have hoped a cyclic task of 20Hz~200Hz to
      be achievable with the generic NIC driver.  <br>
      <br>
      In short my application (after setting up the master and domain)
      is doing:<br>
    </font>
    <blockquote><font face="serif">ecrt_master_receive</font><br>
      <font face="serif">ecrt_domain_process</font><br>
      <font face="serif">// read process data<br>
        // calculations<br>
        // write process data<br>
      </font><font face="serif">ecrt_domain_queue</font><br>
      <font face="serif">ecrt_master_send</font><br>
    </blockquote>
    <font face="serif"><br>
      So my question are:<br>
      Has anyone else seen similar problems with unmatched/skipped
      datagrams even at very low cyclic task rates?<br>
      What sort of frequencies should I expect on a non rt-kernel, with
      a userland app, and the generic NIC driver?<br>
      Does anything look obviously wrong with my attached code?  (Be
      gentle I'm primarily a non real time Java programmer).  <br>
      <br>
      In case it helps m</font><font face="serif"><font face="serif">y
        end goal is to replace the discontinued Spectracom TSync PCIe
        PTP DIO card with a 'block' of Beckhoff modules that provide the
        same input timestamping, and output match time functionality. 
        I'm currently working with </font>an EK1100 (EtherCat coupler),
      EL1252 (24v input w/time stamp), EL2252 (24v output w/time stamp),
      and an EL6688 (PTP module).  When all done everything will be
      controlled by a userland app running on a CentOS 7 system with
      standard RHEL/CentOS 7 kernel.  At this point I'm still just
      trying to familiarize myself with the API and get a basic proof of
      concept application running.  <br>
      <br>
      I have been partly successful reading the input states, and
      rising/falling latch times from the EL1252.  I have not yet had
      success with the output module EL2252.  I'll put out another email
      asking for help with that one.  I haven't even tried to work with
      the EL6688 module.  <br>
      <br>
      <br>
      Thanks in advance  <br>
      <br>
      <br>
    </font>
    <pre class="moz-signature" cols="72">-- 
-john

To be or not to be, that is the question
                2b || !2b
(0b10)*(0b1100010) || !(0b10)*(0b1100010)
        0b11000100 || !0b11000100
        0b11000100 ||  0b00111011
               0b11111111
255, that is the answer.

</pre>
  </body>
</html>