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
--
Etherlab-users mailing list
Etherlab-users@etherlab.org
https://lists.etherlab.org/mailman/listinfo/etherlab-users