[etherlab-users] Ethercat master kernel module warnings

John Hubbard jhubbard at noao.edu
Mon Dec 14 18:29:02 CET 2015


Wilhelm,

Your comment "If you see skipped frames at regular time intervals there 
is something wrong with your application" was spot on.  The problem was 
with my application.  I was doing the ecrt_domain_queue and 
ecrt_master_send twice per cyclic task. After removing the duplicate 
queue/send the errors are gone.

Thanks a bunch.

On 12/14/2015 10:13 AM, Dr.-Ing. Wilhelm Hagemeister wrote:
> Hello John,
>
> have you tried with the supplied sample "c" code?
>
> Just for your information:
> on a recent kernel with RT-Preempt-Patch we run cyclic tasks usually 
> at 1 kHz with the generic NIC driver without any skipped datagrams.
>
> If you don't use the RT-Preempt-Patch you should not observe regular 
> skipped frames if you do not load the machine to much.
>
> If you have skipped frames at regular time intervals there is 
> something wrong with your application.
>
> If you have skipped frames randomly it can be cabling (unlikely), a 
> misbehaving slave (very unlikely), or non realtime behaviour of your 
> application.
>
> Try to measure the time intervals between your cyclic calls.
>
> Try to measure the time interval between "master_send" and 
> "master_recieve". The EtherCat frame has to be "back" before you can 
> receive it.
>
> One more thing: intelligent NIC's can do interrupt throttling to 
> decrease load for the processor. This results in poor realtime 
> behaviour. I can remember this has been an issue some time ago. Please 
> check the etherlab mailing list...
>
> Regards Wilhelm.
>
> Am 14.12.2015 um 17:24 schrieb John Hubbard:
>> Hello,
>>
>> 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:
>> ====================================================
>> Dec 11 13:26:31 lyot kernel: [878188.716201] EtherCAT WARNING: Datagram
>> ffff88032e383558 (domain0-0-main) was SKIPPED 21 times.
>> Dec 11 13:26:31 lyot kernel: [878189.443671] EtherCAT WARNING 0: 20
>> datagrams UNMATCHED!
>> Dec 11 13:26:32 lyot kernel: [878189.769889] EtherCAT WARNING: Datagram
>> ffff88032e383558 (domain0-0-main) was SKIPPED 21 times.
>> Dec 11 13:26:32 lyot kernel: [878190.444575] EtherCAT WARNING 0: 20
>> datagrams UNMATCHED!
>> ====================================================
>> 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.
>>
>> In short my application (after setting up the master and domain) is 
>> doing:
>>
>>     ecrt_master_receive
>>     ecrt_domain_process
>>     // read process data
>>     // calculations
>>     // write process data
>>     ecrt_domain_queue
>>     ecrt_master_send
>>
>>
>> So my question are:
>> Has anyone else seen similar problems with unmatched/skipped datagrams
>> even at very low cyclic task rates?
>> What sort of frequencies should I expect on a non rt-kernel, with a
>> userland app, and the generic NIC driver?
>> Does anything look obviously wrong with my attached code?  (Be gentle
>> I'm primarily a non real time Java programmer).
>>
>> In case it helps my 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 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.
>>
>> 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.
>>
>>
>> Thanks in advance
>>
>>
>> -- 
>> -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.
>>
>>
>>
>> _______________________________________________
>> etherlab-users mailing list
>> etherlab-users at etherlab.org
>> http://lists.etherlab.org/mailman/listinfo/etherlab-users
>>
>
> _______________________________________________
> etherlab-users mailing list
> etherlab-users at etherlab.org
> http://lists.etherlab.org/mailman/listinfo/etherlab-users


-- 
-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.




More information about the Etherlab-users mailing list