[Etherlab-users] Measuring the roundtrip time of the EtherCAT packet

Fontana Nicola ntd at entidi.it
Fri Mar 12 11:31:21 CET 2021


Hi all,

I'm new to to the EtherLab project, and to the EtherCAT world in
general, so my apologies in advance if the questions are dumb.

I'm interested in master development, so I checked the two more popular
opensource choices: SOEM and this one (I called it IgH ethercat).
To have a real taste, I implemented two similar test programs on top of
both. The full source code is available on Github:

    https://github.com/ntd/ethercatest

To measure the roundtrip time, i.e. the time needed to send a packet
and receive its response, I have something similar to this pseudocode:

    start = g_get_monotonic_time();

    ecrt_domain_queue(domain);
    ecrt_master_send(master);
    do {
        g_usleep(5);
        ecrt_master_receive(master);
        ecrt_domain_process(domain);
        ecrt_domain_state(domain, &state);
    } while (state.wc_state != EC_WC_COMPLETE);

    roundtrip = g_get_monotonic_time() - start;

Here are my questions.

1. I had to add a 5 us delay to avoid hogging the CPU. Without it,
   every 5/10000 iteration, I was getting a 40 ms (milliseconds!)
   roundtrip. This maybe has nothing to do with EtherLab but... has
   anyone experienced this kind of behavior?

2. Is there a way to do the same without this awful polling loop?
   Callbacks? Anything else?

3. I have a function (fieldbus_automapping) that clears any previous
   PDO mapping and remap everything by using what returned by
   ecrt_master_get_pdo_entry(). This seems quite an obvious candidate
   for `libethercat` but, being a novice in EtherCAT, I'm fearing to say
   rubbish. Does that function existence make any sense? Is it worth to
   be included in `libethercat`?

4. Similar to the previous question: I have a function
   (fieldbus_autoconfigure, more a proof-of-concept than a real
   function) that sequentially registers the outputs and the inputs
   into the process data. Is it too much "high-level" to be upstreamed?

Ciao.
-- 
Nicola




More information about the Etherlab-users mailing list